aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/maven
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/maven')
-rw-r--r--framework/src/maven/apache-maven-3.3.3/DEPENDENCIES111
-rw-r--r--framework/src/maven/apache-maven-3.3.3/LICENSE202
-rw-r--r--framework/src/maven/apache-maven-3.3.3/NOTICE5
-rw-r--r--framework/src/maven/apache-maven-3.3.3/README.md23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/apache-maven/README.txt79
-rw-r--r--framework/src/maven/apache-maven-3.3.3/apache-maven/pom.xml216
-rw-r--r--framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/m2.conf8
-rwxr-xr-xframework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvn232
-rw-r--r--framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvn.cmd176
-rwxr-xr-xframework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvnDebug41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvnDebug.cmd31
-rwxr-xr-xframework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvnyjp42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/apache-maven/src/conf/logging/simplelogger.properties25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/apache-maven/src/conf/settings.xml257
-rw-r--r--framework/src/maven/apache-maven-3.3.3/apache-maven/src/conf/toolchains.xml103
-rw-r--r--framework/src/maven/apache-maven-3.3.3/apache-maven/src/lib/ext/README.txt2
-rw-r--r--framework/src/maven/apache-maven-3.3.3/apache-maven/src/main/appended-resources/META-INF/LICENSE.vm49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/apache-maven/src/main/assembly/bin.xml94
-rw-r--r--framework/src/maven/apache-maven-3.3.3/apache-maven/src/main/assembly/src.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/apache-maven/src/site/site.xml29
-rw-r--r--framework/src/maven/apache-maven-3.3.3/apache-maven/src/test/java/org/apache/maven/settings/GlobalSettingsTest.java59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/build.xml307
-rw-r--r--framework/src/maven/apache-maven-3.3.3/deploySite.sh23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/doap_Maven.rdf178
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/pom.xml130
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorReaderDelegate.java153
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorUtils.java81
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java435
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCache.java119
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java229
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java322
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java636
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java163
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadataGenerator.java82
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenAetherModule.java76
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenMetadata.java150
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java141
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenSnapshotMetadata.java100
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenWorkspaceReader.java32
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RelocatedArtifact.java116
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java152
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java107
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/SnapshotMetadataGeneratorFactory.java52
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java133
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGenerator.java108
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGeneratorFactory.java52
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/package-info.java25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/site/apt/index.apt33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/site/site.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/AbstractRepositoryTestCase.java87
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java77
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/DefaultVersionResolverTest.java96
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/RepositorySystemTest.java220
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleRepositoryListener.java132
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleTransferListener.java186
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5324/07.20.3-SNAPSHOT/maven-metadata.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5459/0.4.0-SNAPSHOT/maven-metadata.xml47
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0-classifier.zip0
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.jar0
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.pom48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.zip0
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/maven-metadata.xml34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0-sources.jar0
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0.jar0
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0.pom31
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/maven-metadata.xml34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/parent/1.0/parent-1.0.pom43
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/parent/maven-metadata.xml34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-ant-tasks-2.1.1.jarbin0 -> 1314262 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/pom.xml58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java161
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java215
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java597
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/InvalidArtifactRTException.java100
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/handler/ArtifactHandler.java42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java27
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java135
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java222
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/Authentication.java126
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout2.java31
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataStoreException.java40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java347
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java85
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java68
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/CyclicDependencyException.java45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/MultipleArtifactsNotFoundException.java122
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/filter/ArtifactFilter.java30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ArtifactVersion.java42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java503
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/DefaultArtifactVersion.java228
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/InvalidVersionSpecificationException.java34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/OverConstrainedVersionException.java49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java195
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java583
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/repository/Proxy.java197
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadata.java83
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/site/apt/index.apt47
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/site/site.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java231
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/DefaultArtifactVersionTest.java223
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java730
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/pom.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/DefaultProblem.java161
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/DefaultProblemCollector.java64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/FileSource.java79
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/Problem.java101
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/ProblemCollector.java59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/ProblemCollectorFactory.java43
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/Source.java49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/StringSource.java90
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/UrlSource.java80
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/site/site.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/DefaultProblemCollectorTest.java76
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/DefaultProblemTest.java136
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/FileSourceTest.java93
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/ProblemCollectorFactoryTest.java45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/StringSourceTest.java79
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/UrlSourceTest.java87
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/resources/source.txt1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/pom.xml115
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactScopeEnum.java133
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactStatus.java124
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/UnknownRepositoryLayoutException.java54
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/deployer/ArtifactDeployer.java61
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/deployer/ArtifactDeploymentException.java43
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java161
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/installer/ArtifactInstallationException.java43
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/installer/ArtifactInstaller.java60
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java135
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java182
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/manager/WagonConfigurationException.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/manager/WagonManager.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryFactory.java55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java267
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java124
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/layout/FlatRepositoryLayout.java92
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java558
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/GroupRepositoryMetadata.java119
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/MetadataBridge.java172
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/MetadataUtils.java39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataReadException.java40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java98
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java108
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java167
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java643
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ResolutionListenerForDepMgmt.java43
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/UnresolvedArtifacts.java66
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/WarningResolutionListener.java90
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/InversionArtifactFilter.java65
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java93
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/TypeArtifactFilter.java66
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/versioning/ManagedVersionMap.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/execution/DefaultRuntimeInformation.java64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/execution/RuntimeInformation.java34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/DefaultMavenProfilesBuilder.java93
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java248
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/MavenProfilesBuilder.java37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/ProfileManager.java58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/ProfilesConversionUtils.java151
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/DetectedProfileActivator.java35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/FileProfileActivator.java109
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/JdkPrefixProfileActivator.java97
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/OperatingSystemProfileActivator.java161
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/ProfileActivationException.java39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/ProfileActivator.java33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/SystemPropertyProfileActivator.java114
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java324
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java107
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/InvalidProjectModelException.java74
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/MavenProjectBuilder.java76
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/MissingRepositoryElementException.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/ModelUtils.java367
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/ProjectUtils.java118
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java752
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/AbstractStringBasedModelInterpolator.java407
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/BuildTimestampValueSource.java63
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolationException.java72
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java66
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/PathTranslatingPostProcessor.java64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/StringSearchModelInterpolator.java410
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/path/DefaultPathTranslator.java261
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java76
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/validation/ModelValidationResult.java95
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/validation/ModelValidator.java37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/reporting/MavenReportException.java39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorSelector.java205
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MavenArtifactMetadata.java119
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataGraph.java96
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataGraphNode.java101
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionRequest.java202
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionResult.java356
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MirrorSelector.java44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/UserLocalArtifactRepository.java74
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/VersionNotFoundException.java83
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/ChecksumFailedException.java42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java438
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultWagonManager.java823
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java906
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/MavenArtifact.java96
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/TransferListenerAdapter.java187
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/UpdateCheckManager.java41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/WagonConfigurationException.java63
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/WagonManager.java79
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/ArtifactRepositoryFactory.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/DefaultArtifactRepositoryFactory.java144
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/DefaultLegacyArtifactCollector.java796
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/LegacyArtifactCollector.java62
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/ConflictResolver.java44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/ConflictResolverFactory.java48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/ConflictResolverNotFoundException.java47
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/DefaultConflictResolver.java36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/DefaultConflictResolverFactory.java80
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/FarthestConflictResolver.java47
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/NearestConflictResolver.java48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolver.java62
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolver.java62
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/AbstractVersionTransformation.java135
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ArtifactTransformation.java86
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ArtifactTransformationManager.java82
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/DefaultArtifactTransformationManager.java86
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/LatestArtifactTransformation.java74
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ReleaseArtifactTransformation.java100
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/SnapshotTransformation.java171
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/ArtifactMetadata.java353
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/ClasspathContainer.java144
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/ClasspathTransformation.java46
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/DefaultClasspathTransformation.java183
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolutionPolicy.java73
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolver.java249
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/GraphConflictResolutionException.java51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/GraphConflictResolutionPolicy.java35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/GraphConflictResolver.java48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraph.java523
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphEdge.java189
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphTransformationException.java50
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphVertex.java216
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolution.java71
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionException.java49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionRequest.java79
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionRequestTypeEnum.java45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionResult.java172
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataRetrievalException.java59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataSource.java39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataTreeNode.java148
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumentationException.java37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumenter.java175
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/mdo/paramdoc.mdo154
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/mdo/profiles.mdo398
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/project.paramdoc.xml172
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/rootless.paramdoc.xml48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/settings.paramdoc.xml53
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin.xml218
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/site/site.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java371
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/ArtifactUtilsTest.java79
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/DefaultArtifactTest.java140
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/deployer/ArtifactDeployerTest.java67
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/deployer/SimpleArtifactMetadataSource.java66
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/factory/DefaultArtifactFactoryTest.java49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/handler/ArtifactHandlerMock.java100
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/installer/ArtifactInstallerTest.java61
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/metadata/TestMetadataSource.java102
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/repository/MavenArtifactRepositoryTest.java59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolutionExceptionTest.java64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java283
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactResolverTest.java111
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/TestFileWagon.java94
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/TestTransferListener.java43
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/AndArtifactFilterTest.java62
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/FilterHashEqualsTest.java50
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilterTest.java62
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilterTest.java96
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/testutils/TestFileManager.java224
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/transform/TransformationManagerTest.java46
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/profiles/manager/DefaultProfileManagerTest.java232
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java185
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/ClasspathArtifactResolver.java89
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java110
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecyclePluginAnalyzer.java78
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java192
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/ModelUtilsTest.java616
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java149
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/TestArtifactResolver.java30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/TestMavenRepositorySystem.java30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java68
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/AbstractProjectInheritanceTestCase.java57
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t00/ProjectInheritanceTest.java93
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t01/ProjectInheritanceTest.java92
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t02/ProjectInheritanceTest.java169
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t03/ProjectInheritanceTest.java68
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t04/ProjectInheritanceTest.java86
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t05/ProjectInheritanceTest.java79
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t06/ProjectInheritanceTest.java80
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t07/ProjectInheritanceTest.java82
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t08/ProjectInheritanceTest.java81
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t09/ProjectInheritanceTest.java119
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t10/ProjectInheritanceTest.java94
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t11/ProjectInheritanceTest.java64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t12/ProjectInheritanceTest.java65
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t12scm/ProjectInheritanceTest.java125
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/path/DefaultPathTranslatorTest.java58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/DefaultMirrorSelectorTest.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositoryLayout.java89
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositorySystemTest.java206
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java259
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java240
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java422
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/LegacyRepositorySystemTest.java88
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/PerLookupWagon.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/StringWagon.java107
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonA.java39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonB.java39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonC.java39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonMock.java50
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java984
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/AbstractConflictResolverTest.java143
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/FarthestConflictResolverTest.java107
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NearestConflictResolverTest.java107
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolverTest.java107
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolverTest.java107
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultClasspathTransformationTest.java120
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolutionPolicyTest.java59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolverTest.java153
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/TestMetadataSource.java99
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.jarbin0 -> 1898 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.pom41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/a/maven-metadata.xml12
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.jarbin0 -> 1936 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.pom49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/b/maven-metadata.xml12
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/repository-system/maven-core-2.1.0.jar0
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/artifact-install/artifact-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p0-1.0.pom11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p1-1.0.pom16
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p2-1.0.pom18
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p3-1.0.pom14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p4-1.0.pom13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p0-1.0.pom11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p1-1.0.pom16
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p2-1.0.pom16
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p3-1.0.pom16
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p4-1.0.pom16
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/p4/p5/pom.xml32
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/p4/pom.xml32
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/pom.xml33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/pom.xml37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/pom.xml51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/pom.xml30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t03/p0/p1/pom.xml45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t03/p0/pom.xml30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-a-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-b-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-b-2.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-c-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-c-2.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-a-1.0.pom21
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-b-1.0.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-b-2.0.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-c-1.0.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-c-2.0.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/p0/p1/pom.xml41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/p0/pom.xml37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-a-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-a-2.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-b-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-b-1.1.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-b-2.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-c-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-d-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-d-1.1.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-d-1.2.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-a-1.0.pom23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-a-2.0.pom23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-b-1.0.pom24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-b-1.1.pom24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-b-2.0.pom24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-c-1.0.pom17
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-d-1.0.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-d-1.1.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-d-1.2.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/p0/p1/pom.xml54
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/p0/pom.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-a-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-b-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-b-1.1.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-c-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-d-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-d-1.1.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-d-1.2.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-a-1.0.pom23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-b-1.0.pom24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-b-1.1.pom24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-c-1.0.pom17
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-d-1.0.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-d-1.1.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-d-1.2.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/p0/p1/pom.xml54
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/p0/pom.xml37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-a-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-b-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-b-1.1.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-c-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-d-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-d-1.1.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-d-1.2.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-a-1.0.pom23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-b-1.0.pom24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-b-1.1.pom24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-c-1.0.pom17
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-d-1.0.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-d-1.1.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-d-1.2.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/p0/p1/pom.xml54
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/p0/pom.xml37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-a-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-b-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-b-1.1.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-c-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-d-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-d-1.1.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-d-1.2.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-a-1.0.pom23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-b-1.0.pom24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-b-1.1.pom24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-c-1.0.pom17
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-d-1.0.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-d-1.1.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-d-1.2.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/p0/p1/pom.xml59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/p0/pom.xml37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-a-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-b-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-c-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-d-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-a-1.0.pom24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-b-1.0.pom17
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-c-1.0.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-d-1.0.pom17
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/p0/p1/pom.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/p0/p2/pom.xml42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/p0/pom.xml38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/jars/t10-a-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/jars/t10-b-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/jars/t10-c-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/poms/t10-a-1.0.pom24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/poms/t10-b-1.0.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/poms/t10-c-1.0.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/p0/p1/pom.xml42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/p0/pom.xml41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t11/p0/p1/pom.xml16
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t11/p0/pom.xml27
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12/p0/p1/pom.xml29
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12/p0/pom.xml30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/maven/p0/1.0/p0-1.0.pom18
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/maven/p1/1.0/p1-1.0.pom11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/p0/modules/p1/pom.xml11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/p0/pom.xml18
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/marker.txt1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-a-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-b-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-c-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-d-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-a-1.0.pom23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-b-1.0.pom23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-c-1.0.pom16
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.1.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.2.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/poms/maven-test-snapshot-resolving-1.0.pom49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/deployer/ArtifactDeployerTest.xml23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/installer/ArtifactInstallerTest.xml23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/resolver/ArtifactResolverTest.xml71
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/resolver/ArtifactUpdatePolicyTest.xml29
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/project/AbstractMavenProjectTestCase.xml9
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/pom.xml155
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/project-with-scoped-dependencies.xml99
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-compile-dep.xml57
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-default-dep.xml58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-provided-dep.xml57
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-runtime-dep.xml58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-test-dep.xml58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/lifecycle-executor.txt217
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/plugin-manager.txt184
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/pom.xml238
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/project-builder.txt1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/AbstractMavenLifecycleParticipant.java77
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ArtifactFilterManager.java51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ArtifactFilterManagerDelegate.java34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/BuildAbort.java39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/BuildFailureException.java39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java112
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DefaultMaven.java521
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java217
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DuplicateProjectException.java61
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/InternalErrorException.java36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/Maven.java34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/MavenExecutionException.java55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/MissingModuleException.java48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ProjectBuildFailureException.java55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ProjectCycleException.java39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ProjectDependenciesResolver.java95
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ReactorReader.java255
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/RepositoryUtils.java362
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/SessionScoped.java42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/DependencyResolutionRequiredException.java35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/InvalidRepositoryException.java65
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/factory/ArtifactFactory.java59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/factory/DefaultArtifactFactory.java160
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/handler/DefaultArtifactHandler.java134
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/ArtifactHandlerManager.java37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java73
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/AbstractArtifactMetadata.java33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataRetrievalException.java55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataSource.java52
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/ResolutionGroup.java46
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/DefaultRepositoryRequest.java134
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/LegacyLocalRepositoryManager.java435
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/MavenArtifactRepository.java412
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/RepositoryCache.java58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/RepositoryRequest.java95
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java112
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java255
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/ArtifactRepositoryMetadata.java129
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java92
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataDeploymentException.java40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataInstallationException.java40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java61
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataResolutionException.java40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/DefaultMetadataReader.java110
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/MetadataParseException.java93
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/MetadataReader.java82
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java329
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java358
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/DefaultResolutionErrorHandler.java89
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionErrorHandler.java31
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionListener.java109
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java251
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/AbstractScopeArtifactFilter.java107
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/AndArtifactFilter.java99
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/CumulativeScopeArtifactFilter.java122
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExcludesArtifactFilter.java44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionSetFilter.java86
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/IncludesArtifactFilter.java93
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java78
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/bridge/MavenRepositorySystem.java785
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ArtifactClassRealmConstituent.java76
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmConstituent.java74
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmManager.java88
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmManagerDelegate.java36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmRequest.java100
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java416
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmRequest.java82
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BasedirBeanConfigurationPathTranslator.java71
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationException.java41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationPathTranslator.java41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationRequest.java130
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationValuePreprocessor.java45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurator.java44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/DefaultBeanConfigurationRequest.java195
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/internal/DefaultBeanConfigurator.java160
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/AbstractEventSpy.java45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/EventSpy.java77
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyDispatcher.java158
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyExecutionListener.java163
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyRepositoryListener.java176
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/exception/DefaultExceptionHandler.java336
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/exception/ExceptionHandler.java30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/exception/ExceptionSummary.java79
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/AbstractExecutionListener.java116
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/BuildFailure.java61
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/BuildSuccess.java44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/BuildSummary.java78
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java1299
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulator.java318
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionResult.java109
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ExecutionEvent.java92
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ExecutionListener.java66
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java443
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequestPopulationException.java43
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequestPopulator.java74
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionResult.java70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java438
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionEvent.java86
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionListener.java40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ProjectDependencyGraph.java64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionEvent.java90
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionListener.java44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java199
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/SettingsAdapter.java126
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/MojoExecutionScoped.java42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/WeakMojoExecutionListener.java44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScope.java190
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeCoreModule.java45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeModule.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExports.java75
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java53
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExtensionEntry.java141
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java488
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java134
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/FilteredProjectDependencyGraph.java111
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/GraphBuilder.java31
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java271
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/internal/aether/LoggingRepositoryListener.java141
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java177
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java144
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifeCyclePluginAnalyzer.java32
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/Lifecycle.java80
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java111
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java89
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleMappingDelegate.java52
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleNotFoundException.java54
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecyclePhaseNotFoundException.java55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/MavenExecutionPlan.java202
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/MissingProjectException.java41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/MojoExecutionConfigurator.java44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/NoGoalSpecifiedException.java41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java67
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildThreadFactory.java39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/CompoundProjectExecutionListener.java72
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultExecutionEvent.java77
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultExecutionEventCatapult.java119
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java591
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java158
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java258
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleTaskSegmentCalculator.java155
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultMojoExecutionConfigurator.java108
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultProjectArtifactFactory.java53
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DependencyContext.java114
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionEventCatapult.java40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java84
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/GoalTask.java45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDebugLogger.java182
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java334
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculator.java67
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java154
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java95
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java150
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTask.java50
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculator.java61
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java309
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java394
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/PhaseRecorder.java78
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectArtifactFactory.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectBuildList.java158
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectIndex.java70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectSegment.java106
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorBuildStatus.java80
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorContext.java83
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/TaskSegment.java73
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/Builder.java47
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java199
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderNotFoundException.java29
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ConcurrencyDependencyGraph.java153
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java197
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxer.java477
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/singlethreaded/SingleThreadedBuilder.java65
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/DefaultLifecycleMapping.java111
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/Lifecycle.java83
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/LifecycleMapping.java39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java171
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/monitor/event/EventDispatcher.java37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/monitor/event/EventMonitor.java35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/BuildPluginManager.java54
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/CacheUtils.java211
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/CompoundMojoExecutionListener.java64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/CycleDetectedInPluginGraphException.java46
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DebugConfigurationListener.java91
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java244
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultExtensionRealmCache.java170
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginArtifactsCache.java218
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginDescriptorCache.java219
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRealmCache.java219
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/ExtensionRealmCache.java84
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginDescriptorException.java44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginException.java48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/LegacySupport.java59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginManager.java128
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java78
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java237
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginArtifactsCache.java91
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginConfigurationException.java74
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginContainerException.java88
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginDescriptorCache.java58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginDescriptorParsingException.java58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginExecutionException.java90
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginIncompatibleException.java36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginLoaderException.java124
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java82
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginManagerException.java197
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginNotFoundException.java58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterException.java192
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java482
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginRealmCache.java85
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginResolutionException.java47
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java74
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java946
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java256
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java261
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/PlexusUtilsInjector.java87
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/PluginDependenciesResolver.java71
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/PluginDependencyResolutionListener.java158
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/ValidatingConfigurationListener.java97
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/WagonExcluder.java109
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/DefaultPluginPrefixRequest.java156
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/NoPluginFoundForPrefixException.java65
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixRequest.java115
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixResolver.java42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixResult.java55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java294
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResult.java90
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionRequest.java165
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionNotFoundException.java47
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionRequest.java115
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolutionException.java107
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolver.java42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResult.java47
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java408
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResult.java69
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionRequest.java82
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionResult.java111
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectHelper.java128
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java155
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java929
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java295
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java339
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java110
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java333
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectRealmCache.java147
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionException.java42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionRequest.java81
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionResult.java80
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DuplicateArtifactAttachmentException.java64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DuplicateProjectException.java80
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ExtensionDescriptor.java88
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ExtensionDescriptorBuilder.java168
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/InvalidProjectVersionException.java59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/MavenProject.java1976
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/MavenProjectHelper.java76
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuilder.java98
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingException.java145
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java81
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java194
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingResult.java74
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectDependenciesResolver.java40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java248
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectRealmCache.java79
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectSorter.java289
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ReactorModelCache.java103
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ReactorModelPool.java106
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/RepositorySessionDecorator.java36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java403
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ArtifactWithDependencies.java33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/AttachedArtifact.java185
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java347
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMetadataSource.java37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/InvalidDependencyVersionException.java55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataCache.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java770
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/PluginArtifact.java94
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifact.java100
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifactMetadata.java130
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/path/PathTranslator.java41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/properties/internal/EnvironmentUtils.java70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/properties/internal/SystemProperties.java51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactDoesNotExistException.java34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferEvent.java343
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferFailedException.java35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferListener.java36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferResource.java66
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java195
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/LocalArtifactRepository.java33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/LocalRepositoryNotAccessibleException.java44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/RepositorySystem.java164
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/AbstractArtifactMetadata.java65
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataRetrievalException.java68
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataSource.java78
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/DefaultMetadataResolutionRequest.java132
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/MetadataResolutionRequest.java113
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ResolutionGroup.java83
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/rtinfo/RuntimeInformation.java49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformation.java150
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScope.java169
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScopeModule.java63
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java158
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java81
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/SettingsConfigurationException.java63
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/SettingsUtils.java321
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchain.java190
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java140
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java82
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java78
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/MisconfiguredToolchainException.java39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/RequirementMatcher.java30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/RequirementMatcherFactory.java109
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/Toolchain.java46
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainFactory.java44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainManager.java64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainManagerPrivate.java58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainPrivate.java48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainsBuilder.java46
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuilder.java138
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuildingRequest.java63
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuildingResult.java66
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuilder.java41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuildingException.java93
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuildingRequest.java64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuildingResult.java50
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/io/DefaultToolchainsReader.java115
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/io/ToolchainsParseException.java94
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/io/ToolchainsReader.java83
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/DefaultJavaToolChain.java55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchain.java67
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchainFactory.java127
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchainImpl.java87
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/merge/MavenToolchainMerger.java103
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/mdo/extension.mdo65
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/mdo/toolchains.mdo231
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/maven/extension.xml173
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/plexus/artifact-handlers.xml219
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/plexus/components.xml134
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/plexus/default-bindings.xml399
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/build.properties23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages.properties34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_de.properties34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_el.properties33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_en.properties23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_es.properties33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_fr.properties33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_ja.properties34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_ko.properties34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_nl.properties33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_no.properties33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_pl.properties33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_zh_CN.properties34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/project/standalone.xml30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/artifact-handlers.apt59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/configuration-management.apt139
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/default-bindings.apt.vm67
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/getting-to-container-configured-mojos.apt102
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/index.apt77
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/inheritance.apt100
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/lifecycles.apt.vm49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/offline-mode.apt269
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/plugin-execution-isolation.apt57
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/scripting-support/marmalade-support.apt196
-rwxr-xr-xframework/src/maven/apache-maven-3.3.3/maven-core/src/site/resources/design/2.1-lifecycle-refactor-class-diagram.pngbin0 -> 38152 bytes
-rwxr-xr-xframework/src/maven/apache-maven-3.3.3/maven-core/src/site/resources/design/2.1-lifecycle-refactor-sequence-diagram.pngbin0 -> 87383 bytes
-rwxr-xr-xframework/src/maven/apache-maven-3.3.3/maven-core/src/site/resources/design/2.1-lifecycle-refactor.graffle4024
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/site/site.xml42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java360
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/DefaultMavenTest.java45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/MavenLifecycleParticipantTest.java173
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/MavenTest.java69
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/ProjectDependenciesResolverTest.java114
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/artifact/handler/ArtifactHandlerTest.java89
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/configuration/DefaultBeanConfiguratorTest.java148
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/exception/DefaultExceptionHandlerTest.java60
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java62
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionTest.java52
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeTest.java122
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/graph/DefaultProjectDependencyGraphTest.java172
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/DefaultLifecyclesTest.java59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/DelegatingMojoExecutionListener.java75
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/DelegatingProjectExecutionListener.java82
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/EmptyLifecyclePluginAnalyzer.java77
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorSubModulesTest.java98
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java553
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/MavenExecutionPlanTest.java77
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/MojoExecutionXPathContainer.java72
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuildListCalculatorTest.java49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuilderCommonTest.java76
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ConcurrencyDependencyGraphTest.java94
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java82
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculatorImplTest.java57
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/PhaseRecorderTest.java49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ProjectBuildListTest.java42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxerTest.java167
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/AboutTheStubs.html55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/BuildPluginManagerStub.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/CompletionServiceStub.java89
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/DefaultLifecyclesStub.java63
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ExecutionEventCatapultStub.java42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifeCyclePluginAnalyzerStub.java74
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java231
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleTaskSegmentCalculatorStub.java89
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LoggerStub.java110
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/MojoExecutorStub.java70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/PluginPrefixResolverStub.java52
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/PluginVersionResolverStub.java48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependenciesResolverStub.java109
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java227
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStubTest.java61
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java342
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExceptionTest.java164
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java447
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java74
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java189
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java193
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java109
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java62
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/ExtensionDescriptorBuilderTest.java101
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java192
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/MavenProjectTest.java197
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java1878
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java87
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/ProjectSorterTest.java363
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/TestMetadataSource.java51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultMavenMetadataCacheTest.java81
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java183
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.java101
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/PomTestWrapper.java121
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomAttributeIterator.java89
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomAttributePointer.java105
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomNodeIterator.java161
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomNodePointer.java155
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomPointerFactory.java61
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/LegacyRepositoryLayout.java89
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestArtifactHandler.java83
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java123
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnectorFactory.java48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestRepositorySystem.java329
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformationTest.java81
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java159
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java126
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivateTest.java166
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerTest.java153
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainTest.java158
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/RequirementMatcherFactoryTest.java72
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/building/DefaultToolchainsBuilderTest.java185
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/building/ToolchainsBuildingExceptionTest.java73
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/merge/MavenToolchainMergerTest.java176
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/default-maven/cyclic-reference/module-a/pom.xml19
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/default-maven/cyclic-reference/module-b/pom.xml19
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/default-maven/cyclic-reference/pom.xml14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/mojo-configuration/pom.xml67
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-basic/pom.xml79
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/pom.xml72
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/src/main/java/org/apache/maven/lifecycle/test/App.java13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/src/test/java/org/apache/maven/lifecycle/test/AppTest.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-inheritance/pom.xml628
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-multiple-executions/pom.xml112
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-multiple-executions/src/main/mdo/remote-resources.mdo61
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-multiple-executions/src/main/mdo/supplemental-model.mdo61
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-plugin-level-configuration-only/pom.xml42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-listener-dependency-injection/pom.xml30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-participant-reactor-dependency-injection/module-a/pom.xml12
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-participant-reactor-dependency-injection/module-b/pom.xml12
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-participant-reactor-dependency-injection/pom.xml13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/mng-5003-plugin-realm-cache/pom.xml8
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-contributing-system-scope-plugin-dep/pom.xml44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-contributing-system-scope-plugin-dep/tools.jar0
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-build-extensions-plugin/pom.xml31
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-inheritance/pom.xml628
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/pom.xml63
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/pom.xml77
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.1/a-0.1.jarbin0 -> 5109 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.1/a-0.1.pom56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.2/a-0.2.jarbin0 -> 5111 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.2/a-0.2.pom56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/maven-metadata.xml13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/b/0.1/b-0.1.jarbin0 -> 5108 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/b/0.1/b-0.1.pom56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/b/maven-metadata.xml12
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/c/0.1/c-0.1.jarbin0 -> 5109 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/c/0.1/c-0.1.pom56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/c/maven-metadata.xml12
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/d/0.1/d-0.1.jarbin0 -> 5108 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/d/0.1/d-0.1.pom56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/d/maven-metadata.xml12
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/e/0.1/e-0.1.jarbin0 -> 5107 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/e/0.1/e-0.1.pom56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/e/maven-metadata.xml12
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/settings-template.xml55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/it0063/jdk/jre/placeholder.txt1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/it0063/jdk/lib/tools.jarbin0 -> 345 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/it0063/pom.xml55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/consumer/pom.xml66
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/dependency/dependency-1.jarbin0 -> 345 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/dependency/pom.xml70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/pom.xml37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/it0063/jdk/jre/placeholder.txt1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/it0063/jdk/lib/tools.jarbin0 -> 345 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/it0063/pom.xml55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/project-with-exclusions/pom.xml41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.jarbin0 -> 1898 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.pom41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/a/maven-metadata.xml12
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.jarbin0 -> 1936 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.pom49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/b/maven-metadata.xml12
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/0.1/maven-it-plugin-0.1.jarbin0 -> 13520 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/0.1/maven-it-plugin-0.1.pom70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/0.1/pom.xml70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/maven-metadata.xml14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-metadata.xml10
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.jarbin0 -> 10133 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.pom23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/maven/2.0/maven-2.0.pom264
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-clean-plugin/0.1/maven-clean-plugin-0.1.jarbin0 -> 6767 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-clean-plugin/0.1/maven-clean-plugin-0.1.pom70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-clean-plugin/maven-metadata.xml14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-compiler-plugin/0.1/maven-compiler-plugin-0.1.jarbin0 -> 8085 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-compiler-plugin/0.1/maven-compiler-plugin-0.1.pom70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-compiler-plugin/maven-metadata.xml14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-deploy-plugin/0.1/maven-deploy-plugin-0.1.jarbin0 -> 6777 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-deploy-plugin/0.1/maven-deploy-plugin-0.1.pom70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-deploy-plugin/maven-metadata.xml14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-install-plugin/0.1/maven-install-plugin-0.1.jarbin0 -> 6781 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-install-plugin/0.1/maven-install-plugin-0.1.pom70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-install-plugin/maven-metadata.xml14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-jar-plugin/0.1/maven-jar-plugin-0.1.jarbin0 -> 6790 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-jar-plugin/0.1/maven-jar-plugin-0.1.pom70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-metadata.xml45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-plugin-plugin/0.1/maven-plugin-plugin-0.1.jarbin0 -> 8007 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-plugin-plugin/0.1/maven-plugin-plugin-0.1.pom70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-plugin-plugin/maven-metadata.xml14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-resources-plugin/0.1/maven-resources-plugin-0.1.jarbin0 -> 8034 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-resources-plugin/0.1/maven-resources-plugin-0.1.pom70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-resources-plugin/maven-metadata.xml14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-surefire-plugin/0.1/maven-surefire-plugin-0.1.jarbin0 -> 6827 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-surefire-plugin/0.1/maven-surefire-plugin-0.1.pom70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-surefire-plugin/maven-metadata.xml14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jarbin0 -> 168568 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom27
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/artifact-id-inheritance/child/pom.xml32
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/artifact-id-inheritance/pom.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/basedir-aligned-interpolation/pom.xml60
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/basedir-interpolation/pom-with-unusual-name.xml39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/baseurl-interpolation/pom.xml38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/boolean-interpolation/pom.xml82
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/build-extension-inheritance/pom.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/build-extension-inheritance/sub/pom.xml75
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/complete-model/w-parent/pom.xml31
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/complete-model/w-parent/sub/pom.xml319
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/complete-model/wo-parent/pom.xml313
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/config-with-plugin-mng/pom.xml39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/consecutive_empty_elements/pom.xml14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/contributors-inheritance/child-2/pom.xml45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/contributors-inheritance/pom.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-inheritance/maven-parent.xml31
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-inheritance/pom.xml48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-inheritance/sub/pom.xml34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-management-with-interpolation/pom.xml19
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-management-with-interpolation/sub/pom.xml17
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-order/w-plugin-mngt/pom.xml68
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-order/wo-plugin-mngt/pom.xml66
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope-inheritance/pom.xml16
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope-inheritance/sub/pom.xml19
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope/pom.xml18
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope/sub/pom.xml24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/developers-inheritance/child-2/pom.xml45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/developers-inheritance/pom.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/distribution-management/pom.xml39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dual-execution-ids/pom.xml28
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dual-execution-ids/sub/pom.xml43
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/duplicate-exclusions-dependency/nexus-parent.xml29
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/duplicate-exclusions-dependency/pom.xml33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/duplicate-exclusions-dependency/sub/pom.xml16
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/empty-distMng-repo-url/pom.xml15
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/empty-scm/pom.xml58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/equal-plugin-deps/pom.xml64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/equal-plugin-exec-ids/pom.xml83
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/execution-configuration-join/pom.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/execution-configuration-subcollections/pom.xml42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/execution-configuration/pom.xml58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/foo/sub/pom.xml418
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/full-interpolation/pom.xml66
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/id-container-joining-with-empty-elements/pom.xml97
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/id-container-joining-with-empty-elements/sub/pom.xml84
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/active-profile/pom.xml50
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/active-profile/sub/pom.xml54
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/no-profile/pom.xml41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/no-profile/sub/pom.xml45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/interpolation-cli-wins/pom.xml39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/jdk-activation/pom.xml105
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/join-different-containers-same-id/pom.xml66
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/licenses-inheritance/child-2/pom.xml47
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/licenses-inheritance/pom.xml37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/limited-inheritance/child/pom.xml61
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/limited-inheritance/pom.xml87
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/mailing-lists-inheritance/child-2/pom.xml45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/mailing-lists-inheritance/pom.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/managed-profile-dependency/pom.xml55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/managed-profile-dependency/sub/pom.xml55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-filter-order/pom.xml44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-filter-order/sub/pom.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mngt/pom.xml64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mngt/sub/pom.xml64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mngt/pom.xml62
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mngt/sub/pom.xml64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mngt/pom.xml59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mngt/sub/pom.xml59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mngt/pom.xml57
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mngt/sub/pom.xml59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mngt/pom.xml71
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mngt/sub/pom.xml71
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mngt/pom.xml69
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mngt/sub/pom.xml71
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/micromailer/pom.xml124
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/micromailer/spice-parent-9.pom103
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/multiple-filters/pom.xml17
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/multiple-repos/pom.xml44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/multiple-repos/sub/pom.xml45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/nested-build-dir-interpolation/pom.xml55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-inheritance/child3.xml7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-inheritance/pom.xml11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-inheritance/sub/pom.xml9
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-interpolation/pom.xml16
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-interpolation/sub/pom.xml9
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-pom-packaging/pom.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-pom-packaging/sub/pom.xml40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/platform-file-separator/pom.xml40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/no-profile/pom.xml80
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/no-profile/subproject/pom.xml70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/with-profile/pom.xml90
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/with-profile/subproject/pom.xml80
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-attributes/w-plugin-mngt/pom.xml62
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-attributes/w-profile/pom.xml74
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-attributes/wo-plugin-mngt/pom.xml53
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-merging/child/pom.xml76
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-merging/pom.xml72
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-order/w-plugin-mngt/pom.xml68
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-order/wo-plugin-mngt/pom.xml60
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-properties/pom.xml30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-config-order/w-plugin-mngt/pom.xml78
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-config-order/wo-plugin-mngt/pom.xml70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-goals-order/w-plugin-mngt/pom.xml66
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-goals-order/wo-plugin-mngt/pom.xml57
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-inheritance/pom.xml75
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-inheritance/w-merge/pom.xml48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-inheritance/wo-merge/pom.xml43
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-version-insensitive/pom.xml56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-version-insensitive/sub/pom.xml59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-wo-version/pom.xml55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-wo-version/sub/pom.xml58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mngt/pom.xml58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mngt/sub/pom.xml59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mngt/pom.xml56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mngt/sub/pom.xml59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/pom.xml71
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order-with-lifecycle/pom.xml52
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order/w-plugin-mngt/pom.xml76
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order/wo-plugin-mngt/pom.xml67
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/w-plugin-mngt/pom.xml72
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/wo-plugin-mngt/pom.xml64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/pom.xml67
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/pom.xml72
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/pom.xml51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-order/pom.xml68
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-simple/pom.xml17
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-simple/sub/pom.xml20
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-injection-merge-order/pom.xml133
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-dependencies/pom.xml25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-dependencies/sub/pom.xml25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-duplicate/pom.xml39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-duplicate/sub/pom.xml64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-for-implicit-plugin/child/pom.xml53
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-for-implicit-plugin/pom.xml61
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-inheritance/pom.xml64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-merge-simple/pom.xml17
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-order/nexus-parent.xml19
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-order/pom.xml28
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pluginmanagement-inherited/pom.xml18
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pluginmanagement-inherited/sub/pom.xml17
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-encoding/latin-1/pom.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-encoding/utf-8/pom.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-inheritance/pom.xml188
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-inheritance/sub/pom.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/prerequisites-inheritance/child/pom.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/prerequisites-inheritance/pom.xml33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-default-deactivation/pom.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-dependencies-multiple-profiles/pom.xml81
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-injected-dependencies/pom.xml75
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-injection-order/pom.xml68
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-module-inheritance/pom.xml18
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-module-inheritance/sub/pom.xml12
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-module/pom.xml24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-plugin-mng-dependencies/pom.xml77
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-plugin-mng-dependencies/sub/pom.xml62
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-plugins/pom.xml52
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-properties-interpolation/pom.xml54
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-inheritance/pom.xml34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-inheritance/sub/pom.xml40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-no-duplication/pom.xml12
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-no-duplication/sub/pom.xml17
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/repo-inheritance/pom.xml64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/reporting-interpolation/pom.xml6
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/reporting-plugin-config/pom.xml51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/reporting-plugin-config/sub/pom.xml48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/single-configuration-inheritance/jetty-parent.xml37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/single-configuration-inheritance/pom.xml41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/sytem-property-interpolation/pom.xml30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unc-path/pom.xml41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unc-path/sub/pom.xml57
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/pom.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/pom.xml44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/pom.xml47
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/pom.xml42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/artifact-repo-in-profile/pom.xml51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/artifact-repo/pom.xml45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/plugin-repo-in-profile/pom.xml51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/plugin-repo/pom.xml45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unprefixed-expression-interpolation/child/pom.xml104
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unprefixed-expression-interpolation/pom.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-append/child/pom.xml64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-append/parent/pom.xml53
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/another-parent/pom.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/another-parent/sub/pom.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/pom.xml74
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/sub/pom.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-no-decoding/pom.xml64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-coalesce-text/pom.xml567
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-markup-interpolation/pom.xml41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-whitespace/pom.xml43
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-whitespace/sub/pom.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/repositories/pom.xml29
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/repositories/settings.xml55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/settings-no-pom/pom.xml13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/settings-no-pom/settings.xml20
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/test-pom-and-settings-interpolation/pom.xml78
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/test-pom-and-settings-interpolation/settings.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/META-INF/maven/org.apache.maven/maven-core/pom.properties1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/META-INF/plexus/components.xml113
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/canonical-pom.xml55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/dependencyManagement-pom.xml65
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/distributionManagement-pom.xml44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-a-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-a-1.1.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-b-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-b-1.1.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-c-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-c-1.1.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-d-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-d-1.1.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-d-1.2.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-a-1.0.pom14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-a-1.1.pom14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-b-1.0.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-b-1.1.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-c-1.0.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-c-1.1.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-d-1.0.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-d-1.1.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-d-1.2.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p1/pom.xml45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p2/pom.xml56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p3/pom.xml59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p4/pom.xml67
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/pom.xml26
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/marker.txt1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-a-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-b-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-c-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-d-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-a-1.0.pom23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-b-1.0.pom23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-c-1.0.pom16
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.1.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.2.pom7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/poms/maven-test-snapshot-resolving-1.0.pom49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/MavenLifecycleParticipantTest.xml9
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/execution/test-extension-1.jarbin0 -> 4208 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.jarbin0 -> 121070 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.jar.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.jar.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.pom29
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/apache/3/apache-3.pom82
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/apache/3/apache-3.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/apache/3/apache-3.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jarbin0 -> 163984 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jar.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jar.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom112
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.jarbin0 -> 4208 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.pom73
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.jarbin0 -> 2582 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.pom44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/4/maven-parent-4.pom304
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/4/maven-parent-4.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/4/maven-parent-4.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom466
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jarbin0 -> 46326 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom21
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom170
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.jarbin0 -> 15961 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.jar.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.jar.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.pom51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.jarbin0 -> 42472 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.jar.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.jar.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.pom94
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jarbin0 -> 42636 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jar.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jar.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom78
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.jarbin0 -> 33149 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.jar.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.jar.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom63
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.jarbin0 -> 36108 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.jar.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.jar.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.pom61
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom60
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.jarbin0 -> 210679 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.jar.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.jar.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.pom56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.jarbin0 -> 238880 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.jar.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.jar.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.pom98
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-32/plexus-containers-1.0-alpha-32.pom49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-32/plexus-containers-1.0-alpha-32.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-32/plexus-containers-1.0-alpha-32.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jarbin0 -> 168568 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom27
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.jarbin0 -> 205043 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.jar.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.jar.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom61
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom273
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom308
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom205
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom259
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom257
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/repo-marker.txt1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/lifecycle/LifecycleExecutorTest.xml9
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/lifecycle/pom.xml628
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/plugin/PluginManagerTest.xml9
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/AbstractMavenProjectTestCase.xml9
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/PomConstructionTest.xml13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildFromFile/pom.xml8
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/1/project-caching-1.pom8
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/maven-metadata-local.xml11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildModelLineage/pom.xml7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/child/pom.xml10
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/pom.xml7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/pom.xml10
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/settings/PomConstructionWithSettingsTest.xml9
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/global.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/model/toolchains-jdks-extend.xml45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/model/toolchains-jdks-extra.xml45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/model/toolchains-jdks.xml43
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/user.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jarbin0 -> 168568 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom27
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.sha11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/pom.xml52
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/plugin-level-dep.pom.xml24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/pom-interp.xml28
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/pom-relative.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/pom.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/bad-dependency.xml27
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/bad-project.xml20
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/base-directory-alignment/project-which-needs-directory-alignment-child.xml33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/base-directory-alignment/project-which-needs-directory-alignment.xml135
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/base-directory-alignment/subproject/project-which-needs-directory-alignment-child.xml29
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/build-path-expression-pom.xml14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/build.properties18
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/child-which-inherits-from-super-model.xml28
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/child-with-bogus-parent.xml29
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/child.xml33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/duplicate-plugins-merged-pom.xml48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/fully-populated-child.xml168
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/grandchild-check/child/grandchild/pom.xml10
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/grandchild-check/child/pom.xml13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/grandchild-check/pom.xml7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/import-scope-pom-resolves-from-property-based-repository.xml31
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/modelsource/module01/pom.xml12
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/modelsource/pom.xml13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/project.xml162
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/versionless-managed-dependency.xml24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/maven-test/jars/maven-test-b-1.0.jarbin0 -> 18874 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/maven-test/jars/maven-test-b-1.0.jar.md51
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/maven-test/poms/maven-test-b-1.0.pom21
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-c-1.0-SNAPSHOT.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-c-1.0-SNAPSHOT.jar.snapshot-version1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-2/maven-test/jars/maven-test-z-1.0.jar1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/withActiveByDefaultProfile-pom.xml40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/pom.xml144
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/pom.xml39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/settings.xml26
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/src/main/java/org/apache/maven/embedder/App.java28
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/src/test/java/org/apache/maven/embedder/AppTest.java53
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java271
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java205
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/CliRequest.java120
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java1610
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/configuration/ConfigurationProcessor.java28
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java290
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/event/DefaultEventSpyContext.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java381
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java143
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/BaseSlf4jConfiguration.java45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jConfiguration.java47
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jConfigurationFactory.java91
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jLogger.java145
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jLoggerManager.java111
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jStdoutLogger.java306
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Log4j2Configuration.java59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/LogbackConfiguration.java61
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java63
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/UnsupportedSlf4jBindingConfiguration.java72
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/AbstractMavenTransferListener.java90
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/BatchModeMavenTransferListener.java32
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListener.java133
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/QuietMavenTransferListener.java31
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/Slf4jMavenTransferListener.java97
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/slf4j/MavenSlf4jFriend.java35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/slf4j/impl/MavenSlf4jSimpleFriend.java40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/mdo/core-extensions.mdo88
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/resources/META-INF/MANIFEST.MF7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties22
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/apt/cli.apt.vm28
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/apt/index.apt.vm42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/apt/logging.apt112
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/site.xml40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/embedder-test-project/pom.xml48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/embedder-test-project/src/main/java/org/apache/maven/App.java13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/embedder-test-project/src/test/java/org/apache/maven/AppTest.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/aggregate-mojo-failure/plugin/pom.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/aggregate-mojo-failure/plugin/src/main/java/org/plugin/TestPlugin.java36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/aggregate-mojo-failure/project/pom.xml25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-build-plan/plugin/pom.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-build-plan/plugin/src/main/java/org/plugin/TestPlugin.java35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-build-plan/project/pom.xml25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-dep-version/pom.xml33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-direct-deps/local-repo/org/apache/maven/errortest/test-maven-ext/1/test-maven-ext-1.pom34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-direct-deps/project/pom.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-dep-ver-maven-plugin/1/bad-ext-plugin-dep-ver-maven-plugin-1.jarbin0 -> 3166 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-dep-ver-maven-plugin/1/bad-ext-plugin-dep-ver-maven-plugin-1.pom55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/plugin/pom.xml57
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/plugin/src/main/java/org/plugin/TestPlugin.java33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/project/pom.xml37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-maven-ver-maven-plugin/1/bad-ext-plugin-maven-ver-maven-plugin-1.jarbin0 -> 3166 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-maven-ver-maven-plugin/1/bad-ext-plugin-maven-ver-maven-plugin-1.pom54
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-maven-ver-maven-plugin/maven-metadata-local.xml12
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/plugin/pom.xml57
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/plugin/src/main/java/org/plugin/TestPlugin.java33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/project/pom.xml37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-maven-version/pom.xml11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-mg-dep-version/pom.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-non-dep-version/pom.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-profile-repo/pom.xml7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-profile-repo/profiles.xml18
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/config-rdonly-mojo-param/plugin/pom.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/config-rdonly-mojo-param/plugin/src/main/java/org/plugin/TestPlugin.java39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/config-rdonly-mojo-param/project/pom.xml47
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/deploy-repo-creation-err/pom.xml41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/duplicated-attachments/plugin/pom.xml54
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/duplicated-attachments/plugin/src/main/java/org/plugin/TestPlugin.java50
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/duplicated-attachments/project/pom.xml25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-loading-plugin/local-repo/org/apache/maven/errortest/err-loading-plugin-maven-plugin/1/err-loading-plugin-maven-plugin-1.jarbin0 -> 3166 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-loading-plugin/local-repo/org/apache/maven/errortest/err-loading-plugin-maven-plugin/1/err-loading-plugin-maven-plugin-1.pom55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-loading-plugin/project/pom.xml45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/local-repo/org/apache/maven/errortest/dep/1/dep-1.pom16
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/local-repo/org/apache/maven/errortest/err-resolving-ext-plugin-maven-plugin/1/err-resolving-ext-plugin-maven-plugin-1.jarbin0 -> 3166 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/local-repo/org/apache/maven/errortest/err-resolving-ext-plugin-maven-plugin/1/err-resolving-ext-plugin-maven-plugin-1.pom60
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/project/pom.xml18
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/local-repo/org/apache/maven/errortest/dep/1/dep-1.pom16
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/pom.xml27
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/src/main/java/org/apache/maven/test/error/mojoFailure/App.java13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-deps-resolve-err/local-repo/org/apache/maven/errortest/test-maven-ext-dep/1/test-maven-ext-dep-1.pom26
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-deps-resolve-err/local-repo/org/apache/maven/errortest/test-maven-ext/1/test-maven-ext-1.pom34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-deps-resolve-err/project/pom.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-artifact-missing/local-repo/org/apache/maven/errortest/ext-plugin-artifact-missing-maven-plugin/1/ext-plugin-artifact-missing-maven-plugin-1.pom55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-artifact-missing/project/pom.xml37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/pom.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/java/org/plugin/ComponentOne.java8
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/java/org/plugin/ComponentTwo.java8
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/java/org/plugin/TestPlugin.java39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/resources/META-INF/plexus/components.xml25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/project/pom.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/local-repo/org/apache/maven/errortest/ext-plugin-version-err-maven-plugin/1/ext-plugin-version-err-maven-plugin-1.jarbin0 -> 3166 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/local-repo/org/apache/maven/errortest/ext-plugin-version-err-maven-plugin/1/ext-plugin-version-err-maven-plugin-1.pom50
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/local-repo/org/apache/maven/errortest/ext-plugin-version-err-maven-plugin/maven-metadata-local.xml10
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/plugin/pom.xml57
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/plugin/src/main/java/org/plugin/TestPlugin.java33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/project/pom.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/ext/pom.xml38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/ext/src/main/java/org/ext/App.java13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/ext/src/main/resources/META-INF/plexus/components.xml1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/project/pom.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/interp-from-model/pom.xml7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/interp-from-project/project/local-repo/org/test/bad-pom/1/bad-pom-1.pom9
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/interp-from-project/project/pom.xml22
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/load-extern-profiles-ioex/pom.xml7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/load-extern-profiles-xex/pom.xml7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/load-extern-profiles-xex/profiles.xml4
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-direct-invoke-mojo/plugin/pom.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-direct-invoke-mojo/plugin/src/main/java/org/plugin/TestPlugin.java36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/pom.xml19
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/src/main/java/org/test/App.java13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/src/test/java/org/test/AppTest.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/pom.xml13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-parent-pom/pom.xml11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-req-mojo-param/plugin/pom.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-req-mojo-param/plugin/src/main/java/org/plugin/TestPlugin.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-req-mojo-param/project/pom.xml25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/plugin/pom.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/plugin/src/main/java/org/plugin/TestPlugin.java33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/plugin/src/main/resources/META-INF/maven/plugin.xml38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/project/pom.xml45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-exec-err/plugin/pom.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-exec-err/plugin/src/main/java/org/plugin/TestPlugin.java33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-exec-err/project/pom.xml26
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/plugin/pom.xml54
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/plugin/src/main/java/org/plugin/TestPlugin.java42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/project/pom.xml25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-ioex/child/pom.xml10
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-ioex/pom.xml0
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-xex/child/pom.xml10
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-xex/pom.xml7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-err/pom.xml39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/ext/pom.xml38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/ext/src/main/java/org/ext/App.java13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/ext/src/main/resources/META-INF/plexus/components.xml16
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/project/pom.xml46
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-collision/mod1/pom.xml7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-collision/mod2/pom.xml7
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-collision/pom.xml12
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-cycle/dep/pom.xml12
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-cycle/pom.xml19
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-dep-missing/pom.xml22
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-dep-missing/src/main/java/org/apache/maven/test/error/mojoFailure/App.java13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-dep-missing/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/pom.xml17
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/src/main/java/org/apache/maven/test/error/mojoFailure/App.java14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-parse-xex/pom.xml25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-validation/pom.xml13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/repo-creation-err/pom.xml41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/eventing-projects/read-with-deps/pom.xml15
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/eventing-projects/read-with-deps/repo/tests/dep/1/dep-1.pom6
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/eventing-projects/simple-read-project/pom.xml6
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/extensions/META-INF/plexus/components.xml28
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/java/org/apache/maven/cli/CLIManagerTest.java108
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/java/org/apache/maven/cli/CLIReportingUtilsTest.java40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java110
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/plugin-version-references/jar-pom.xml32
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/plugin-version-references/maven-plugin-pom.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/bad-module-non-recursive/badmodule/pom.xml14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/bad-module-non-recursive/goodmodule/pom.xml14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/bad-module-non-recursive/pom.xml14
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/config-illegal/.mvn/maven.config1
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/config/.mvn/maven.config2
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/invalid-goal/pom.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/pom.xml13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/src/main/java/org/codehaus/m2eclipse/App.java13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/src/test/java/org/codehaus/m2eclipse/AppTest.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/repository/org/codehaus/m2eclipse/parent/1.0-SNAPSHOT/maven-metadata-company.xml11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/repository/org/codehaus/m2eclipse/parent/1.0-SNAPSHOT/parent-1.0-SNAPSHOT.pom18
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/repository/org/codehaus/m2eclipse/parent/maven-metadata-local.xml11
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/settings.xml23
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/optional-dep/pom.xml20
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/readProject-missingModuleIgnored/pom.xml13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/readProject-withScmInheritance/modules/child1/pom.xml13
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/readProject-withScmInheritance/pom.xml19
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/META-INF/maven/org.apache.maven/maven-core/pom.properties18
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom-with-distribution-status.xml30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom-without-dependencies.xml30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom.xml34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom2.xml48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/settings/invalid-settings.xml24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/settings/valid-settings.xml27
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/pom.xml86
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelBuildingListener.java37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java1309
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java243
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingEvent.java64
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java408
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingResult.java180
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblem.java175
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java200
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java84
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/FileModelSource.java83
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java285
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuilder.java67
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingEvent.java53
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingEventCatapult.java48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingException.java180
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingListener.java40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java338
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingResult.java99
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelCache.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelCacheTag.java132
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelData.java222
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblem.java117
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollector.java41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorExt.java37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorRequest.java101
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java171
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProcessor.java32
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelSource.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelSource2.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/Result.java255
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/StringModelSource.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/UrlModelSource.java46
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/composition/DefaultDependencyManagementImporter.java83
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/composition/DependencyManagementImporter.java48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java255
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/InheritanceAssembler.java48
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java271
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/BuildTimestampValueSource.java47
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/MavenBuildTimestamp.java70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ModelInterpolator.java54
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/PathTranslatingPostProcessor.java67
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ProblemDetectingValueSource.java87
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java504
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/UrlNormalizingPostProcessor.java69
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java134
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelWriter.java118
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/ModelParseException.java93
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/ModelReader.java89
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/ModelWriter.java74
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/locator/DefaultModelLocator.java42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/locator/ModelLocator.java44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultDependencyManagementInjector.java110
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultPluginManagementInjector.java137
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/DependencyManagementInjector.java44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/PluginManagementInjector.java44
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java729
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/normalization/DefaultModelNormalizer.java135
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/normalization/ModelNormalizer.java54
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelPathTranslator.java111
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelUrlNormalizer.java84
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultPathTranslator.java66
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultUrlNormalizer.java65
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/ModelPathTranslator.java45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/ModelUrlNormalizer.java42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/PathTranslator.java43
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/UrlNormalizer.java39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultPluginConfigurationExpander.java83
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportConfigurationExpander.java65
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java240
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/LifecycleBindingsInjector.java46
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/PluginConfigurationExpander.java43
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/ReportConfigurationExpander.java43
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/ReportingConverter.java43
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileActivationContext.java259
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileInjector.java249
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java143
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileActivationContext.java79
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileInjector.java46
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileSelector.java49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java192
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivator.java224
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/OperatingSystemProfileActivator.java168
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/ProfileActivator.java59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/PropertyProfileActivator.java126
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/InvalidRepositoryException.java73
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java93
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/UnresolvableModelException.java126
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/WorkspaceModelResolver.java33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/superpom/DefaultSuperPomProvider.java87
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/superpom/SuperPomProvider.java42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java1076
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/validation/ModelValidator.java54
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/mdo/profiles.mdo399
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/resources/org/apache/maven/model/pom-4.0.0.xml150
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/site/apt/index.apt187
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/site/apt/super-pom.apt.vm30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/site/site.xml40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/building/ComplexActivationTest.java60
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/building/DefaultModelBuilderFactoryTest.java59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/building/SimpleProblemCollector.java89
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java108
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java494
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/MavenBuildTimestampTest.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java505
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/path/DefaultUrlNormalizerTest.java85
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/AbstractProfileActivatorTest.java92
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivatorTest.java185
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/PropertyProfileActivatorTest.java185
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java630
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/factory/complex.xml49
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/factory/simple.xml81
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/inheritance/plugin-configuration-child.xml61
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/inheritance/plugin-configuration-expected.xml87
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/inheritance/plugin-configuration-parent.xml89
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-dependency-exclusion-id.xml40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-dependency-scope.xml69
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-dependency-version.xml43
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-import-scope-classifier.xml38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-import-scope-type.xml37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-modelVersion.xml25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-plugin-dependency-scope.xml70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-plugin-dependency-version.xml46
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-plugin-version.xml55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-repository-id.xml50
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-snapshot-version.xml25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-version.xml25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/basedir-system-path.xml42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/distribution-management-status.xml29
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-module.xml31
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-plugin-execution.xml103
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-plugin.xml81
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-profile-id.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/empty-module.xml30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/empty-plugin-version.xml34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/hard-coded-system-path.xml42
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/incomplete-parent.xml30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/invalid-aggregator-packaging-pom.xml30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/invalid-ids-pom.xml26
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-1-pom.xml21
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-artifactId-pom.xml25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-artifactId-pom.xml32
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-exclusion-id.xml39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-groupId-pom.xml32
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-mgmt-artifactId-pom.xml34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-mgmt-groupId-pom.xml34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-mgmt-version-pom.xml34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-version-pom.xml32
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-groupId-pom.xml25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-modelVersion-pom.xml25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-artifactId-pom.xml33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-dependency-artifactId.xml41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-dependency-groupId.xml41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-dependency-version.xml41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-version-pom.xml33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-report-artifactId-pom.xml33
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-report-version-pom.xml57
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-repository-id-pom.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-resource-directory-pom.xml38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-type-pom.xml26
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-version-pom.xml25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/reserved-repository-id.xml50
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/pom.xml132
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/io/xpp3/package-info.java30
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java2924
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/merge/package-info.java24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/package-info.java25
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/main/mdo/maven.mdo3649
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/site/apt/index.apt39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/site/site.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/site/xdoc/navigation.xml35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationFileTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationOSTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationPropertyTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/BuildTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/CiManagementTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ContributorTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DependencyManagementTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DependencyTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DeploymentRepositoryTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DeveloperTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DistributionManagementTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ExclusionTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ExtensionTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/IssueManagementTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/LicenseTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/MailingListTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ModelTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/NotifierTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/OrganizationTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ParentTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginConfigurationTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginContainerTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginExecutionTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginManagementTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PrerequisitesTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ProfileTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/RelocationTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ReportPluginTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ReportSetTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ReportingTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/RepositoryPolicyTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/RepositoryTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ResourceTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ScmTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/SiteTest.java56
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/pom.xml91
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/monitor/logging/DefaultLog.java131
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/AbstractMojo.java198
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/AbstractMojoExecutionException.java53
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/ContextEnabled.java45
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/Mojo.java72
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoExecutionException.java80
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoFailureException.java69
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoNotFoundException.java85
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/DuplicateMojoDescriptorException.java34
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/DuplicateParameterException.java31
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/InvalidParameterException.java37
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/InvalidPluginDescriptorException.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java719
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/Parameter.java207
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java445
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java358
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/Requirement.java72
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/Log.java158
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/SystemStreamLog.java196
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/mdo/lifecycle.mdo129
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/mdo/plugin.mdo525
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/site/apt/index.apt39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/site/site.xml40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilderTest.java133
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/java/org/apache/maven/plugin/lifecycle/LifecycleXpp3ReaderTest.java55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/resources/lifecycle.xml39
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/resources/plugin.xml89
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/pom.xml63
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/src/main/mdo/metadata.mdo371
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/src/site/apt/index.apt52
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/src/site/site.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/pom.xml85
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilder.java277
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilderFactory.java71
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuildingRequest.java160
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuildingResult.java58
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsProblem.java166
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsProblemCollector.java70
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/FileSettingsSource.java59
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuilder.java40
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuildingException.java90
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuildingRequest.java131
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuildingResult.java50
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsProblem.java100
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsProblemCollector.java41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsSource.java35
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/StringSettingsSource.java69
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/UrlSettingsSource.java60
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/DefaultSettingsDecrypter.java110
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/DefaultSettingsDecryptionRequest.java120
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/DefaultSettingsDecryptionResult.java81
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/SettingsDecrypter.java38
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/SettingsDecryptionRequest.java65
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/SettingsDecryptionResult.java71
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsReader.java113
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsWriter.java118
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/SettingsParseException.java93
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/SettingsReader.java82
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/SettingsWriter.java74
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/merge/MavenSettingsMerger.java142
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java285
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/SettingsValidator.java41
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/site/site.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/test/java/org/apache/maven/settings/building/DefaultSettingsBuilderFactoryTest.java53
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/test/java/org/apache/maven/settings/validation/DefaultSettingsValidatorTest.java244
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/test/resources/settings/factory/simple.xml24
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings/pom.xml63
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings/src/main/java/org/apache/maven/settings/RuntimeInfo.java55
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings/src/main/mdo/settings.mdo1077
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings/src/site/apt/index.apt36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-settings/src/site/site.xml36
-rw-r--r--framework/src/maven/apache-maven-3.3.3/pom.xml654
-rw-r--r--framework/src/maven/apache-maven-3.3.3/src/site/resources/images/maven-deps.pngbin0 -> 73105 bytes
-rw-r--r--framework/src/maven/apache-maven-3.3.3/src/site/site.xml75
-rw-r--r--framework/src/maven/apache-maven-3.3.3/src/site/xdoc/index.xml76
-rw-r--r--framework/src/maven/apache-maven-3.3.3/src/site/xdoc/maven-deps.odgbin0 -> 32324 bytes
1929 files changed, 179015 insertions, 0 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/DEPENDENCIES b/framework/src/maven/apache-maven-3.3.3/DEPENDENCIES
new file mode 100644
index 00000000..434a38eb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/DEPENDENCIES
@@ -0,0 +1,111 @@
+// ------------------------------------------------------------------
+// Transitive dependencies of this project determined from the
+// maven pom organized by organization.
+// ------------------------------------------------------------------
+
+Apache Maven Distribution
+
+
+From: 'an unknown organization'
+ - AOP alliance (http://aopalliance.sourceforge.net) aopalliance:aopalliance:jar:1.0
+ License: Public Domain
+ - Guava: Google Core Libraries for Java (http://code.google.com/p/guava-libraries/guava) com.google.guava:guava:bundle:18.0
+ License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - JSR-250 Common Annotations for the JavaTM Platform (http://jcp.org/aboutJava/communityprocess/final/jsr250/index.html) javax.annotation:jsr250-api:jar:1.0
+ License: COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 (https://glassfish.dev.java.net/public/CDDLv1.0.html)
+ - javax.inject (http://code.google.com/p/atinject/) javax.inject:javax.inject:jar:1
+ License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Plexus Cipher: encryption/decryption Component (http://spice.sonatype.org/plexus-cipher) org.sonatype.plexus:plexus-cipher:jar:1.7
+ License: Apache Public License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
+ - Plexus Security Dispatcher Component (http://spice.sonatype.org/plexus-sec-dispatcher) org.sonatype.plexus:plexus-sec-dispatcher:jar:1.3
+ License: Apache Public License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
+
+From: 'Codehaus' (http://www.codehaus.org/)
+ - Plexus Classworlds (http://plexus.codehaus.org/plexus-classworlds/) org.codehaus.plexus:plexus-classworlds:bundle:2.5.2
+ License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Plexus :: Component Annotations (http://plexus.codehaus.org/plexus-containers/plexus-component-annotations/) org.codehaus.plexus:plexus-component-annotations:jar:1.5.5
+ License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Plexus Interpolation API (http://plexus.codehaus.org/plexus-components/plexus-interpolation) org.codehaus.plexus:plexus-interpolation:jar:1.21
+ License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Plexus Common Utilities (http://plexus.codehaus.org/plexus-utils) org.codehaus.plexus:plexus-utils:jar:3.0.20
+ License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+From: 'Google, Inc.' (http://www.google.com)
+ - Sisu Guice - Core Library (https://github.com/google/guice/sisu-guice) org.sonatype.sisu:sisu-guice:jar:3.2.5
+ License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+From: 'Jonathan Hedley' (http://jonathanhedley.com/)
+ - jsoup (http://jsoup.org/) org.jsoup:jsoup:jar:1.7.2
+ License: The MIT License (http://jsoup.com/license)
+
+From: 'QOS.ch' (http://www.qos.ch)
+ - SLF4J API Module (http://www.slf4j.org) org.slf4j:slf4j-api:jar:1.7.5
+ License: MIT License (http://www.opensource.org/licenses/mit-license.php)
+ - SLF4J Simple Binding (http://www.slf4j.org) org.slf4j:slf4j-simple:jar:1.7.5
+ License: MIT License (http://www.opensource.org/licenses/mit-license.php)
+
+From: 'Seam Framework' (http://seamframework.org)
+ - CDI APIs (http://www.seamframework.org/Weld/cdi-api) javax.enterprise:cdi-api:jar:1.0
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
+
+From: 'The Apache Software Foundation' (http://www.apache.org/)
+ - Commons CLI (http://commons.apache.org/cli/) commons-cli:commons-cli:jar:1.2
+ License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Commons IO (http://commons.apache.org/io/) commons-io:commons-io:jar:2.2
+ License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Commons Lang (http://commons.apache.org/lang/) commons-lang:commons-lang:jar:2.6
+ License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Maven Aether Provider (http://maven.apache.org/ref/3.3.3/maven-aether-provider) org.apache.maven:maven-aether-provider:jar:3.3.3
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Maven Artifact (http://maven.apache.org/ref/3.3.3/maven-artifact) org.apache.maven:maven-artifact:jar:3.3.3
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Maven Builder Support (http://maven.apache.org/ref/3.3.3/maven-builder-support) org.apache.maven:maven-builder-support:jar:3.3.3
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Maven Compat (http://maven.apache.org/ref/3.3.3/maven-compat) org.apache.maven:maven-compat:jar:3.3.3
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Maven Core (http://maven.apache.org/ref/3.3.3/maven-core) org.apache.maven:maven-core:jar:3.3.3
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Maven Embedder (http://maven.apache.org/ref/3.3.3/maven-embedder) org.apache.maven:maven-embedder:jar:3.3.3
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Maven Model (http://maven.apache.org/ref/3.3.3/maven-model) org.apache.maven:maven-model:jar:3.3.3
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Maven Model Builder (http://maven.apache.org/ref/3.3.3/maven-model-builder) org.apache.maven:maven-model-builder:jar:3.3.3
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Maven Plugin API (http://maven.apache.org/ref/3.3.3/maven-plugin-api) org.apache.maven:maven-plugin-api:jar:3.3.3
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Maven Repository Metadata Model (http://maven.apache.org/ref/3.3.3/maven-repository-metadata) org.apache.maven:maven-repository-metadata:jar:3.3.3
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Maven Settings (http://maven.apache.org/ref/3.3.3/maven-settings) org.apache.maven:maven-settings:jar:3.3.3
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Maven Settings Builder (http://maven.apache.org/ref/3.3.3/maven-settings-builder) org.apache.maven:maven-settings-builder:jar:3.3.3
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Apache Maven Wagon :: Providers :: File Provider (http://maven.apache.org/wagon/wagon-providers/wagon-file) org.apache.maven.wagon:wagon-file:jar:2.9
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Apache Maven Wagon :: Providers :: HTTP Provider (http://maven.apache.org/wagon/wagon-providers/wagon-http) org.apache.maven.wagon:wagon-http:jar:2.9
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Apache Maven Wagon :: Providers :: HTTP Shared Library (http://maven.apache.org/wagon/wagon-providers/wagon-http-shared) org.apache.maven.wagon:wagon-http-shared:jar:2.9
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+ - Apache Maven Wagon :: API (http://maven.apache.org/wagon/wagon-provider-api) org.apache.maven.wagon:wagon-provider-api:jar:2.9
+ License: Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+From: 'The Eclipse Foundation' (http://www.eclipse.org/)
+ - Aether API (http://www.eclipse.org/aether/aether-api/) org.eclipse.aether:aether-api:jar:1.0.2.v20150114
+ License: Eclipse Public License, Version 1.0 (http://www.eclipse.org/legal/epl-v10.html)
+ - Aether Connector Basic (http://www.eclipse.org/aether/aether-connector-basic/) org.eclipse.aether:aether-connector-basic:jar:1.0.2.v20150114
+ License: Eclipse Public License, Version 1.0 (http://www.eclipse.org/legal/epl-v10.html)
+ - Aether Implementation (http://www.eclipse.org/aether/aether-impl/) org.eclipse.aether:aether-impl:jar:1.0.2.v20150114
+ License: Eclipse Public License, Version 1.0 (http://www.eclipse.org/legal/epl-v10.html)
+ - Aether SPI (http://www.eclipse.org/aether/aether-spi/) org.eclipse.aether:aether-spi:jar:1.0.2.v20150114
+ License: Eclipse Public License, Version 1.0 (http://www.eclipse.org/legal/epl-v10.html)
+ - Aether Transport Wagon (http://www.eclipse.org/aether/aether-transport-wagon/) org.eclipse.aether:aether-transport-wagon:jar:1.0.2.v20150114
+ License: Eclipse Public License, Version 1.0 (http://www.eclipse.org/legal/epl-v10.html)
+ - Aether Utilities (http://www.eclipse.org/aether/aether-util/) org.eclipse.aether:aether-util:jar:1.0.2.v20150114
+ License: Eclipse Public License, Version 1.0 (http://www.eclipse.org/legal/epl-v10.html)
+ - org.eclipse.sisu.inject (http://www.eclipse.org/sisu/org.eclipse.sisu.inject/) org.eclipse.sisu:org.eclipse.sisu.inject:eclipse-plugin:0.3.0
+ License: Eclipse Public License, Version 1.0 (http://www.eclipse.org/legal/epl-v10.html)
+ - org.eclipse.sisu.plexus (http://www.eclipse.org/sisu/org.eclipse.sisu.plexus/) org.eclipse.sisu:org.eclipse.sisu.plexus:eclipse-plugin:0.3.0
+ License: Eclipse Public License, Version 1.0 (http://www.eclipse.org/legal/epl-v10.html)
+
+
+
+
diff --git a/framework/src/maven/apache-maven-3.3.3/LICENSE b/framework/src/maven/apache-maven-3.3.3/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/framework/src/maven/apache-maven-3.3.3/NOTICE b/framework/src/maven/apache-maven-3.3.3/NOTICE
new file mode 100644
index 00000000..9485054b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/NOTICE
@@ -0,0 +1,5 @@
+Apache Maven
+Copyright 2001-2015 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/framework/src/maven/apache-maven-3.3.3/README.md b/framework/src/maven/apache-maven-3.3.3/README.md
new file mode 100644
index 00000000..b030c448
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/README.md
@@ -0,0 +1,23 @@
+# Maven
+
+Maven is available under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+- [Maven Issue Tracker](http://jira.codehaus.org/browse/MNG)
+- [Maven Wiki](https://cwiki.apache.org/confluence/display/MAVEN/Index)
+- [Building Maven](http://maven.apache.org/guides/development/guide-building-m2.html)
+- [Running Core ITs](http://maven.apache.org/core-its/core-it-suite/)
+
+## Bootstrapping Basics
+
+If you want to bootstrap Maven, you'll need:
+
+- Java 1.7+
+- Ant 1.8 or later
+
+Run Ant, specifying a location into which the completed Maven distro should be installed:
+
+```
+ant -Dmaven.home="$HOME/apps/maven/apache-maven-3.3.x-SNAPSHOT"
+```
+
+Once the build completes, you should have a new Maven distro ready to roll in that directory!
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/README.txt b/framework/src/maven/apache-maven-3.3.3/apache-maven/README.txt
new file mode 100644
index 00000000..b05080d6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/README.txt
@@ -0,0 +1,79 @@
+
+ Apache Maven
+
+ What is it?
+ -----------
+
+ Maven is a software project management and comprehension tool. Based on
+ the concept of a Project Object Model (POM), Maven can manage a project's
+ build, reporting and documentation from a central piece of information.
+
+ Documentation
+ -------------
+
+ The most up-to-date documentation can be found at http://maven.apache.org/.
+
+ Release Notes
+ -------------
+
+ The full list of changes can be found at http://maven.apache.org/release-notes.html.
+
+ System Requirements
+ -------------------
+
+ JDK:
+ 1.7 or above (this is to execute Maven - it still allows you to build against 1.3
+ and prior JDK's).
+ Memory:
+ No minimum requirement.
+ Disk:
+ Approximately 10MB is required for the Maven installation itself. In addition to
+ that, additional disk space will be used for your local Maven repository. The size
+ of your local repository will vary depending on usage but expect at least 500MB.
+ Operating System:
+ Windows:
+ Windows 2000 or above.
+ Unix based systems (Linux, Solaris and Mac OS X) and others:
+ No minimum requirement.
+
+ Installing Maven
+ ----------------
+
+ 1) Unpack the archive where you would like to store the binaries, eg:
+
+ Unix-based operating systems (Linux, Solaris and Mac OS X)
+ tar zxvf apache-maven-3.x.y.tar.gz
+ Windows
+ unzip apache-maven-3.x.y.zip
+
+ 2) A directory called "apache-maven-3.x.y" will be created.
+
+ 3) Add the bin directory to your PATH, eg:
+
+ Unix-based operating systems (Linux, Solaris and Mac OS X)
+ export PATH=/usr/local/apache-maven-3.x.y/bin:$PATH
+ Windows
+ set PATH="c:\program files\apache-maven-3.x.y\bin";%PATH%
+
+ 4) Make sure JAVA_HOME is set to the location of your JDK
+
+ 5) Run "mvn --version" to verify that it is correctly installed.
+
+ For complete documentation, see http://maven.apache.org/download.html#Installation
+
+ Licensing
+ ---------
+
+ Please see the file called LICENSE.
+
+ Maven URLS
+ ----------
+
+ Home Page: http://maven.apache.org/
+ Downloads: http://maven.apache.org/download.html
+ Release Notes: http://maven.apache.org/release-notes.html
+ Mailing Lists: http://maven.apache.org/mail-lists.html
+ Source Code: https://git-wip-us.apache.org/repos/asf/maven.git/apache-maven
+ Issue Tracking: http://jira.codehaus.org/browse/MNG
+ Wiki: https://cwiki.apache.org/confluence/display/MAVEN/
+ Available Plugins: http://maven.apache.org/plugins/index.html
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/pom.xml b/framework/src/maven/apache-maven-3.3.3/apache-maven/pom.xml
new file mode 100644
index 00000000..89a41833
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/pom.xml
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version
+ 2.0 (the "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
+ OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.3.3</version>
+ </parent>
+
+ <artifactId>apache-maven</artifactId>
+ <packaging>pom</packaging>
+
+ <name>Apache Maven Distribution</name>
+ <description>The Apache Maven distribution, source and binary, in zip and tar.gz formats.</description>
+
+ <properties>
+ <distributionFileName>${distributionId}-${project.version}</distributionFileName>
+ </properties>
+
+ <scm><!-- remove when git scm url format can accept artifact-id at the end, as automatically inherited -->
+ <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
+ <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
+ <tag>maven-3.3.3</tag>
+ </scm>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-embedder</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-compat</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>org.eclipse.sisu.plexus</artifactId>
+ </dependency>
+ <!-- CLI -->
+ <dependency>
+ <groupId>commons-cli</groupId>
+ <artifactId>commons-cli</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http</artifactId>
+ <classifier>shaded</classifier>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http-shared4</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpcore</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-connector-basic</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-transport-wagon</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${distributionFileName}</finalName>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-remote-resources-plugin</artifactId>
+ <version>1.5</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludes combine.children="append">
+ <exclude>src/bin/m2.conf</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>test-compile</id>
+ <goals>
+ <goal>testCompile</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <systemProperties>
+ <property>
+ <name>basedir</name>
+ <value>${basedir}</value>
+ </property>
+ </systemProperties>
+ </configuration>
+ <executions>
+ <execution>
+ <id>test</id>
+ <goals>
+ <goal>test</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>create-distro</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>src/main/assembly/bin.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>apache.snapshots</id>
+ <url>http://repository.apache.org/snapshots/</url>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <profiles>
+ <profile>
+ <id>apache-release</id>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>make-src-assembly</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>src/main/assembly/src.xml</descriptor>
+ </descriptors>
+ <tarLongFileMode>gnu</tarLongFileMode>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/m2.conf b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/m2.conf
new file mode 100644
index 00000000..2991e0b3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/m2.conf
@@ -0,0 +1,8 @@
+main is org.apache.maven.cli.MavenCli from plexus.core
+
+set maven.home default ${user.home}/m2
+
+[plexus.core]
+optionally ${maven.home}/lib/ext/*.jar
+load ${maven.home}/lib/*.jar
+load ${maven.home}/conf/logging
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvn b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvn
new file mode 100755
index 00000000..902de4af
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvn
@@ -0,0 +1,232 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven2 Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+# JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+# M2_HOME - location of maven2's installed home dir
+# MAVEN_OPTS - parameters passed to the Java VM when running Maven
+# e.g. to debug Maven itself, use
+# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+ if [ -f /etc/mavenrc ] ; then
+ . /etc/mavenrc
+ fi
+
+ if [ -f "$HOME/.mavenrc" ] ; then
+ . "$HOME/.mavenrc"
+ fi
+
+fi
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+ CYGWIN*) cygwin=true ;;
+ MINGW*) mingw=true;;
+ Darwin*) darwin=true
+ #
+ # Look for the Apple JDKs first to preserve the existing behaviour, and then look
+ # for the new JDKs provided by Oracle.
+ #
+ if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
+ #
+ # Apple JDKs
+ #
+ export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
+ fi
+
+ if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
+ #
+ # Apple JDKs
+ #
+ export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
+ fi
+
+ if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
+ #
+ # Oracle JDKs
+ #
+ export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
+ fi
+
+ if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
+ #
+ # Apple JDKs
+ #
+ export JAVA_HOME=`/usr/libexec/java_home`
+ fi
+ ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+ if [ -r /etc/gentoo-release ] ; then
+ JAVA_HOME=`java-config --jre-home`
+ fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ M2_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ M2_HOME=`cd "$M2_HOME" && pwd`
+
+ cd "$saveddir"
+ # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --unix "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Migwn, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME="`(cd "$M2_HOME"; pwd)`"
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+ # TODO classpath?
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+ javaExecutable="`which javac`"
+ if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+ # readlink(1) is not available as standard on Solaris 10.
+ readLink=`which readlink`
+ if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+ if $darwin ; then
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+ else
+ javaExecutable="`readlink -f \"$javaExecutable\"`"
+ fi
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+ JAVA_HOME="$javaHome"
+ export JAVA_HOME
+ fi
+ fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+ if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ else
+ JAVACMD="`which java`"
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly." >&2
+ echo " We cannot execute $JAVACMD" >&2
+ exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+ echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --path --windows "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+fi
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+ local basedir=$(pwd)
+ local wdir=$(pwd)
+ while [ "$wdir" != '/' ] ; do
+ wdir=$(cd "$wdir/.."; pwd)
+ if [ -d "$wdir"/.mvn ] ; then
+ basedir=$wdir
+ break
+ fi
+ done
+ echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+ if [ -f "$1" ]; then
+ echo "$(tr -s '\n' ' ' < "$1")"
+ fi
+}
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+exec "$JAVACMD" \
+ $MAVEN_OPTS \
+ -classpath "${M2_HOME}"/boot/plexus-classworlds-*.jar \
+ "-Dclassworlds.conf=${M2_HOME}/bin/m2.conf" \
+ "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+ ${CLASSWORLDS_LAUNCHER} "$@"
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvn.cmd b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvn.cmd
new file mode 100644
index 00000000..4fad0939
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvn.cmd
@@ -0,0 +1,176 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven2 Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto chkMHome
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:chkMHome
+if not "%M2_HOME%"=="" goto valMHome
+
+SET "M2_HOME=%~dp0.."
+if not "%M2_HOME%"=="" goto valMHome
+
+echo.
+echo Error: M2_HOME not found in your environment. >&2
+echo Please set the M2_HOME variable in your environment to match the >&2
+echo location of the Maven installation. >&2
+echo.
+goto error
+
+:valMHome
+
+:stripMHome
+if not "_%M2_HOME:~-1%"=="_\" goto checkMCmd
+set "M2_HOME=%M2_HOME:~0,-1%"
+goto stripMHome
+
+:checkMCmd
+if exist "%M2_HOME%\bin\mvn.cmd" goto init
+
+echo.
+echo Error: M2_HOME is set to an invalid directory. >&2
+echo M2_HOME = "%M2_HOME%" >&2
+echo Please set the M2_HOME variable in your environment to match the >&2
+echo location of the Maven installation >&2
+echo.
+goto error
+@REM ==== END VALIDATION ====
+
+:init
+
+set MAVEN_CMD_LINE_ARGS=%*
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+
+for %%i in ("%M2_HOME%"\boot\plexus-classworlds-*) do set CLASSWORLDS_JAR="%%i"
+
+set CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %CLASSWORLDS_JAR% "-Dclassworlds.conf=%M2_HOME%\bin\m2.conf" "-Dmaven.home=%M2_HOME%" "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvnDebug b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvnDebug
new file mode 100755
index 00000000..73905fdf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvnDebug
@@ -0,0 +1,41 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven2 Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+# JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+# M2_HOME - location of maven2's installed home dir
+# MAVEN_OPTS - parameters passed to the Java VM when running Maven
+# e.g. to debug Maven itself, use
+# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+MAVEN_DEBUG_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000"
+
+echo Preparing to Execute Maven in Debug Mode
+
+env MAVEN_OPTS="$MAVEN_OPTS $MAVEN_DEBUG_OPTS" $(dirname $0)/mvn "$@"
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvnDebug.cmd b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvnDebug.cmd
new file mode 100644
index 00000000..1f0d3bfb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvnDebug.cmd
@@ -0,0 +1,31 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven2 Start Up Batch script to run mvn.cmd with the following additional
+@REM Java VM settings:
+@REM
+@REM -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM
+@REM ----------------------------------------------------------------------------
+
+@setlocal
+@set MAVEN_DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+
+@call "%~dp0"mvn.cmd %*
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvnyjp b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvnyjp
new file mode 100755
index 00000000..ef4f8e1d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvnyjp
@@ -0,0 +1,42 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven2 Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+# JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+# M2_HOME - location of maven2's installed home dir
+# MAVEN_OPTS - parameters passed to the Java VM when running Maven
+# e.g. to debug Maven itself, use
+# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ ! -f "$YJPLIB" ]; then
+ echo "Error: Unable to autodetect the YJP library location. Please set YJPLIB variable" >&2
+ exit 1
+fi
+
+env MAVEN_OPTS="-agentpath:$YJPLIB=onexit=snapshot,onexit=memory,tracing,onlylocal $MAVEN_OPTS" $(dirname $0)/mvn "$@"
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/src/conf/logging/simplelogger.properties b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/conf/logging/simplelogger.properties
new file mode 100644
index 00000000..859ff725
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/conf/logging/simplelogger.properties
@@ -0,0 +1,25 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+org.slf4j.simpleLogger.defaultLogLevel=info
+org.slf4j.simpleLogger.showDateTime=false
+org.slf4j.simpleLogger.showThreadName=false
+org.slf4j.simpleLogger.showLogName=false
+org.slf4j.simpleLogger.logFile=System.out
+org.slf4j.simpleLogger.levelInBrackets=true
+org.slf4j.simpleLogger.log.Sisu=info
+org.slf4j.simpleLogger.warnLevelString=WARNING \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/src/conf/settings.xml b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/conf/settings.xml
new file mode 100644
index 00000000..19d7a977
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/conf/settings.xml
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!--
+ | This is the configuration file for Maven. It can be specified at two levels:
+ |
+ | 1. User Level. This settings.xml file provides configuration for a single user,
+ | and is normally provided in ${user.home}/.m2/settings.xml.
+ |
+ | NOTE: This location can be overridden with the CLI option:
+ |
+ | -s /path/to/user/settings.xml
+ |
+ | 2. Global Level. This settings.xml file provides configuration for all Maven
+ | users on a machine (assuming they're all using the same Maven
+ | installation). It's normally provided in
+ | ${maven.home}/conf/settings.xml.
+ |
+ | NOTE: This location can be overridden with the CLI option:
+ |
+ | -gs /path/to/global/settings.xml
+ |
+ | The sections in this sample file are intended to give you a running start at
+ | getting the most out of your Maven installation. Where appropriate, the default
+ | values (values used when the setting is not specified) are provided.
+ |
+ |-->
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
+ <!-- localRepository
+ | The path to the local repository maven will use to store artifacts.
+ |
+ | Default: ${user.home}/.m2/repository
+ <localRepository>/path/to/local/repo</localRepository>
+ -->
+
+ <!-- interactiveMode
+ | This will determine whether maven prompts you when it needs input. If set to false,
+ | maven will use a sensible default value, perhaps based on some other setting, for
+ | the parameter in question.
+ |
+ | Default: true
+ <interactiveMode>true</interactiveMode>
+ -->
+
+ <!-- offline
+ | Determines whether maven should attempt to connect to the network when executing a build.
+ | This will have an effect on artifact downloads, artifact deployment, and others.
+ |
+ | Default: false
+ <offline>false</offline>
+ -->
+
+ <!-- pluginGroups
+ | This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.
+ | when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers
+ | "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.
+ |-->
+ <pluginGroups>
+ <!-- pluginGroup
+ | Specifies a further group identifier to use for plugin lookup.
+ <pluginGroup>com.your.plugins</pluginGroup>
+ -->
+ </pluginGroups>
+
+ <!-- proxies
+ | This is a list of proxies which can be used on this machine to connect to the network.
+ | Unless otherwise specified (by system property or command-line switch), the first proxy
+ | specification in this list marked as active will be used.
+ |-->
+ <proxies>
+ <!-- proxy
+ | Specification for one proxy, to be used in connecting to the network.
+ |
+ <proxy>
+ <id>optional</id>
+ <active>true</active>
+ <protocol>http</protocol>
+ <username>proxyuser</username>
+ <password>proxypass</password>
+ <host>proxy.host.net</host>
+ <port>80</port>
+ <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
+ </proxy>
+ -->
+ </proxies>
+
+ <!-- servers
+ | This is a list of authentication profiles, keyed by the server-id used within the system.
+ | Authentication profiles can be used whenever maven must make a connection to a remote server.
+ |-->
+ <servers>
+ <!-- server
+ | Specifies the authentication information to use when connecting to a particular server, identified by
+ | a unique name within the system (referred to by the 'id' attribute below).
+ |
+ | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
+ | used together.
+ |
+ <server>
+ <id>deploymentRepo</id>
+ <username>repouser</username>
+ <password>repopwd</password>
+ </server>
+ -->
+
+ <!-- Another sample, using keys to authenticate.
+ <server>
+ <id>siteServer</id>
+ <privateKey>/path/to/private/key</privateKey>
+ <passphrase>optional; leave empty if not used.</passphrase>
+ </server>
+ -->
+ </servers>
+
+ <!-- mirrors
+ | This is a list of mirrors to be used in downloading artifacts from remote repositories.
+ |
+ | It works like this: a POM may declare a repository to use in resolving certain artifacts.
+ | However, this repository may have problems with heavy traffic at times, so people have mirrored
+ | it to several places.
+ |
+ | That repository definition will have a unique id, so we can create a mirror reference for that
+ | repository, to be used as an alternate download site. The mirror site will be the preferred
+ | server for that repository.
+ |-->
+ <mirrors>
+ <!-- mirror
+ | Specifies a repository mirror site to use instead of a given repository. The repository that
+ | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
+ | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
+ |
+ <mirror>
+ <id>mirrorId</id>
+ <mirrorOf>repositoryId</mirrorOf>
+ <name>Human Readable Name for this Mirror.</name>
+ <url>http://my.repository.com/repo/path</url>
+ </mirror>
+ -->
+ </mirrors>
+
+ <!-- profiles
+ | This is a list of profiles which can be activated in a variety of ways, and which can modify
+ | the build process. Profiles provided in the settings.xml are intended to provide local machine-
+ | specific paths and repository locations which allow the build to work in the local environment.
+ |
+ | For example, if you have an integration testing plugin - like cactus - that needs to know where
+ | your Tomcat instance is installed, you can provide a variable here such that the variable is
+ | dereferenced during the build process to configure the cactus plugin.
+ |
+ | As noted above, profiles can be activated in a variety of ways. One way - the activeProfiles
+ | section of this document (settings.xml) - will be discussed later. Another way essentially
+ | relies on the detection of a system property, either matching a particular value for the property,
+ | or merely testing its existence. Profiles can also be activated by JDK version prefix, where a
+ | value of '1.4' might activate a profile when the build is executed on a JDK version of '1.4.2_07'.
+ | Finally, the list of active profiles can be specified directly from the command line.
+ |
+ | NOTE: For profiles defined in the settings.xml, you are restricted to specifying only artifact
+ | repositories, plugin repositories, and free-form properties to be used as configuration
+ | variables for plugins in the POM.
+ |
+ |-->
+ <profiles>
+ <!-- profile
+ | Specifies a set of introductions to the build process, to be activated using one or more of the
+ | mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
+ | or the command line, profiles have to have an ID that is unique.
+ |
+ | An encouraged best practice for profile identification is to use a consistent naming convention
+ | for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.
+ | This will make it more intuitive to understand what the set of introduced profiles is attempting
+ | to accomplish, particularly when you only have a list of profile id's for debug.
+ |
+ | This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.
+ <profile>
+ <id>jdk-1.4</id>
+
+ <activation>
+ <jdk>1.4</jdk>
+ </activation>
+
+ <repositories>
+ <repository>
+ <id>jdk14</id>
+ <name>Repository for JDK 1.4 builds</name>
+ <url>http://www.myhost.com/maven/jdk14</url>
+ <layout>default</layout>
+ <snapshotPolicy>always</snapshotPolicy>
+ </repository>
+ </repositories>
+ </profile>
+ -->
+
+ <!--
+ | Here is another profile, activated by the system property 'target-env' with a value of 'dev',
+ | which provides a specific path to the Tomcat instance. To use this, your plugin configuration
+ | might hypothetically look like:
+ |
+ | ...
+ | <plugin>
+ | <groupId>org.myco.myplugins</groupId>
+ | <artifactId>myplugin</artifactId>
+ |
+ | <configuration>
+ | <tomcatLocation>${tomcatPath}</tomcatLocation>
+ | </configuration>
+ | </plugin>
+ | ...
+ |
+ | NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to
+ | anything, you could just leave off the <value/> inside the activation-property.
+ |
+ <profile>
+ <id>env-dev</id>
+
+ <activation>
+ <property>
+ <name>target-env</name>
+ <value>dev</value>
+ </property>
+ </activation>
+
+ <properties>
+ <tomcatPath>/path/to/tomcat/instance</tomcatPath>
+ </properties>
+ </profile>
+ -->
+ </profiles>
+
+ <!-- activeProfiles
+ | List of profiles that are active for all builds.
+ |
+ <activeProfiles>
+ <activeProfile>alwaysActiveProfile</activeProfile>
+ <activeProfile>anotherAlwaysActiveProfile</activeProfile>
+ </activeProfiles>
+ -->
+</settings>
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/src/conf/toolchains.xml b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/conf/toolchains.xml
new file mode 100644
index 00000000..aefddd8a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/conf/toolchains.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!--
+ | This is the toolchains file for Maven. It can be specified at two levels:
+ |
+ | 1. User Level. This toolchains.xml file provides configuration for a single user,
+ | and is normally provided in ${user.home}/.m2/toolchains.xml.
+ |
+ | NOTE: This location can be overridden with the CLI option:
+ |
+ | -t /path/to/user/toolchains.xml
+ |
+ | 2. Global Level. This toolchains.xml file provides configuration for all Maven
+ | users on a machine (assuming they're all using the same Maven
+ | installation). It's normally provided in
+ | ${maven.home}/conf/toolchains.xml.
+ |
+ | NOTE: This location can be overridden with the CLI option:
+ |
+ | -gt /path/to/global/toolchains.xml
+ |
+ | The sections in this sample file are intended to give you a running start at
+ | getting the most out of your Maven installation.
+ |-->
+<toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 http://maven.apache.org/xsd/toolchains-1.1.0.xsd">
+
+ <!--
+ | With toolchains you can refer to installations on your system. This
+ | way you don't have to hardcode paths in your pom.xml.
+ |
+ | Every toolchain consist of 3 elements:
+ | * type: the type of tool. An often used value is 'jdk'. Toolchains-aware
+ | plugins should document which type you must use.
+ |
+ | * provides: A list of key/value-pairs.
+ | Based on the toolchain-configuration in the pom.xml Maven will search for
+ | matching <provides/> configuration. You can decide for yourself which key-value
+ | pairs to use. Often used keys are 'version', 'vendor' and 'arch'. By default
+ | the version has a special meaning. If you configured in the pom.xml '1.5'
+ | Maven will search for 1.5 and above.
+ |
+ | * configuration: Additional configuration for this tool.
+ | Look for documentation of the toolchains-aware plugin which configuration elements
+ | can be used.
+ |
+ | See also http://maven.apache.org/guides/mini/guide-using-toolchains.html
+ |
+ | General example
+
+ <toolchain>
+ <type/>
+ <provides>
+ <version>1.0</version>
+ </provides>
+ <configuration/>
+ </toolchain>
+
+ | JDK examples
+
+ <toolchain>
+ <type>jdk</type>
+ <provides>
+ <version>1.5</version>
+ <vendor>sun</vendor>
+ </provides>
+ <configuration>
+ <jdkHome>/path/to/jdk/1.5</jdkHome>
+ </configuration>
+ </toolchain>
+ <toolchain>
+ <type>jdk</type>
+ <provides>
+ <version>1.6</version>
+ <vendor>sun</vendor>
+ </provides>
+ <configuration>
+ <jdkHome>/path/to/jdk/1.6</jdkHome>
+ </configuration>
+ </toolchain>
+
+ -->
+
+</toolchains> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/src/lib/ext/README.txt b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/lib/ext/README.txt
new file mode 100644
index 00000000..5ebe59eb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/lib/ext/README.txt
@@ -0,0 +1,2 @@
+Use this directory to contribute 3rd-party extensions to the Maven core. These extensions can either extend or override
+Maven's default implementation.
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/src/main/appended-resources/META-INF/LICENSE.vm b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/main/appended-resources/META-INF/LICENSE.vm
new file mode 100644
index 00000000..1a462252
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/main/appended-resources/META-INF/LICENSE.vm
@@ -0,0 +1,49 @@
+##
+## Licensed to the Apache Software Foundation (ASF) under one
+## or more contributor license agreements. See the NOTICE file
+## distributed with this work for additional information
+## regarding copyright ownership. The ASF licenses this file
+## to you under the Apache License, Version 2.0 (the
+## "License"); you may not use this file except in compliance
+## with the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing,
+## software distributed under the License is distributed on an
+## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+## KIND, either express or implied. See the License for the
+## specific language governing permissions and limitations
+## under the License.
+##
+## $Date: 2008-03-09 23:17:06 -0700 (Sun, 09 Mar 2008) $ $Rev: 635446 $
+##
+
+Apache Maven includes a number of components and libraries with separate
+copyright notices and license terms. Your use of those components are
+subject to the terms and conditions of the following licenses.
+
+#set ( $apacheTxt = "The Apache Software License, Version 2.0" )
+
+#foreach ( $project in $projects )
+#foreach ( $license in $project.licenses)
+#if ( ! ($apacheTxt == $license.name) )
+#set ( $artId = $project.artifact.artifactId)
+#set ( $lf = $locator )
+#set ( $url = $license.url )
+## glass fish URL is now invalid, use a fixed one
+#if ($url == "https://glassfish.dev.java.net/public/CDDLv1.0.html")
+#set ( $url = 'https://glassfish.java.net/public/CDDLv1.0.html' )
+#end
+#if ($url)
+#set ( $licFile = 'lib/' + $artId + '.license' )
+#set ( $downloaded = $lf.getResourceAsFile($url, "licenses/${licFile}") )
+#end
+
+$project.name #if ($project.url)($project.url)#end $project.artifact
+ License: $license.name #if ($url) $url ($licFile)#end
+
+#end
+#end
+#end
+
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/src/main/assembly/bin.xml b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/main/assembly/bin.xml
new file mode 100644
index 00000000..ea14a9d8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/main/assembly/bin.xml
@@ -0,0 +1,94 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<assembly>
+ <id>bin</id>
+ <formats>
+ <format>zip</format>
+ <format>tar.gz</format>
+ </formats>
+ <dependencySets>
+ <dependencySet>
+ <useProjectArtifact>false</useProjectArtifact>
+ <outputDirectory>boot</outputDirectory>
+ <includes>
+ <include>org.codehaus.plexus:plexus-classworlds</include>
+ </includes>
+ </dependencySet>
+ <dependencySet>
+ <useProjectArtifact>false</useProjectArtifact>
+ <outputDirectory>lib</outputDirectory>
+ <excludes>
+ <exclude>org.codehaus.plexus:plexus-classworlds</exclude>
+ </excludes>
+ </dependencySet>
+ </dependencySets>
+ <fileSets>
+ <fileSet>
+ <includes>
+ <include>README*</include>
+ </includes>
+ </fileSet>
+ <fileSet>
+ <directory>target/maven-shared-archive-resources/META-INF</directory>
+ <outputDirectory>/</outputDirectory>
+ <includes>
+ <include>LICENSE</include>
+ <include>NOTICE</include>
+ </includes>
+ </fileSet>
+ <fileSet>
+ <directory>target/licenses/lib</directory>
+ <outputDirectory>lib</outputDirectory>
+ <includes>
+ <include>**</include>
+ </includes>
+ </fileSet>
+ <fileSet>
+ <directory>src/bin</directory>
+ <outputDirectory>bin</outputDirectory>
+ <includes>
+ <include>*.cmd</include>
+ <include>*.conf</include>
+ </includes>
+ <lineEnding>dos</lineEnding>
+ </fileSet>
+ <fileSet>
+ <directory>src/bin</directory>
+ <outputDirectory>bin</outputDirectory>
+ <includes>
+ <include>m2</include>
+ <include>mvn</include>
+ <include>mvnDebug</include>
+ <!-- This is so that CI systems can periodically run the profiler -->
+ <include>mvnyjp</include>
+ </includes>
+ <lineEnding>unix</lineEnding>
+ <fileMode>0755</fileMode>
+ </fileSet>
+ <fileSet>
+ <directory>src/conf</directory>
+ <outputDirectory>conf</outputDirectory>
+ </fileSet>
+ <fileSet>
+ <directory>src/lib</directory>
+ <outputDirectory>lib</outputDirectory>
+ </fileSet>
+ </fileSets>
+</assembly>
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/src/main/assembly/src.xml b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/main/assembly/src.xml
new file mode 100644
index 00000000..3bf10e05
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/main/assembly/src.xml
@@ -0,0 +1,49 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<assembly>
+ <id>src</id>
+ <formats>
+ <format>zip</format>
+ <format>tar.gz</format>
+ </formats>
+ <fileSets>
+ <fileSet>
+ <directory>${project.basedir}/..</directory>
+ <outputDirectory>/</outputDirectory>
+ <excludes>
+ <exclude>%regex[(?!((?!target/)[^/]+/)*src/).*target.*]</exclude>
+ <exclude>**/*.log</exclude>
+ <exclude>**/.gitignore</exclude>
+ <exclude>**/.gitattributes</exclude>
+ <exclude>init-git-svn.sh</exclude>
+ <exclude>**/.repository/**</exclude>
+ </excludes>
+ </fileSet>
+ <fileSet>
+ <directory>${project.build.directory}/maven-shared-archive-resources/META-INF</directory>
+ <outputDirectory>/</outputDirectory>
+ <includes>
+ <include>DEPENDENCIES</include>
+ <!-- exclude the license and notice as they are not as accurate as the ones from above -->
+ </includes>
+ </fileSet>
+ </fileSets>
+</assembly>
+
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/src/site/site.xml b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/site/site.xml
new file mode 100644
index 00000000..cd5a7454
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/site/site.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
+ <body>
+ <menu ref="parent"/>
+ <menu ref="reports"/>
+ </body>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/apache-maven/src/test/java/org/apache/maven/settings/GlobalSettingsTest.java b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/test/java/org/apache/maven/settings/GlobalSettingsTest.java
new file mode 100644
index 00000000..b728be38
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/apache-maven/src/test/java/org/apache/maven/settings/GlobalSettingsTest.java
@@ -0,0 +1,59 @@
+package org.apache.maven.settings;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
+
+/**
+ * Tests that the global settings.xml shipped with the distribution is in good state.
+ *
+ * @author Benjamin Bentmann
+ */
+public class GlobalSettingsTest
+ extends TestCase
+{
+
+ public void testValidGlobalSettings()
+ throws Exception
+ {
+ String basedir = System.getProperty( "basedir", System.getProperty( "user.dir" ) );
+
+ File globalSettingsFile = new File( basedir, "src/conf/settings.xml" );
+ assertTrue( globalSettingsFile.getAbsolutePath(), globalSettingsFile.isFile() );
+
+ Reader reader = new InputStreamReader( new FileInputStream( globalSettingsFile ), "UTF-8" );
+ try
+ {
+ new SettingsXpp3Reader().read( reader );
+ }
+ finally
+ {
+ reader.close();
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/build.xml b/framework/src/maven/apache-maven-3.3.3/build.xml
new file mode 100644
index 00000000..0442a125
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/build.xml
@@ -0,0 +1,307 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!-- START SNIPPET: ant-bootstrap
+
+By default the bootstrap will use ~/.m2/repository as the integration repository but you can define the integration
+repository by specifying a property on the command line:
+
+ant -Dmaven.repo.local=/my/integration/repository
+
+Those familiar with Maven will note this is the same way the local repository can be set from the command-line.
+This facilitates having a set of builds converge on the same repository for integration purposes.
+
+END SNIPPET: ant-bootstrap -->
+
+<project default="all" basedir="." xmlns:artifact="urn:maven-artifact-ant">
+
+ <property name="distributionDirectory" value="apache-maven"/>
+ <property name="distributionId" value="apache-maven"/>
+ <property name="distributionShortName" value="Maven"/>
+ <property name="distributionName" value="Apache Maven"/>
+ <property name="it.workdir.version" value="3.0.x" />
+ <property name="maven-compile.jvmargs" value="-Xmx512m -Xms512m"/>
+ <property name="maven-compile.fork" value="true"/>
+ <property name="maven-compile.maxmemory" value="512m"/>
+
+ <target name="initTaskDefs">
+ <echo>Building ${distributionName} ...</echo>
+ <xmlproperty file="pom.xml" prefix="xmlPom" />
+ <path id="maven-ant-tasks.classpath" path="maven-ant-tasks-2.1.1.jar" />
+ <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant" classpathref="maven-ant-tasks.classpath" />
+ </target>
+
+ <target name="isMavenHomeSet" depends="initTaskDefs">
+ <property environment="env" />
+ <condition property="maven.home" value="${env.M2_HOME}">
+ <isset property="env.M2_HOME" />
+ </condition>
+ <fail message="You must set the M2_HOME environment variable or specify a maven.home property to this Ant script">
+ <condition>
+ <or>
+ <not>
+ <isset property="maven.home" />
+ </not>
+ <equals arg1="${maven.home}" arg2="" trim="true" />
+ </or>
+ </condition>
+ </fail>
+ <available property="maven.home.exists" file="${maven.home}" />
+ </target>
+
+ <target name="prompt-maven-home-exists" depends="isMavenHomeSet" if="maven.home.exists">
+ <input addproperty="maven.home.exists.continue" validargs="yes,no" defaultvalue="no">WARNING:
+The specified target directory
+ ${maven.home}
+already exists. It will be deleted and overwritten by the build.
+Do you want to continue?</input>
+ <fail message="Build was aborted by user">
+ <condition>
+ <equals arg1="${maven.home.exists.continue}" arg2="no" trim="true" casesensitive="false" />
+ </condition>
+ </fail>
+ </target>
+
+ <target name="init" depends="isMavenHomeSet">
+ <!-- Initialize properties -->
+ <property name="maven.home.basename.expected" value="${distributionId}-${xmlPom.project.version}" />
+ <property name="maven.assembly" location="${distributionDirectory}/target/${maven.home.basename.expected}-bin.zip" />
+ <property name="maven.repo.local" value="${user.home}/.m2/repository" />
+ <property name="maven.debug" value="-e" />
+ <property name="maven.test.skip" value="false" />
+ <property name="skipTests" value="false" />
+ <property name="surefire.useFile" value="true" />
+ <property name="maven.test.redirectTestOutputToFile" value="${surefire.useFile}" />
+ <property name="maven.goal" value="install" />
+ <echo>maven.home = ${maven.home}</echo>
+ <echo>maven.repo.local = ${maven.repo.local}</echo>
+ <echo>distributionId = ${distributionId}</echo>
+ <echo>distributionName = ${distributionName}</echo>
+ <echo>distributionDirectory = ${distributionDirectory}</echo>
+ </target>
+
+ <target name="clean-bootstrap" description="cleans up generated bootstrap classes">
+ <delete dir="bootstrap" />
+ </target>
+
+ <target name="pull" depends="init" unless="skip.pull">
+ <!-- Pull the dependencies that Maven needs to build -->
+ <copy file="pom.xml" tofile="dependencies.xml" />
+ <replace file="${basedir}/dependencies.xml" token="&lt;!--bootstrap-start-comment--&gt;" value="&lt;!--" />
+ <replace file="${basedir}/dependencies.xml" token="&lt;!--bootstrap-end-comment--&gt;" value="--&gt;" />
+ <artifact:pom file="${basedir}/dependencies.xml" id="pom">
+ <localRepository path="${maven.repo.local}" />
+ </artifact:pom>
+ <artifact:dependencies pathId="pom.pathid" filesetId="pom.fileset" useScope="compile">
+ <localRepository path="${maven.repo.local}" />
+ <pom refid="pom" />
+ </artifact:dependencies>
+ <delete file="${basedir}/dependencies.xml" />
+
+ <!-- Pull the dependencies for Modello -->
+ <artifact:dependencies pathId="modello.pathid" filesetId="modello.fileset">
+ <localRepository path="${maven.repo.local}" />
+ <dependency groupId="org.codehaus.modello" artifactId="modello-maven-plugin" version="${pom.properties.modelloVersion}" />
+ </artifact:dependencies>
+
+ <!-- Pull the dependencies for the MetadataGenerator CLI -->
+ <artifact:dependencies pathId="pmdg.pathid" filesetId="pmdg.fileset">
+ <localRepository path="${maven.repo.local}" />
+ <dependency groupId="org.codehaus.plexus" artifactId="plexus-component-metadata" version="${pom.properties.plexusVersion}" />
+ </artifact:dependencies>
+
+ </target>
+
+ <target name="process-classes" depends="pull" description="generates plexus component metadata.">
+ <mkdir dir="${basedir}/bootstrap/target" />
+ <mkdir dir="${basedir}/bootstrap/target/classes" />
+
+ <path id="pmdg.classpath">
+ <path refid="maven.classpath" />
+ <path refid="pmdg.pathid" />
+ </path>
+
+ <echo>Using plexus version ${pom.properties.plexusVersion}</echo>
+ <java fork="true" classname="org.codehaus.plexus.metadata.PlexusMetadataGeneratorCli" failonerror="true">
+ <classpath refid="pmdg.classpath" />
+ <!-- We need to generate component descriptors from the maven-artifact sources which use javadoc annotations. -->
+ <arg value="--source" />
+ <arg value="${basedir}/maven-compat/src/main/java" />
+ <!-- We have separated the artifact handlers and lifecycle mappings into a separate file. -->
+ <arg value="--descriptors" />
+ <arg value="${basedir}/maven-core/src/main/resources/META-INF/plexus" />
+ <!-- Search the classes for annotations that we've compiled. -->
+ <arg value="--classes" />
+ <arg value="${basedir}/bootstrap/target/classes" />
+ <!-- We'll make one big fat components descriptor. -->
+ <arg value="--output" />
+ <arg value="${basedir}/bootstrap/target/classes/META-INF/plexus/components.xml" />
+ </java>
+ </target>
+
+ <target name="generate-sources" depends="pull" description="generates Java sources from Modello mdo model files">
+ <mkdir dir="bootstrap/target" />
+ <mkdir dir="bootstrap/target/generated-sources" />
+
+ <macrodef name="modello-single-mode">
+ <attribute name="file" />
+ <attribute name="mode" />
+ <attribute name="version" />
+ <sequential>
+ <java fork="true" classname="org.codehaus.modello.ModelloCli" failonerror="true">
+ <classpath refid="modello.pathid" />
+ <arg file="@{file}" />
+ <!-- model file -->
+ <arg value="@{mode}" />
+ <!-- output type -->
+ <arg file="bootstrap/target/generated-sources" />
+ <!-- output directory -->
+ <arg value="@{version}" />
+ <!-- model version -->
+ <arg value="false" />
+ <!-- package with version -->
+ <arg value="true" />
+ <!-- use Java 5 -->
+ <arg value="UTF-8" />
+ <!-- encoding -->
+ </java>
+ </sequential>
+ </macrodef>
+
+ <macrodef name="modello">
+ <attribute name="file" />
+ <attribute name="version" default="1.0.0" />
+ <sequential>
+ <echo taskname="modello" message="Generating sources for @{file}" />
+ <modello-single-mode file="@{file}" version="@{version}" mode="java" />
+ <modello-single-mode file="@{file}" version="@{version}" mode="xpp3-reader" />
+ <modello-single-mode file="@{file}" version="@{version}" mode="xpp3-writer" />
+ </sequential>
+ </macrodef>
+
+ <macrodef name="modello-ex">
+ <attribute name="file" />
+ <attribute name="version" default="1.0.0" />
+ <sequential>
+ <modello file="@{file}" version="@{version}" />
+ <modello-single-mode file="@{file}" version="@{version}" mode="xpp3-extended-reader" />
+ </sequential>
+ </macrodef>
+
+ <modello-ex file="maven-model/src/main/mdo/maven.mdo" version="4.0.0" />
+ <modello file="maven-plugin-api/src/main/mdo/lifecycle.mdo" />
+ <modello file="maven-model-builder/src/main/mdo/profiles.mdo" />
+ <modello file="maven-settings/src/main/mdo/settings.mdo" version="1.1.0" />
+ <modello file="maven-core/src/main/mdo/toolchains.mdo" version="1.1.0" />
+ <modello file="maven-repository-metadata/src/main/mdo/metadata.mdo" version="1.1.0" />
+ <modello file="maven-compat/src/main/mdo/profiles.mdo" />
+ <modello file="maven-compat/src/main/mdo/paramdoc.mdo" />
+ <modello file="maven-embedder/src/main/mdo/core-extensions.mdo" />
+ </target>
+
+ <target name="compile-boot" depends="generate-sources" description="compiles the bootstrap sources">
+ <path id="sources">
+ <dirset dir=".">
+ <include name="bootstrap/target/generated-sources" />
+ <include name="*/src/main/java" />
+ </dirset>
+ </path>
+
+ <mkdir dir="bootstrap/target/classes" />
+ <javac destdir="bootstrap/target/classes" encoding="UTF-8" source="1.6" target="1.6" debug="true" includeAntRuntime="false">
+ <src refid="sources" />
+ <classpath refid="pom.pathid" />
+ </javac>
+
+ <copy todir="bootstrap/target/classes" encoding="ISO-8859-1">
+ <fileset dir="maven-core/src/main/resources">
+ <include name="**/build.properties" />
+ </fileset>
+ <filterset begintoken="${" endtoken="}">
+ <filter token="project.version" value="${xmlPom.project.version}"/>
+ </filterset>
+ </copy>
+ <echo file="bootstrap/target/classes/META-INF/maven/org.apache.maven/maven-core/pom.properties" encoding="ISO-8859-1">
+ version = ${xmlPom.project.version}
+ </echo>
+
+ <path id="maven.classpath">
+ <pathelement location="bootstrap/target/classes" />
+ <dirset dir=".">
+ <include name="*/src/main/resources" />
+ </dirset>
+ <path refid="pom.pathid" />
+ </path>
+ </target>
+
+ <target name="maven-compile" depends="compile-boot,process-classes" description="compiles Maven using the bootstrap Maven, skipping automated tests">
+ <java fork="${maven-compile.fork}" classname="org.apache.maven.cli.MavenCli" failonerror="true" timeout="600000" maxmemory="${maven-compile.maxmemory}">
+ <!--jvmarg line="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000"/-->
+ <!--jvmarg value="${maven-compile.jvmargs}"/-->
+ <classpath refid="maven.classpath" />
+ <arg value="${maven.debug}" />
+ <arg value="-B" />
+ <arg value="-V" />
+ <arg value="clean" />
+ <arg value="${maven.goal}" />
+ <arg value="-Dmaven.test.skip=${maven.test.skip}" />
+ <arg value="-DskipTests=${skipTests}" />
+ <arg value="-Dmaven.repo.local=${maven.repo.local}" />
+ <arg value="-Dsurefire.useFile=${surefire.useFile}" />
+ <arg value="-Dmaven.test.redirectTestOutputToFile=${maven.test.redirectTestOutputToFile}" />
+ <arg value="-DdistributionId=${distributionId}" />
+ <arg value="-DdistributionShortName=${distributionShortName}" />
+ <arg value="-DdistributionName=${distributionName}" />
+ <jvmarg value="-Dmaven.multiModuleProjectDirectory=${basedir}" />
+ </java>
+ </target>
+
+ <target name="maven-assembly" depends="maven-compile" description="generates the Maven installation assembly using the bootstrap Maven">
+ <echo>
+The new Maven distribution was created as part of the MAVEN-COMPILE step, above.
+This goal just validates the presence of that distribution.
+</echo>
+ <condition property="build.failed">
+ <not>
+ <available file="${maven.assembly}" />
+ </not>
+ </condition>
+ <fail if="build.failed" message="Assembly task seemed to succeed, but couldn't find assembly file: ${maven.assembly}" />
+ </target>
+
+ <target name="extract-assembly" depends="init,prompt-maven-home-exists,maven-assembly" description="extracts the maven assembly into maven.home">
+ <echo>Extracting assembly to ${maven.home} ...</echo>
+ <!-- If we are starting from scratch make sure the directory is created -->
+ <delete dir="${maven.home}" />
+ <mkdir dir="${maven.home}" />
+ <unzip src="${maven.assembly}" dest="${maven.home}">
+ <mapper type="regexp" from="^[^\\/]+[\\/](.*)$$" to="\1" />
+ </unzip>
+ <chmod perm="+x">
+ <fileset dir="${maven.home}/bin">
+ <include name="mvn" />
+ <include name="mvnDebug" />
+ <include name="mvnyjp" />
+ </fileset>
+ </chmod>
+ </target>
+
+ <target name="all" depends="clean-bootstrap,init,extract-assembly" />
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/deploySite.sh b/framework/src/maven/apache-maven-3.3.3/deploySite.sh
new file mode 100644
index 00000000..f6c265d7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/deploySite.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+mvn -Preporting site site:stage $@
+mvn scm-publish:publish-scm $@
diff --git a/framework/src/maven/apache-maven-3.3.3/doap_Maven.rdf b/framework/src/maven/apache-maven-3.3.3/doap_Maven.rdf
new file mode 100644
index 00000000..e574e863
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/doap_Maven.rdf
@@ -0,0 +1,178 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<rdf:RDF xml:lang="en" xmlns="http://usefulinc.com/ns/doap#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:asfext="http://projects.apache.org/ns/asfext#" xmlns:foaf="http://xmlns.com/foaf/0.1/">
+ <Project rdf:about="http://Maven.rdf.apache.org/">
+ <created>2001</created>
+ <license rdf:resource="http://www.apache.org/licenses/LICENSE-2.0.txt"/>
+ <name>Apache Maven</name>
+ <homepage rdf:resource="http://maven.apache.org/"/>
+ <asfext:pmc rdf:resource="http://maven.apache.org/"/>
+ <shortdesc>Maven is a project development management and comprehension tool.</shortdesc>
+ <description>Maven is a project development management and comprehension tool. Based on the concept of a project object model: builds, dependency management, documentation creation, site publication, and distribution publication are all controlled from the declarative file. Maven can be extended by plugins to utilise a number of other development tools for reporting or the build process.</description>
+ <bug-database rdf:resource="http://jira.codehaus.org/browse/MNG"/>
+ <mailing-list rdf:resource="http://maven.apache.org/mail-lists.html"/>
+ <download-page rdf:resource="http://maven.apache.org/download.html"/>
+ <programming-language>Java</programming-language>
+ <category rdf:resource="http://projects.apache.org/category/build-management"/>
+ <release>
+ <Version>
+ <name>Latest stable release</name>
+ <created>2014-12-20</created>
+ <revision>3.2.5</revision>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.5/binaries/apache-maven-3.2.5-bin.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.5/binaries/apache-maven-3.2.5-bin.tar.gz</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.5/source/apache-maven-3.2.5-src.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.5/source/apache-maven-3.2.5-src.tar.gz</file-release>
+ </Version>
+ </release>
+ <release>
+ <Version>
+ <name>Apache Maven 3.2.3</name>
+ <created>2014-08-17</created>
+ <revision>3.2.3</revision>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.3/source/apache-maven-3.2.3-src.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.3/source/apache-maven-3.2.3-src.tar.gz</file-release>
+ </Version>
+ </release>
+ <release>
+ <Version>
+ <name>Apache Maven 3.2.2</name>
+ <created>2014-06-25</created>
+ <revision>3.2.2</revision>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.2/binaries/apache-maven-3.2.2-bin.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.2/binaries/apache-maven-3.2.2-bin.tar.gz</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.2/source/apache-maven-3.2.2-src.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.2/source/apache-maven-3.2.2-src.tar.gz</file-release>
+ </Version>
+ </release>
+ <release>
+ <Version>
+ <name>Apache Maven 3.2.1</name>
+ <created>2014-02-21</created>
+ <revision>3.2.1</revision>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.1/binaries/apache-maven-3.2.1-bin.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.1/binaries/apache-maven-3.2.1-bin.tar.gz</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.1/source/apache-maven-3.2.1-src.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.1/source/apache-maven-3.2.1-src.tar.gz</file-release>
+ </Version>
+ </release>
+ <release>
+ <Version>
+ <name>Apache Maven 3.1.1</name>
+ <created>2013-10-04</created>
+ <revision>3.1.1</revision>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.1.1/source/apache-maven-3.1.1-src.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.1.1/source/apache-maven-3.1.1-src.tar.gz</file-release>
+ </Version>
+ </release>
+ <release>
+ <Version>
+ <name>Apache Maven 3.1.0</name>
+ <created>2013-07-15</created>
+ <revision>3.1.0</revision>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.1.0/binaries/apache-maven-3.1.0-bin.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.1.0/binaries/apache-maven-3.1.0-bin.tar.gz</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.1.0/source/apache-maven-3.1.0-src.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.1.0/source/apache-maven-3.1.0-src.tar.gz</file-release>
+ </Version>
+ </release>
+ <release>
+ <Version>
+ <name>Apache Maven 3.0.5</name>
+ <created>2013-02-23</created>
+ <revision>3.0.5</revision>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.0.5/binaries/apache-maven-3.0.5-bin.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.0.5/binaries/apache-maven-3.0.5-bin.tar.gz</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.0.5/source/apache-maven-3.0.5-src.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/maven-3/3.0.5/source/apache-maven-3.0.5-src.tar.gz</file-release>
+ </Version>
+ </release>
+ <release>
+ <Version>
+ <name>Apache Maven 3.0.4</name>
+ <created>2012-01-20</created>
+ <revision>3.0.4</revision>
+ <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.4-bin.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.4-bin.tar.gz</file-release>
+ <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0.4-src.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0.4-src.tar.gz</file-release>
+ </Version>
+ </release>
+ <release>
+ <Version>
+ <name>Apache Maven 3.0.3</name>
+ <created>2011-03-03</created>
+ <revision>3.0.3</revision>
+ <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.3-bin.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.3-bin.tar.gz</file-release>
+ <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0.3-src.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0.3-src.tar.gz</file-release>
+ </Version>
+ </release>
+ <release>
+ <Version>
+ <name>Apache Maven 3.0.2</name>
+ <created>2011-01-12</created>
+ <revision>3.0.2</revision>
+ <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.2-bin.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.2-bin.tar.gz</file-release>
+ <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0.2-src.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0.2-src.tar.gz</file-release>
+ </Version>
+ </release>
+ <release>
+ <Version>
+ <name>Apache Maven 3.0.1</name>
+ <created>2010-11-23</created>
+ <revision>3.0.1</revision>
+ <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.1-bin.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.1-bin.tar.gz</file-release>
+ <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0.1-src.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0.1-src.tar.gz</file-release>
+ </Version>
+ </release>
+ <release>
+ <Version>
+ <name>Apache Maven 3.0</name>
+ <created>2010-10-04</created>
+ <revision>3.0</revision>
+ <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0-bin.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0-bin.tar.gz</file-release>
+ <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0-src.zip</file-release>
+ <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0-src.tar.gz</file-release>
+ </Version>
+ </release>
+ <repository>
+ <GitRepository>
+ <location rdf:resource="https://git-wip-us.apache.org/repos/asf/maven.git"/>
+ <browse rdf:resource="https://git-wip-us.apache.org/repos/asf/maven.git"/>
+ </GitRepository>
+ </repository>
+ <maintainer>
+ <foaf:Person>
+ <foaf:name>Apache Maven PMC</foaf:name>
+ <foaf:mbox rdf:resource="mailto:dev@maven.apache.org"/>
+ </foaf:Person>
+ </maintainer>
+ </Project>
+</rdf:RDF>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/pom.xml
new file mode 100644
index 00000000..4906647c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/pom.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.3.3</version>
+ </parent>
+
+ <artifactId>maven-aether-provider</artifactId>
+
+ <name>Maven Aether Provider</name>
+ <description>Extensions to Aether for utilizing Maven POM and repository metadata.</description>
+
+ <scm><!-- remove when git scm url format can accept artifact-id at the end, as automatically inherited -->
+ <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
+ <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
+ <tag>maven-3.3.3</tag>
+ </scm>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model-builder</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository-metadata</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-spi</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-util</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-impl</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.sisu</groupId>
+ <artifactId>sisu-guice</artifactId>
+ <classifier>no_aop</classifier>
+ <optional>true</optional>
+ <exclusions>
+ <exclusion>
+ <groupId>aopalliance</groupId>
+ <artifactId>aopalliance</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <!-- Testing -->
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-connector-basic</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-transport-wagon</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>org.eclipse.sisu.plexus</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>1.9.5</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-metadata</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
+
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorReaderDelegate.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorReaderDelegate.java
new file mode 100644
index 00000000..29749ad0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorReaderDelegate.java
@@ -0,0 +1,153 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.model.License;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Prerequisites;
+import org.apache.maven.model.Repository;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.ArtifactProperties;
+import org.eclipse.aether.artifact.ArtifactType;
+import org.eclipse.aether.artifact.ArtifactTypeRegistry;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.artifact.DefaultArtifactType;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.Exclusion;
+import org.eclipse.aether.resolution.ArtifactDescriptorResult;
+
+/**
+ * Populates Aether {@link ArtifactDescriptorResult} from Maven project {@link Model}.
+ *
+ * @since 3.2.4
+ * @provisional This class is part of work in progress and can be changed or removed without notice.
+ */
+public class ArtifactDescriptorReaderDelegate
+{
+ public void populateResult( RepositorySystemSession session, ArtifactDescriptorResult result, Model model )
+ {
+ ArtifactTypeRegistry stereotypes = session.getArtifactTypeRegistry();
+
+ for ( Repository r : model.getRepositories() )
+ {
+ result.addRepository( ArtifactDescriptorUtils.toRemoteRepository( r ) );
+ }
+
+ for ( org.apache.maven.model.Dependency dependency : model.getDependencies() )
+ {
+ result.addDependency( convert( dependency, stereotypes ) );
+ }
+
+ DependencyManagement mngt = model.getDependencyManagement();
+ if ( mngt != null )
+ {
+ for ( org.apache.maven.model.Dependency dependency : mngt.getDependencies() )
+ {
+ result.addManagedDependency( convert( dependency, stereotypes ) );
+ }
+ }
+
+ Map<String, Object> properties = new LinkedHashMap<String, Object>();
+
+ Prerequisites prerequisites = model.getPrerequisites();
+ if ( prerequisites != null )
+ {
+ properties.put( "prerequisites.maven", prerequisites.getMaven() );
+ }
+
+ List<License> licenses = model.getLicenses();
+ properties.put( "license.count", licenses.size() );
+ for ( int i = 0; i < licenses.size(); i++ )
+ {
+ License license = licenses.get( i );
+ properties.put( "license." + i + ".name", license.getName() );
+ properties.put( "license." + i + ".url", license.getUrl() );
+ properties.put( "license." + i + ".comments", license.getComments() );
+ properties.put( "license." + i + ".distribution", license.getDistribution() );
+ }
+
+ result.setProperties( properties );
+
+ setArtifactProperties( result, model );
+ }
+
+ private Dependency convert( org.apache.maven.model.Dependency dependency, ArtifactTypeRegistry stereotypes )
+ {
+ ArtifactType stereotype = stereotypes.get( dependency.getType() );
+ if ( stereotype == null )
+ {
+ stereotype = new DefaultArtifactType( dependency.getType() );
+ }
+
+ boolean system = dependency.getSystemPath() != null && dependency.getSystemPath().length() > 0;
+
+ Map<String, String> props = null;
+ if ( system )
+ {
+ props = Collections.singletonMap( ArtifactProperties.LOCAL_PATH, dependency.getSystemPath() );
+ }
+
+ Artifact artifact =
+ new DefaultArtifact( dependency.getGroupId(), dependency.getArtifactId(), dependency.getClassifier(), null,
+ dependency.getVersion(), props, stereotype );
+
+ List<Exclusion> exclusions = new ArrayList<Exclusion>( dependency.getExclusions().size() );
+ for ( org.apache.maven.model.Exclusion exclusion : dependency.getExclusions() )
+ {
+ exclusions.add( convert( exclusion ) );
+ }
+
+ Dependency result = new Dependency( artifact, dependency.getScope(), dependency.isOptional(), exclusions );
+
+ return result;
+ }
+
+ private Exclusion convert( org.apache.maven.model.Exclusion exclusion )
+ {
+ return new Exclusion( exclusion.getGroupId(), exclusion.getArtifactId(), "*", "*" );
+ }
+
+ private void setArtifactProperties( ArtifactDescriptorResult result, Model model )
+ {
+ String downloadUrl = null;
+ DistributionManagement distMngt = model.getDistributionManagement();
+ if ( distMngt != null )
+ {
+ downloadUrl = distMngt.getDownloadUrl();
+ }
+ if ( downloadUrl != null && downloadUrl.length() > 0 )
+ {
+ Artifact artifact = result.getArtifact();
+ Map<String, String> props = new HashMap<String, String>( artifact.getProperties() );
+ props.put( ArtifactProperties.DOWNLOAD_URL, downloadUrl );
+ result.setArtifact( artifact.setProperties( props ) );
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorUtils.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorUtils.java
new file mode 100644
index 00000000..7d4ede87
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorUtils.java
@@ -0,0 +1,81 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Repository;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.repository.RepositoryPolicy;
+
+/**
+ * <strong>Warning:</strong> This is an internal utility class that is only public for technical reasons, it is not part
+ * of the public API. In particular, this class can be changed or deleted without prior notice.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ArtifactDescriptorUtils
+{
+
+ public static Artifact toPomArtifact( Artifact artifact )
+ {
+ Artifact pomArtifact = artifact;
+
+ if ( pomArtifact.getClassifier().length() > 0 || !"pom".equals( pomArtifact.getExtension() ) )
+ {
+ pomArtifact =
+ new DefaultArtifact( artifact.getGroupId(), artifact.getArtifactId(), "pom", artifact.getVersion() );
+ }
+
+ return pomArtifact;
+ }
+
+ public static RemoteRepository toRemoteRepository( Repository repository )
+ {
+ RemoteRepository.Builder builder =
+ new RemoteRepository.Builder( repository.getId(), repository.getLayout(), repository.getUrl() );
+ builder.setSnapshotPolicy( toRepositoryPolicy( repository.getSnapshots() ) );
+ builder.setReleasePolicy( toRepositoryPolicy( repository.getReleases() ) );
+ return builder.build();
+ }
+
+ public static RepositoryPolicy toRepositoryPolicy( org.apache.maven.model.RepositoryPolicy policy )
+ {
+ boolean enabled = true;
+ String checksums = RepositoryPolicy.CHECKSUM_POLICY_WARN;
+ String updates = RepositoryPolicy.UPDATE_POLICY_DAILY;
+
+ if ( policy != null )
+ {
+ enabled = policy.isEnabled();
+ if ( policy.getUpdatePolicy() != null )
+ {
+ updates = policy.getUpdatePolicy();
+ }
+ if ( policy.getChecksumPolicy() != null )
+ {
+ checksums = policy.getChecksumPolicy();
+ }
+ }
+
+ return new RepositoryPolicy( enabled, updates, checksums );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
new file mode 100644
index 00000000..a768de56
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
@@ -0,0 +1,435 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Relocation;
+import org.apache.maven.model.building.DefaultModelBuilderFactory;
+import org.apache.maven.model.building.DefaultModelBuildingRequest;
+import org.apache.maven.model.building.FileModelSource;
+import org.apache.maven.model.building.ModelBuilder;
+import org.apache.maven.model.building.ModelBuildingException;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblem;
+import org.apache.maven.model.resolution.UnresolvableModelException;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.eclipse.aether.RepositoryEvent;
+import org.eclipse.aether.RepositoryEvent.EventType;
+import org.eclipse.aether.RepositoryException;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.RequestTrace;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.impl.ArtifactDescriptorReader;
+import org.eclipse.aether.impl.ArtifactResolver;
+import org.eclipse.aether.impl.RemoteRepositoryManager;
+import org.eclipse.aether.impl.RepositoryEventDispatcher;
+import org.eclipse.aether.impl.VersionRangeResolver;
+import org.eclipse.aether.impl.VersionResolver;
+import org.eclipse.aether.repository.WorkspaceReader;
+import org.eclipse.aether.repository.WorkspaceRepository;
+import org.eclipse.aether.resolution.ArtifactDescriptorException;
+import org.eclipse.aether.resolution.ArtifactDescriptorPolicy;
+import org.eclipse.aether.resolution.ArtifactDescriptorPolicyRequest;
+import org.eclipse.aether.resolution.ArtifactDescriptorRequest;
+import org.eclipse.aether.resolution.ArtifactDescriptorResult;
+import org.eclipse.aether.resolution.ArtifactRequest;
+import org.eclipse.aether.resolution.ArtifactResolutionException;
+import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.resolution.VersionRequest;
+import org.eclipse.aether.resolution.VersionResolutionException;
+import org.eclipse.aether.resolution.VersionResult;
+import org.eclipse.aether.spi.locator.Service;
+import org.eclipse.aether.spi.locator.ServiceLocator;
+import org.eclipse.aether.spi.log.Logger;
+import org.eclipse.aether.spi.log.LoggerFactory;
+import org.eclipse.aether.spi.log.NullLoggerFactory;
+import org.eclipse.aether.transfer.ArtifactNotFoundException;
+
+/**
+ * @author Benjamin Bentmann
+ */
+@Named
+@Component( role = ArtifactDescriptorReader.class )
+public class DefaultArtifactDescriptorReader
+ implements ArtifactDescriptorReader, Service
+{
+
+ @SuppressWarnings( "unused" )
+ @Requirement( role = LoggerFactory.class )
+ private Logger logger = NullLoggerFactory.LOGGER;
+
+ @Requirement
+ private RemoteRepositoryManager remoteRepositoryManager;
+
+ @Requirement
+ private VersionResolver versionResolver;
+
+ @Requirement
+ private VersionRangeResolver versionRangeResolver;
+
+ @Requirement
+ private ArtifactResolver artifactResolver;
+
+ @Requirement
+ private RepositoryEventDispatcher repositoryEventDispatcher;
+
+ @Requirement
+ private ModelBuilder modelBuilder;
+
+ public DefaultArtifactDescriptorReader()
+ {
+ // enable no-arg constructor
+ }
+
+ @Inject
+ DefaultArtifactDescriptorReader( RemoteRepositoryManager remoteRepositoryManager, VersionResolver versionResolver,
+ ArtifactResolver artifactResolver, ModelBuilder modelBuilder,
+ RepositoryEventDispatcher repositoryEventDispatcher, LoggerFactory loggerFactory )
+ {
+ setRemoteRepositoryManager( remoteRepositoryManager );
+ setVersionResolver( versionResolver );
+ setArtifactResolver( artifactResolver );
+ setModelBuilder( modelBuilder );
+ setLoggerFactory( loggerFactory );
+ setRepositoryEventDispatcher( repositoryEventDispatcher );
+ }
+
+ public void initService( ServiceLocator locator )
+ {
+ setLoggerFactory( locator.getService( LoggerFactory.class ) );
+ setRemoteRepositoryManager( locator.getService( RemoteRepositoryManager.class ) );
+ setVersionResolver( locator.getService( VersionResolver.class ) );
+ setVersionRangeResolver( locator.getService( VersionRangeResolver.class ) );
+ setArtifactResolver( locator.getService( ArtifactResolver.class ) );
+ setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) );
+ modelBuilder = locator.getService( ModelBuilder.class );
+ if ( modelBuilder == null )
+ {
+ setModelBuilder( new DefaultModelBuilderFactory().newInstance() );
+ }
+ }
+
+ public DefaultArtifactDescriptorReader setLoggerFactory( LoggerFactory loggerFactory )
+ {
+ this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
+ return this;
+ }
+
+ void setLogger( LoggerFactory loggerFactory )
+ {
+ // plexus support
+ setLoggerFactory( loggerFactory );
+ }
+
+ public DefaultArtifactDescriptorReader setRemoteRepositoryManager( RemoteRepositoryManager remoteRepositoryManager )
+ {
+ if ( remoteRepositoryManager == null )
+ {
+ throw new IllegalArgumentException( "remote repository manager has not been specified" );
+ }
+ this.remoteRepositoryManager = remoteRepositoryManager;
+ return this;
+ }
+
+ public DefaultArtifactDescriptorReader setVersionResolver( VersionResolver versionResolver )
+ {
+ if ( versionResolver == null )
+ {
+ throw new IllegalArgumentException( "version resolver has not been specified" );
+ }
+ this.versionResolver = versionResolver;
+ return this;
+ }
+
+ /** @since 3.2.2 */
+ public DefaultArtifactDescriptorReader setVersionRangeResolver( VersionRangeResolver versionRangeResolver )
+ {
+ if ( versionRangeResolver == null )
+ {
+ throw new IllegalArgumentException( "version range resolver has not been specified" );
+ }
+ this.versionRangeResolver = versionRangeResolver;
+ return this;
+ }
+
+ public DefaultArtifactDescriptorReader setArtifactResolver( ArtifactResolver artifactResolver )
+ {
+ if ( artifactResolver == null )
+ {
+ throw new IllegalArgumentException( "artifact resolver has not been specified" );
+ }
+ this.artifactResolver = artifactResolver;
+ return this;
+ }
+
+ public DefaultArtifactDescriptorReader setRepositoryEventDispatcher( RepositoryEventDispatcher red )
+ {
+ if ( red == null )
+ {
+ throw new IllegalArgumentException( "repository event dispatcher has not been specified" );
+ }
+ this.repositoryEventDispatcher = red;
+ return this;
+ }
+
+ public DefaultArtifactDescriptorReader setModelBuilder( ModelBuilder modelBuilder )
+ {
+ if ( modelBuilder == null )
+ {
+ throw new IllegalArgumentException( "model builder has not been specified" );
+ }
+ this.modelBuilder = modelBuilder;
+ return this;
+ }
+
+ public ArtifactDescriptorResult readArtifactDescriptor( RepositorySystemSession session,
+ ArtifactDescriptorRequest request )
+ throws ArtifactDescriptorException
+ {
+ ArtifactDescriptorResult result = new ArtifactDescriptorResult( request );
+
+ Model model = loadPom( session, request, result );
+ if ( model != null )
+ {
+ Map<String, Object> config = session.getConfigProperties();
+ ArtifactDescriptorReaderDelegate delegate =
+ (ArtifactDescriptorReaderDelegate) config.get( ArtifactDescriptorReaderDelegate.class.getName() );
+
+ if ( delegate == null )
+ {
+ delegate = new ArtifactDescriptorReaderDelegate();
+ }
+
+ delegate.populateResult( session, result, model );
+ }
+
+ return result;
+ }
+
+ private Model loadPom( RepositorySystemSession session, ArtifactDescriptorRequest request,
+ ArtifactDescriptorResult result )
+ throws ArtifactDescriptorException
+ {
+ RequestTrace trace = RequestTrace.newChild( request.getTrace(), request );
+
+ Set<String> visited = new LinkedHashSet<String>();
+ for ( Artifact a = request.getArtifact();; )
+ {
+ Artifact pomArtifact = ArtifactDescriptorUtils.toPomArtifact( a );
+ try
+ {
+ VersionRequest versionRequest =
+ new VersionRequest( a, request.getRepositories(), request.getRequestContext() );
+ versionRequest.setTrace( trace );
+ VersionResult versionResult = versionResolver.resolveVersion( session, versionRequest );
+
+ a = a.setVersion( versionResult.getVersion() );
+
+ versionRequest =
+ new VersionRequest( pomArtifact, request.getRepositories(), request.getRequestContext() );
+ versionRequest.setTrace( trace );
+ versionResult = versionResolver.resolveVersion( session, versionRequest );
+
+ pomArtifact = pomArtifact.setVersion( versionResult.getVersion() );
+ }
+ catch ( VersionResolutionException e )
+ {
+ result.addException( e );
+ throw new ArtifactDescriptorException( result );
+ }
+
+ if ( !visited.add( a.getGroupId() + ':' + a.getArtifactId() + ':' + a.getBaseVersion() ) )
+ {
+ RepositoryException exception =
+ new RepositoryException( "Artifact relocations form a cycle: " + visited );
+ invalidDescriptor( session, trace, a, exception );
+ if ( ( getPolicy( session, a, request ) & ArtifactDescriptorPolicy.IGNORE_INVALID ) != 0 )
+ {
+ return null;
+ }
+ result.addException( exception );
+ throw new ArtifactDescriptorException( result );
+ }
+
+ ArtifactResult resolveResult;
+ try
+ {
+ ArtifactRequest resolveRequest =
+ new ArtifactRequest( pomArtifact, request.getRepositories(), request.getRequestContext() );
+ resolveRequest.setTrace( trace );
+ resolveResult = artifactResolver.resolveArtifact( session, resolveRequest );
+ pomArtifact = resolveResult.getArtifact();
+ result.setRepository( resolveResult.getRepository() );
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ if ( e.getCause() instanceof ArtifactNotFoundException )
+ {
+ missingDescriptor( session, trace, a, (Exception) e.getCause() );
+ if ( ( getPolicy( session, a, request ) & ArtifactDescriptorPolicy.IGNORE_MISSING ) != 0 )
+ {
+ return null;
+ }
+ }
+ result.addException( e );
+ throw new ArtifactDescriptorException( result );
+ }
+
+ Model model;
+
+ // hack: don't rebuild model if it was already loaded during reactor resolution
+ final WorkspaceReader workspace = session.getWorkspaceReader();
+ if ( workspace instanceof MavenWorkspaceReader )
+ {
+ model = ( (MavenWorkspaceReader) workspace ).findModel( pomArtifact );
+ if ( model != null )
+ {
+ return model;
+ }
+ }
+
+ try
+ {
+ ModelBuildingRequest modelRequest = new DefaultModelBuildingRequest();
+ modelRequest.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL );
+ modelRequest.setProcessPlugins( false );
+ modelRequest.setTwoPhaseBuilding( false );
+ modelRequest.setSystemProperties( toProperties( session.getUserProperties(),
+ session.getSystemProperties() ) );
+ modelRequest.setModelCache( DefaultModelCache.newInstance( session ) );
+ modelRequest.setModelResolver( new DefaultModelResolver( session, trace.newChild( modelRequest ),
+ request.getRequestContext(), artifactResolver,
+ versionRangeResolver, remoteRepositoryManager,
+ request.getRepositories() ) );
+ if ( resolveResult.getRepository() instanceof WorkspaceRepository )
+ {
+ modelRequest.setPomFile( pomArtifact.getFile() );
+ }
+ else
+ {
+ modelRequest.setModelSource( new FileModelSource( pomArtifact.getFile() ) );
+ }
+
+ model = modelBuilder.build( modelRequest ).getEffectiveModel();
+ }
+ catch ( ModelBuildingException e )
+ {
+ for ( ModelProblem problem : e.getProblems() )
+ {
+ if ( problem.getException() instanceof UnresolvableModelException )
+ {
+ result.addException( problem.getException() );
+ throw new ArtifactDescriptorException( result );
+ }
+ }
+ invalidDescriptor( session, trace, a, e );
+ if ( ( getPolicy( session, a, request ) & ArtifactDescriptorPolicy.IGNORE_INVALID ) != 0 )
+ {
+ return null;
+ }
+ result.addException( e );
+ throw new ArtifactDescriptorException( result );
+ }
+
+ Relocation relocation = getRelocation( model );
+
+ if ( relocation != null )
+ {
+ result.addRelocation( a );
+ a =
+ new RelocatedArtifact( a, relocation.getGroupId(), relocation.getArtifactId(),
+ relocation.getVersion() );
+ result.setArtifact( a );
+ }
+ else
+ {
+ return model;
+ }
+ }
+ }
+
+ private Properties toProperties( Map<String, String> dominant, Map<String, String> recessive )
+ {
+ Properties props = new Properties();
+ if ( recessive != null )
+ {
+ props.putAll( recessive );
+ }
+ if ( dominant != null )
+ {
+ props.putAll( dominant );
+ }
+ return props;
+ }
+
+ private Relocation getRelocation( Model model )
+ {
+ Relocation relocation = null;
+ DistributionManagement distMngt = model.getDistributionManagement();
+ if ( distMngt != null )
+ {
+ relocation = distMngt.getRelocation();
+ }
+ return relocation;
+ }
+
+ private void missingDescriptor( RepositorySystemSession session, RequestTrace trace, Artifact artifact,
+ Exception exception )
+ {
+ RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.ARTIFACT_DESCRIPTOR_MISSING );
+ event.setTrace( trace );
+ event.setArtifact( artifact );
+ event.setException( exception );
+
+ repositoryEventDispatcher.dispatch( event.build() );
+ }
+
+ private void invalidDescriptor( RepositorySystemSession session, RequestTrace trace, Artifact artifact,
+ Exception exception )
+ {
+ RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.ARTIFACT_DESCRIPTOR_INVALID );
+ event.setTrace( trace );
+ event.setArtifact( artifact );
+ event.setException( exception );
+
+ repositoryEventDispatcher.dispatch( event.build() );
+ }
+
+ private int getPolicy( RepositorySystemSession session, Artifact a, ArtifactDescriptorRequest request )
+ {
+ ArtifactDescriptorPolicy policy = session.getArtifactDescriptorPolicy();
+ if ( policy == null )
+ {
+ return ArtifactDescriptorPolicy.STRICT;
+ }
+ return policy.getPolicy( session, new ArtifactDescriptorPolicyRequest( a, request.getRequestContext() ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCache.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCache.java
new file mode 100644
index 00000000..f13495df
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCache.java
@@ -0,0 +1,119 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.building.ModelCache;
+import org.eclipse.aether.RepositoryCache;
+import org.eclipse.aether.RepositorySystemSession;
+
+/**
+ * A model builder cache backed by the repository system cache.
+ *
+ * @author Benjamin Bentmann
+ */
+class DefaultModelCache
+ implements ModelCache
+{
+
+ private final RepositorySystemSession session;
+
+ private final RepositoryCache cache;
+
+ public static ModelCache newInstance( RepositorySystemSession session )
+ {
+ if ( session.getCache() == null )
+ {
+ return null;
+ }
+ else
+ {
+ return new DefaultModelCache( session );
+ }
+ }
+
+ private DefaultModelCache( RepositorySystemSession session )
+ {
+ this.session = session;
+ this.cache = session.getCache();
+ }
+
+ public Object get( String groupId, String artifactId, String version, String tag )
+ {
+ return cache.get( session, new Key( groupId, artifactId, version, tag ) );
+ }
+
+ public void put( String groupId, String artifactId, String version, String tag, Object data )
+ {
+ cache.put( session, new Key( groupId, artifactId, version, tag ), data );
+ }
+
+ static class Key
+ {
+
+ private final String groupId;
+
+ private final String artifactId;
+
+ private final String version;
+
+ private final String tag;
+
+ private final int hash;
+
+ public Key( String groupId, String artifactId, String version, String tag )
+ {
+ this.groupId = groupId;
+ this.artifactId = artifactId;
+ this.version = version;
+ this.tag = tag;
+
+ int h = 17;
+ h = h * 31 + this.groupId.hashCode();
+ h = h * 31 + this.artifactId.hashCode();
+ h = h * 31 + this.version.hashCode();
+ h = h * 31 + this.tag.hashCode();
+ hash = h;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+ if ( null == obj || !getClass().equals( obj.getClass() ) )
+ {
+ return false;
+ }
+
+ Key that = (Key) obj;
+ return artifactId.equals( that.artifactId ) && groupId.equals( that.groupId )
+ && version.equals( that.version ) && tag.equals( that.tag );
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return hash;
+ }
+
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
new file mode 100644
index 00000000..7cd47475
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
@@ -0,0 +1,229 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.building.FileModelSource;
+import org.apache.maven.model.building.ModelSource;
+import org.apache.maven.model.resolution.InvalidRepositoryException;
+import org.apache.maven.model.resolution.ModelResolver;
+import org.apache.maven.model.resolution.UnresolvableModelException;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.RequestTrace;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.impl.ArtifactResolver;
+import org.eclipse.aether.impl.RemoteRepositoryManager;
+import org.eclipse.aether.impl.VersionRangeResolver;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.ArtifactRequest;
+import org.eclipse.aether.resolution.ArtifactResolutionException;
+import org.eclipse.aether.resolution.VersionRangeRequest;
+import org.eclipse.aether.resolution.VersionRangeResolutionException;
+import org.eclipse.aether.resolution.VersionRangeResult;
+
+/**
+ * A model resolver to assist building of dependency POMs. This resolver gives priority to those repositories that have
+ * been initially specified and repositories discovered in dependency POMs are recessively merged into the search chain.
+ *
+ * @author Benjamin Bentmann
+ * @see DefaultArtifactDescriptorReader
+ */
+class DefaultModelResolver
+ implements ModelResolver
+{
+
+ private final RepositorySystemSession session;
+
+ private final RequestTrace trace;
+
+ private final String context;
+
+ private List<RemoteRepository> repositories;
+
+ private final List<RemoteRepository> externalRepositories;
+
+ private final ArtifactResolver resolver;
+
+ private final VersionRangeResolver versionRangeResolver;
+
+ private final RemoteRepositoryManager remoteRepositoryManager;
+
+ private final Set<String> repositoryIds;
+
+ public DefaultModelResolver( RepositorySystemSession session, RequestTrace trace, String context,
+ ArtifactResolver resolver, VersionRangeResolver versionRangeResolver,
+ RemoteRepositoryManager remoteRepositoryManager, List<RemoteRepository> repositories )
+ {
+ this.session = session;
+ this.trace = trace;
+ this.context = context;
+ this.resolver = resolver;
+ this.versionRangeResolver = versionRangeResolver;
+ this.remoteRepositoryManager = remoteRepositoryManager;
+ this.repositories = repositories;
+ List<RemoteRepository> externalRepositories = new ArrayList<RemoteRepository>();
+ externalRepositories.addAll( repositories );
+ this.externalRepositories = Collections.unmodifiableList( externalRepositories );
+
+ this.repositoryIds = new HashSet<String>();
+ }
+
+ private DefaultModelResolver( DefaultModelResolver original )
+ {
+ this.session = original.session;
+ this.trace = original.trace;
+ this.context = original.context;
+ this.resolver = original.resolver;
+ this.versionRangeResolver = original.versionRangeResolver;
+ this.remoteRepositoryManager = original.remoteRepositoryManager;
+ this.repositories = new ArrayList<RemoteRepository>( original.repositories );
+ this.externalRepositories = original.externalRepositories;
+ this.repositoryIds = new HashSet<String>( original.repositoryIds );
+ }
+
+ @Override
+ public void addRepository( Repository repository )
+ throws InvalidRepositoryException
+ {
+ addRepository( repository, false );
+ }
+
+ @Override
+ public void addRepository( final Repository repository, boolean replace )
+ throws InvalidRepositoryException
+ {
+ if ( session.isIgnoreArtifactDescriptorRepositories() )
+ {
+ return;
+ }
+
+ if ( !repositoryIds.add( repository.getId() ) )
+ {
+ if ( !replace )
+ {
+ return;
+ }
+
+ removeMatchingRepository( repositories, repository.getId() );
+ }
+
+ List<RemoteRepository> newRepositories =
+ Collections.singletonList( ArtifactDescriptorUtils.toRemoteRepository( repository ) );
+
+ this.repositories =
+ remoteRepositoryManager.aggregateRepositories( session, repositories, newRepositories, true );
+ }
+
+ private static void removeMatchingRepository( Iterable<RemoteRepository> repositories, final String id )
+ {
+ Iterables.removeIf( repositories, new Predicate<RemoteRepository>()
+ {
+ @Override
+ public boolean apply( RemoteRepository remoteRepository )
+ {
+ return remoteRepository.getId().equals( id );
+ }
+ } );
+ }
+
+ @Override
+ public ModelResolver newCopy()
+ {
+ return new DefaultModelResolver( this );
+ }
+
+ @Override
+ public ModelSource resolveModel( String groupId, String artifactId, String version )
+ throws UnresolvableModelException
+ {
+ Artifact pomArtifact = new DefaultArtifact( groupId, artifactId, "", "pom", version );
+
+ try
+ {
+ ArtifactRequest request = new ArtifactRequest( pomArtifact, repositories, context );
+ request.setTrace( trace );
+ pomArtifact = resolver.resolveArtifact( session, request ).getArtifact();
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ throw new UnresolvableModelException( e.getMessage(), groupId, artifactId, version, e );
+ }
+
+ File pomFile = pomArtifact.getFile();
+
+ return new FileModelSource( pomFile );
+ }
+
+ public ModelSource resolveModel( Parent parent )
+ throws UnresolvableModelException
+ {
+ Artifact artifact = new DefaultArtifact( parent.getGroupId(), parent.getArtifactId(), "", "pom",
+ parent.getVersion() );
+
+ VersionRangeRequest versionRangeRequest = new VersionRangeRequest( artifact, repositories, context );
+ versionRangeRequest.setTrace( trace );
+
+ try
+ {
+ VersionRangeResult versionRangeResult =
+ versionRangeResolver.resolveVersionRange( session, versionRangeRequest );
+
+ if ( versionRangeResult.getHighestVersion() == null )
+ {
+ throw new UnresolvableModelException( "No versions matched the requested range '" + parent.getVersion()
+ + "'", parent.getGroupId(), parent.getArtifactId(),
+ parent.getVersion() );
+
+ }
+
+ if ( versionRangeResult.getVersionConstraint() != null
+ && versionRangeResult.getVersionConstraint().getRange() != null
+ && versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null )
+ {
+ throw new UnresolvableModelException( "The requested version range '" + parent.getVersion()
+ + "' does not specify an upper bound", parent.getGroupId(),
+ parent.getArtifactId(), parent.getVersion() );
+
+ }
+
+ parent.setVersion( versionRangeResult.getHighestVersion().toString() );
+ }
+ catch ( VersionRangeResolutionException e )
+ {
+ throw new UnresolvableModelException( e.getMessage(), parent.getGroupId(), parent.getArtifactId(),
+ parent.getVersion(), e );
+
+ }
+
+ return resolveModel( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
new file mode 100644
index 00000000..e8ba06b9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
@@ -0,0 +1,322 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.FileInputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.maven.artifact.repository.metadata.Versioning;
+import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.util.IOUtil;
+import org.eclipse.aether.RepositoryEvent.EventType;
+import org.eclipse.aether.RepositoryEvent;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.RequestTrace;
+import org.eclipse.aether.SyncContext;
+import org.eclipse.aether.impl.MetadataResolver;
+import org.eclipse.aether.impl.RepositoryEventDispatcher;
+import org.eclipse.aether.impl.SyncContextFactory;
+import org.eclipse.aether.impl.VersionRangeResolver;
+import org.eclipse.aether.metadata.DefaultMetadata;
+import org.eclipse.aether.metadata.Metadata;
+import org.eclipse.aether.repository.ArtifactRepository;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.repository.WorkspaceReader;
+import org.eclipse.aether.resolution.MetadataRequest;
+import org.eclipse.aether.resolution.MetadataResult;
+import org.eclipse.aether.resolution.VersionRangeRequest;
+import org.eclipse.aether.resolution.VersionRangeResolutionException;
+import org.eclipse.aether.resolution.VersionRangeResult;
+import org.eclipse.aether.spi.locator.Service;
+import org.eclipse.aether.spi.locator.ServiceLocator;
+import org.eclipse.aether.spi.log.Logger;
+import org.eclipse.aether.spi.log.LoggerFactory;
+import org.eclipse.aether.spi.log.NullLoggerFactory;
+import org.eclipse.aether.util.version.GenericVersionScheme;
+import org.eclipse.aether.version.InvalidVersionSpecificationException;
+import org.eclipse.aether.version.Version;
+import org.eclipse.aether.version.VersionConstraint;
+import org.eclipse.aether.version.VersionScheme;
+
+/**
+ * @author Benjamin Bentmann
+ */
+@Named
+@Component( role = VersionRangeResolver.class )
+public class DefaultVersionRangeResolver
+ implements VersionRangeResolver, Service
+{
+
+ private static final String MAVEN_METADATA_XML = "maven-metadata.xml";
+
+ @SuppressWarnings( "unused" )
+ @Requirement( role = LoggerFactory.class )
+ private Logger logger = NullLoggerFactory.LOGGER;
+
+ @Requirement
+ private MetadataResolver metadataResolver;
+
+ @Requirement
+ private SyncContextFactory syncContextFactory;
+
+ @Requirement
+ private RepositoryEventDispatcher repositoryEventDispatcher;
+
+ public DefaultVersionRangeResolver()
+ {
+ // enable default constructor
+ }
+
+ @Inject
+ DefaultVersionRangeResolver( MetadataResolver metadataResolver, SyncContextFactory syncContextFactory,
+ RepositoryEventDispatcher repositoryEventDispatcher, LoggerFactory loggerFactory )
+ {
+ setMetadataResolver( metadataResolver );
+ setSyncContextFactory( syncContextFactory );
+ setLoggerFactory( loggerFactory );
+ setRepositoryEventDispatcher( repositoryEventDispatcher );
+ }
+
+ public void initService( ServiceLocator locator )
+ {
+ setLoggerFactory( locator.getService( LoggerFactory.class ) );
+ setMetadataResolver( locator.getService( MetadataResolver.class ) );
+ setSyncContextFactory( locator.getService( SyncContextFactory.class ) );
+ setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) );
+ }
+
+ public DefaultVersionRangeResolver setLoggerFactory( LoggerFactory loggerFactory )
+ {
+ this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
+ return this;
+ }
+
+ void setLogger( LoggerFactory loggerFactory )
+ {
+ // plexus support
+ setLoggerFactory( loggerFactory );
+ }
+
+ public DefaultVersionRangeResolver setMetadataResolver( MetadataResolver metadataResolver )
+ {
+ if ( metadataResolver == null )
+ {
+ throw new IllegalArgumentException( "metadata resolver has not been specified" );
+ }
+ this.metadataResolver = metadataResolver;
+ return this;
+ }
+
+ public DefaultVersionRangeResolver setSyncContextFactory( SyncContextFactory syncContextFactory )
+ {
+ if ( syncContextFactory == null )
+ {
+ throw new IllegalArgumentException( "sync context factory has not been specified" );
+ }
+ this.syncContextFactory = syncContextFactory;
+ return this;
+ }
+
+ public DefaultVersionRangeResolver setRepositoryEventDispatcher( RepositoryEventDispatcher red )
+ {
+ if ( red == null )
+ {
+ throw new IllegalArgumentException( "repository event dispatcher has not been specified" );
+ }
+ this.repositoryEventDispatcher = red;
+ return this;
+ }
+
+ public VersionRangeResult resolveVersionRange( RepositorySystemSession session, VersionRangeRequest request )
+ throws VersionRangeResolutionException
+ {
+ VersionRangeResult result = new VersionRangeResult( request );
+
+ VersionScheme versionScheme = new GenericVersionScheme();
+
+ VersionConstraint versionConstraint;
+ try
+ {
+ versionConstraint = versionScheme.parseVersionConstraint( request.getArtifact().getVersion() );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ result.addException( e );
+ throw new VersionRangeResolutionException( result );
+ }
+
+ result.setVersionConstraint( versionConstraint );
+
+ if ( versionConstraint.getRange() == null )
+ {
+ result.addVersion( versionConstraint.getVersion() );
+ }
+ else
+ {
+ Map<String, ArtifactRepository> versionIndex = getVersions( session, result, request );
+
+ List<Version> versions = new ArrayList<Version>();
+ for ( Map.Entry<String, ArtifactRepository> v : versionIndex.entrySet() )
+ {
+ try
+ {
+ Version ver = versionScheme.parseVersion( v.getKey() );
+ if ( versionConstraint.containsVersion( ver ) )
+ {
+ versions.add( ver );
+ result.setRepository( ver, v.getValue() );
+ }
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ result.addException( e );
+ }
+ }
+
+ Collections.sort( versions );
+ result.setVersions( versions );
+ }
+
+ return result;
+ }
+
+ private Map<String, ArtifactRepository> getVersions( RepositorySystemSession session, VersionRangeResult result,
+ VersionRangeRequest request )
+ {
+ RequestTrace trace = RequestTrace.newChild( request.getTrace(), request );
+
+ Map<String, ArtifactRepository> versionIndex = new HashMap<String, ArtifactRepository>();
+
+ Metadata metadata =
+ new DefaultMetadata( request.getArtifact().getGroupId(), request.getArtifact().getArtifactId(),
+ MAVEN_METADATA_XML, Metadata.Nature.RELEASE_OR_SNAPSHOT );
+
+ List<MetadataRequest> metadataRequests = new ArrayList<MetadataRequest>( request.getRepositories().size() );
+
+ metadataRequests.add( new MetadataRequest( metadata, null, request.getRequestContext() ) );
+
+ for ( RemoteRepository repository : request.getRepositories() )
+ {
+ MetadataRequest metadataRequest = new MetadataRequest( metadata, repository, request.getRequestContext() );
+ metadataRequest.setDeleteLocalCopyIfMissing( true );
+ metadataRequest.setTrace( trace );
+ metadataRequests.add( metadataRequest );
+ }
+
+ List<MetadataResult> metadataResults = metadataResolver.resolveMetadata( session, metadataRequests );
+
+ WorkspaceReader workspace = session.getWorkspaceReader();
+ if ( workspace != null )
+ {
+ List<String> versions = workspace.findVersions( request.getArtifact() );
+ for ( String version : versions )
+ {
+ versionIndex.put( version, workspace.getRepository() );
+ }
+ }
+
+ for ( MetadataResult metadataResult : metadataResults )
+ {
+ result.addException( metadataResult.getException() );
+
+ ArtifactRepository repository = metadataResult.getRequest().getRepository();
+ if ( repository == null )
+ {
+ repository = session.getLocalRepository();
+ }
+
+ Versioning versioning = readVersions( session, trace, metadataResult.getMetadata(), repository, result );
+ for ( String version : versioning.getVersions() )
+ {
+ if ( !versionIndex.containsKey( version ) )
+ {
+ versionIndex.put( version, repository );
+ }
+ }
+ }
+
+ return versionIndex;
+ }
+
+ private Versioning readVersions( RepositorySystemSession session, RequestTrace trace, Metadata metadata,
+ ArtifactRepository repository, VersionRangeResult result )
+ {
+ Versioning versioning = null;
+
+ FileInputStream fis = null;
+ try
+ {
+ if ( metadata != null )
+ {
+ SyncContext syncContext = syncContextFactory.newInstance( session, true );
+
+ try
+ {
+ syncContext.acquire( null, Collections.singleton( metadata ) );
+
+ if ( metadata.getFile() != null && metadata.getFile().exists() )
+ {
+ fis = new FileInputStream( metadata.getFile() );
+ org.apache.maven.artifact.repository.metadata.Metadata m =
+ new MetadataXpp3Reader().read( fis, false );
+ versioning = m.getVersioning();
+ }
+ }
+ finally
+ {
+ syncContext.close();
+ }
+ }
+ }
+ catch ( Exception e )
+ {
+ invalidMetadata( session, trace, metadata, repository, e );
+ result.addException( e );
+ }
+ finally
+ {
+ IOUtil.close( fis );
+ }
+
+ return ( versioning != null ) ? versioning : new Versioning();
+ }
+
+ private void invalidMetadata( RepositorySystemSession session, RequestTrace trace, Metadata metadata,
+ ArtifactRepository repository, Exception exception )
+ {
+ RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.METADATA_INVALID );
+ event.setTrace( trace );
+ event.setMetadata( metadata );
+ event.setException( exception );
+ event.setRepository( repository );
+
+ repositoryEventDispatcher.dispatch( event.build() );
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java
new file mode 100644
index 00000000..d722644e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java
@@ -0,0 +1,636 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.maven.artifact.repository.metadata.Snapshot;
+import org.apache.maven.artifact.repository.metadata.SnapshotVersion;
+import org.apache.maven.artifact.repository.metadata.Versioning;
+import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.StringUtils;
+import org.eclipse.aether.RepositoryCache;
+import org.eclipse.aether.RepositoryEvent.EventType;
+import org.eclipse.aether.RepositoryEvent;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.RequestTrace;
+import org.eclipse.aether.SyncContext;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.impl.MetadataResolver;
+import org.eclipse.aether.impl.RepositoryEventDispatcher;
+import org.eclipse.aether.impl.SyncContextFactory;
+import org.eclipse.aether.impl.VersionResolver;
+import org.eclipse.aether.internal.impl.CacheUtils;
+import org.eclipse.aether.metadata.DefaultMetadata;
+import org.eclipse.aether.metadata.Metadata;
+import org.eclipse.aether.repository.ArtifactRepository;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.repository.WorkspaceReader;
+import org.eclipse.aether.repository.WorkspaceRepository;
+import org.eclipse.aether.resolution.MetadataRequest;
+import org.eclipse.aether.resolution.MetadataResult;
+import org.eclipse.aether.resolution.VersionRequest;
+import org.eclipse.aether.resolution.VersionResolutionException;
+import org.eclipse.aether.resolution.VersionResult;
+import org.eclipse.aether.spi.locator.Service;
+import org.eclipse.aether.spi.locator.ServiceLocator;
+import org.eclipse.aether.spi.log.Logger;
+import org.eclipse.aether.spi.log.LoggerFactory;
+import org.eclipse.aether.spi.log.NullLoggerFactory;
+import org.eclipse.aether.util.ConfigUtils;
+
+/**
+ * @author Benjamin Bentmann
+ */
+@Named
+@Component( role = VersionResolver.class )
+public class DefaultVersionResolver
+ implements VersionResolver, Service
+{
+
+ private static final String MAVEN_METADATA_XML = "maven-metadata.xml";
+
+ private static final String RELEASE = "RELEASE";
+
+ private static final String LATEST = "LATEST";
+
+ private static final String SNAPSHOT = "SNAPSHOT";
+
+ @SuppressWarnings( "unused" )
+ @Requirement( role = LoggerFactory.class )
+ private Logger logger = NullLoggerFactory.LOGGER;
+
+ @Requirement
+ private MetadataResolver metadataResolver;
+
+ @Requirement
+ private SyncContextFactory syncContextFactory;
+
+ @Requirement
+ private RepositoryEventDispatcher repositoryEventDispatcher;
+
+ public DefaultVersionResolver()
+ {
+ // enable no-arg constructor
+ }
+
+ @Inject
+ DefaultVersionResolver( MetadataResolver metadataResolver, SyncContextFactory syncContextFactory,
+ RepositoryEventDispatcher repositoryEventDispatcher, LoggerFactory loggerFactory )
+ {
+ setMetadataResolver( metadataResolver );
+ setSyncContextFactory( syncContextFactory );
+ setLoggerFactory( loggerFactory );
+ setRepositoryEventDispatcher( repositoryEventDispatcher );
+ }
+
+ public void initService( ServiceLocator locator )
+ {
+ setLoggerFactory( locator.getService( LoggerFactory.class ) );
+ setMetadataResolver( locator.getService( MetadataResolver.class ) );
+ setSyncContextFactory( locator.getService( SyncContextFactory.class ) );
+ setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) );
+ }
+
+ public DefaultVersionResolver setLoggerFactory( LoggerFactory loggerFactory )
+ {
+ this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
+ return this;
+ }
+
+ void setLogger( LoggerFactory loggerFactory )
+ {
+ // plexus support
+ setLoggerFactory( loggerFactory );
+ }
+
+ public DefaultVersionResolver setMetadataResolver( MetadataResolver metadataResolver )
+ {
+ if ( metadataResolver == null )
+ {
+ throw new IllegalArgumentException( "metadata resolver has not been specified" );
+ }
+ this.metadataResolver = metadataResolver;
+ return this;
+ }
+
+ public DefaultVersionResolver setSyncContextFactory( SyncContextFactory syncContextFactory )
+ {
+ if ( syncContextFactory == null )
+ {
+ throw new IllegalArgumentException( "sync context factory has not been specified" );
+ }
+ this.syncContextFactory = syncContextFactory;
+ return this;
+ }
+
+ public DefaultVersionResolver setRepositoryEventDispatcher( RepositoryEventDispatcher repositoryEventDispatcher )
+ {
+ if ( repositoryEventDispatcher == null )
+ {
+ throw new IllegalArgumentException( "repository event dispatcher has not been specified" );
+ }
+ this.repositoryEventDispatcher = repositoryEventDispatcher;
+ return this;
+ }
+
+ public VersionResult resolveVersion( RepositorySystemSession session, VersionRequest request )
+ throws VersionResolutionException
+ {
+ RequestTrace trace = RequestTrace.newChild( request.getTrace(), request );
+
+ Artifact artifact = request.getArtifact();
+
+ String version = artifact.getVersion();
+
+ VersionResult result = new VersionResult( request );
+
+ Key cacheKey = null;
+ RepositoryCache cache = session.getCache();
+ if ( cache != null && !ConfigUtils.getBoolean( session, false, "aether.versionResolver.noCache" ) )
+ {
+ cacheKey = new Key( session, request );
+
+ Object obj = cache.get( session, cacheKey );
+ if ( obj instanceof Record )
+ {
+ Record record = (Record) obj;
+ result.setVersion( record.version );
+ result.setRepository( CacheUtils.getRepository( session, request.getRepositories(), record.repoClass,
+ record.repoId ) );
+ return result;
+ }
+ }
+
+ Metadata metadata;
+
+ if ( RELEASE.equals( version ) )
+ {
+ metadata =
+ new DefaultMetadata( artifact.getGroupId(), artifact.getArtifactId(), MAVEN_METADATA_XML,
+ Metadata.Nature.RELEASE );
+ }
+ else if ( LATEST.equals( version ) )
+ {
+ metadata =
+ new DefaultMetadata( artifact.getGroupId(), artifact.getArtifactId(), MAVEN_METADATA_XML,
+ Metadata.Nature.RELEASE_OR_SNAPSHOT );
+ }
+ else if ( version.endsWith( SNAPSHOT ) )
+ {
+ WorkspaceReader workspace = session.getWorkspaceReader();
+ if ( workspace != null && workspace.findVersions( artifact ).contains( version ) )
+ {
+ metadata = null;
+ result.setRepository( workspace.getRepository() );
+ }
+ else
+ {
+ metadata =
+ new DefaultMetadata( artifact.getGroupId(), artifact.getArtifactId(), version, MAVEN_METADATA_XML,
+ Metadata.Nature.SNAPSHOT );
+ }
+ }
+ else
+ {
+ metadata = null;
+ }
+
+ if ( metadata == null )
+ {
+ result.setVersion( version );
+ }
+ else
+ {
+ List<MetadataRequest> metadataReqs = new ArrayList<MetadataRequest>( request.getRepositories().size() );
+
+ metadataReqs.add( new MetadataRequest( metadata, null, request.getRequestContext() ) );
+
+ for ( RemoteRepository repository : request.getRepositories() )
+ {
+ MetadataRequest metadataRequest =
+ new MetadataRequest( metadata, repository, request.getRequestContext() );
+ metadataRequest.setDeleteLocalCopyIfMissing( true );
+ metadataRequest.setFavorLocalRepository( true );
+ metadataRequest.setTrace( trace );
+ metadataReqs.add( metadataRequest );
+ }
+
+ List<MetadataResult> metadataResults = metadataResolver.resolveMetadata( session, metadataReqs );
+
+ Map<String, VersionInfo> infos = new HashMap<String, VersionInfo>();
+
+ for ( MetadataResult metadataResult : metadataResults )
+ {
+ result.addException( metadataResult.getException() );
+
+ ArtifactRepository repository = metadataResult.getRequest().getRepository();
+ if ( repository == null )
+ {
+ repository = session.getLocalRepository();
+ }
+
+ Versioning v = readVersions( session, trace, metadataResult.getMetadata(), repository, result );
+ merge( artifact, infos, v, repository );
+ }
+
+ if ( RELEASE.equals( version ) )
+ {
+ resolve( result, infos, RELEASE );
+ }
+ else if ( LATEST.equals( version ) )
+ {
+ if ( !resolve( result, infos, LATEST ) )
+ {
+ resolve( result, infos, RELEASE );
+ }
+
+ if ( result.getVersion() != null && result.getVersion().endsWith( SNAPSHOT ) )
+ {
+ VersionRequest subRequest = new VersionRequest();
+ subRequest.setArtifact( artifact.setVersion( result.getVersion() ) );
+ if ( result.getRepository() instanceof RemoteRepository )
+ {
+ RemoteRepository r = (RemoteRepository) result.getRepository();
+ subRequest.setRepositories( Collections.singletonList( r ) );
+ }
+ else
+ {
+ subRequest.setRepositories( request.getRepositories() );
+ }
+ VersionResult subResult = resolveVersion( session, subRequest );
+ result.setVersion( subResult.getVersion() );
+ result.setRepository( subResult.getRepository() );
+ for ( Exception exception : subResult.getExceptions() )
+ {
+ result.addException( exception );
+ }
+ }
+ }
+ else
+ {
+ String key = SNAPSHOT + getKey( artifact.getClassifier(), artifact.getExtension() );
+ merge( infos, SNAPSHOT, key );
+ if ( !resolve( result, infos, key ) )
+ {
+ result.setVersion( version );
+ }
+ }
+
+ if ( StringUtils.isEmpty( result.getVersion() ) )
+ {
+ throw new VersionResolutionException( result );
+ }
+ }
+
+ if ( cacheKey != null && metadata != null && isSafelyCacheable( session, artifact ) )
+ {
+ cache.put( session, cacheKey, new Record( result.getVersion(), result.getRepository() ) );
+ }
+
+ return result;
+ }
+
+ private boolean resolve( VersionResult result, Map<String, VersionInfo> infos, String key )
+ {
+ VersionInfo info = infos.get( key );
+ if ( info != null )
+ {
+ result.setVersion( info.version );
+ result.setRepository( info.repository );
+ }
+ return info != null;
+ }
+
+ private Versioning readVersions( RepositorySystemSession session, RequestTrace trace, Metadata metadata,
+ ArtifactRepository repository, VersionResult result )
+ {
+ Versioning versioning = null;
+
+ FileInputStream fis = null;
+ try
+ {
+ if ( metadata != null )
+ {
+ SyncContext syncContext = syncContextFactory.newInstance( session, true );
+
+ try
+ {
+ syncContext.acquire( null, Collections.singleton( metadata ) );
+
+ if ( metadata.getFile() != null && metadata.getFile().exists() )
+ {
+ fis = new FileInputStream( metadata.getFile() );
+ org.apache.maven.artifact.repository.metadata.Metadata m =
+ new MetadataXpp3Reader().read( fis, false );
+ versioning = m.getVersioning();
+
+ /*
+ * NOTE: Users occasionally misuse the id "local" for remote repos which screws up the metadata
+ * of the local repository. This is especially troublesome during snapshot resolution so we try
+ * to handle that gracefully.
+ */
+ if ( versioning != null && repository instanceof LocalRepository )
+ {
+ if ( versioning.getSnapshot() != null && versioning.getSnapshot().getBuildNumber() > 0 )
+ {
+ Versioning repaired = new Versioning();
+ repaired.setLastUpdated( versioning.getLastUpdated() );
+ Snapshot snapshot = new Snapshot();
+ snapshot.setLocalCopy( true );
+ repaired.setSnapshot( snapshot );
+ versioning = repaired;
+
+ throw new IOException( "Snapshot information corrupted with remote repository data"
+ + ", please verify that no remote repository uses the id '" + repository.getId()
+ + "'" );
+ }
+ }
+ }
+ }
+ finally
+ {
+ syncContext.close();
+ }
+ }
+ }
+ catch ( Exception e )
+ {
+ invalidMetadata( session, trace, metadata, repository, e );
+ result.addException( e );
+ }
+ finally
+ {
+ IOUtil.close( fis );
+ }
+
+ return ( versioning != null ) ? versioning : new Versioning();
+ }
+
+ private void invalidMetadata( RepositorySystemSession session, RequestTrace trace, Metadata metadata,
+ ArtifactRepository repository, Exception exception )
+ {
+ RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.METADATA_INVALID );
+ event.setTrace( trace );
+ event.setMetadata( metadata );
+ event.setException( exception );
+ event.setRepository( repository );
+
+ repositoryEventDispatcher.dispatch( event.build() );
+ }
+
+ private void merge( Artifact artifact, Map<String, VersionInfo> infos, Versioning versioning,
+ ArtifactRepository repository )
+ {
+ if ( StringUtils.isNotEmpty( versioning.getRelease() ) )
+ {
+ merge( RELEASE, infos, versioning.getLastUpdated(), versioning.getRelease(), repository );
+ }
+
+ if ( StringUtils.isNotEmpty( versioning.getLatest() ) )
+ {
+ merge( LATEST, infos, versioning.getLastUpdated(), versioning.getLatest(), repository );
+ }
+
+ for ( SnapshotVersion sv : versioning.getSnapshotVersions() )
+ {
+ if ( StringUtils.isNotEmpty( sv.getVersion() ) )
+ {
+ String key = getKey( sv.getClassifier(), sv.getExtension() );
+ merge( SNAPSHOT + key, infos, sv.getUpdated(), sv.getVersion(), repository );
+ }
+ }
+
+ Snapshot snapshot = versioning.getSnapshot();
+ if ( snapshot != null && versioning.getSnapshotVersions().isEmpty() )
+ {
+ String version = artifact.getVersion();
+ if ( snapshot.getTimestamp() != null && snapshot.getBuildNumber() > 0 )
+ {
+ String qualifier = snapshot.getTimestamp() + '-' + snapshot.getBuildNumber();
+ version = version.substring( 0, version.length() - SNAPSHOT.length() ) + qualifier;
+ }
+ merge( SNAPSHOT, infos, versioning.getLastUpdated(), version, repository );
+ }
+ }
+
+ private void merge( String key, Map<String, VersionInfo> infos, String timestamp, String version,
+ ArtifactRepository repository )
+ {
+ VersionInfo info = infos.get( key );
+ if ( info == null )
+ {
+ info = new VersionInfo( timestamp, version, repository );
+ infos.put( key, info );
+ }
+ else if ( info.isOutdated( timestamp ) )
+ {
+ info.version = version;
+ info.repository = repository;
+ info.timestamp = timestamp;
+ }
+ }
+
+ private void merge( Map<String, VersionInfo> infos, String srcKey, String dstKey )
+ {
+ VersionInfo srcInfo = infos.get( srcKey );
+ VersionInfo dstInfo = infos.get( dstKey );
+
+ if ( dstInfo == null
+ || ( srcInfo != null && dstInfo.isOutdated( srcInfo.timestamp )
+ && srcInfo.repository != dstInfo.repository ) )
+ {
+ infos.put( dstKey, srcInfo );
+ }
+ }
+
+ private String getKey( String classifier, String extension )
+ {
+ return StringUtils.clean( classifier ) + ':' + StringUtils.clean( extension );
+ }
+
+ private boolean isSafelyCacheable( RepositorySystemSession session, Artifact artifact )
+ {
+ /*
+ * The workspace/reactor is in flux so we better not assume definitive information for any of its
+ * artifacts/projects.
+ */
+
+ WorkspaceReader workspace = session.getWorkspaceReader();
+ if ( workspace == null )
+ {
+ return true;
+ }
+
+ Artifact pomArtifact = ArtifactDescriptorUtils.toPomArtifact( artifact );
+
+ return workspace.findArtifact( pomArtifact ) == null;
+ }
+
+ private static class VersionInfo
+ {
+
+ String timestamp;
+
+ String version;
+
+ ArtifactRepository repository;
+
+ public VersionInfo( String timestamp, String version, ArtifactRepository repository )
+ {
+ this.timestamp = ( timestamp != null ) ? timestamp : "";
+ this.version = version;
+ this.repository = repository;
+ }
+
+ public boolean isOutdated( String timestamp )
+ {
+ return timestamp != null && timestamp.compareTo( this.timestamp ) > 0;
+ }
+
+ }
+
+ private static class Key
+ {
+
+ private final String groupId;
+
+ private final String artifactId;
+
+ private final String classifier;
+
+ private final String extension;
+
+ private final String version;
+
+ private final String context;
+
+ private final File localRepo;
+
+ private final WorkspaceRepository workspace;
+
+ private final List<RemoteRepository> repositories;
+
+ private final int hashCode;
+
+ public Key( RepositorySystemSession session, VersionRequest request )
+ {
+ Artifact artifact = request.getArtifact();
+ groupId = artifact.getGroupId();
+ artifactId = artifact.getArtifactId();
+ classifier = artifact.getClassifier();
+ extension = artifact.getExtension();
+ version = artifact.getVersion();
+ localRepo = session.getLocalRepository().getBasedir();
+ workspace = CacheUtils.getWorkspace( session );
+ repositories = new ArrayList<RemoteRepository>( request.getRepositories().size() );
+ boolean repoMan = false;
+ for ( RemoteRepository repository : request.getRepositories() )
+ {
+ if ( repository.isRepositoryManager() )
+ {
+ repoMan = true;
+ repositories.addAll( repository.getMirroredRepositories() );
+ }
+ else
+ {
+ repositories.add( repository );
+ }
+ }
+ context = repoMan ? request.getRequestContext() : "";
+
+ int hash = 17;
+ hash = hash * 31 + groupId.hashCode();
+ hash = hash * 31 + artifactId.hashCode();
+ hash = hash * 31 + classifier.hashCode();
+ hash = hash * 31 + extension.hashCode();
+ hash = hash * 31 + version.hashCode();
+ hash = hash * 31 + localRepo.hashCode();
+ hash = hash * 31 + CacheUtils.repositoriesHashCode( repositories );
+ hashCode = hash;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( obj == this )
+ {
+ return true;
+ }
+ else if ( obj == null || !getClass().equals( obj.getClass() ) )
+ {
+ return false;
+ }
+
+ Key that = (Key) obj;
+ return artifactId.equals( that.artifactId ) && groupId.equals( that.groupId )
+ && classifier.equals( that.classifier ) && extension.equals( that.extension )
+ && version.equals( that.version ) && context.equals( that.context )
+ && localRepo.equals( that.localRepo ) && CacheUtils.eq( workspace, that.workspace )
+ && CacheUtils.repositoriesEquals( repositories, that.repositories );
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return hashCode;
+ }
+
+ }
+
+ private static class Record
+ {
+ final String version;
+
+ final String repoId;
+
+ final Class<?> repoClass;
+
+ public Record( String version, ArtifactRepository repository )
+ {
+ this.version = version;
+ if ( repository != null )
+ {
+ repoId = repository.getId();
+ repoClass = repository.getClass();
+ }
+ else
+ {
+ repoId = null;
+ repoClass = null;
+ }
+ }
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java
new file mode 100644
index 00000000..a22d07d2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java
@@ -0,0 +1,163 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.repository.metadata.Snapshot;
+import org.apache.maven.artifact.repository.metadata.SnapshotVersion;
+import org.apache.maven.artifact.repository.metadata.Versioning;
+import org.eclipse.aether.artifact.Artifact;
+
+/**
+ * @author Benjamin Bentmann
+ */
+final class LocalSnapshotMetadata
+ extends MavenMetadata
+{
+
+ private final Collection<Artifact> artifacts = new ArrayList<Artifact>();
+
+ private final boolean legacyFormat;
+
+ public LocalSnapshotMetadata( Artifact artifact, boolean legacyFormat )
+ {
+ super( createMetadata( artifact, legacyFormat ), null );
+ this.legacyFormat = legacyFormat;
+ }
+
+ public LocalSnapshotMetadata( Metadata metadata, File file, boolean legacyFormat )
+ {
+ super( metadata, file );
+ this.legacyFormat = legacyFormat;
+ }
+
+ private static Metadata createMetadata( Artifact artifact, boolean legacyFormat )
+ {
+ Snapshot snapshot = new Snapshot();
+ snapshot.setLocalCopy( true );
+ Versioning versioning = new Versioning();
+ versioning.setSnapshot( snapshot );
+
+ Metadata metadata = new Metadata();
+ metadata.setVersioning( versioning );
+ metadata.setGroupId( artifact.getGroupId() );
+ metadata.setArtifactId( artifact.getArtifactId() );
+ metadata.setVersion( artifact.getBaseVersion() );
+
+ if ( !legacyFormat )
+ {
+ metadata.setModelVersion( "1.1.0" );
+ }
+
+ return metadata;
+ }
+
+ public void bind( Artifact artifact )
+ {
+ artifacts.add( artifact );
+ }
+
+ public MavenMetadata setFile( File file )
+ {
+ return new LocalSnapshotMetadata( metadata, file, legacyFormat );
+ }
+
+ public Object getKey()
+ {
+ return getGroupId() + ':' + getArtifactId() + ':' + getVersion();
+ }
+
+ public static Object getKey( Artifact artifact )
+ {
+ return artifact.getGroupId() + ':' + artifact.getArtifactId() + ':' + artifact.getBaseVersion();
+ }
+
+ @Override
+ protected void merge( Metadata recessive )
+ {
+ metadata.getVersioning().updateTimestamp();
+
+ if ( !legacyFormat )
+ {
+ String lastUpdated = metadata.getVersioning().getLastUpdated();
+
+ Map<String, SnapshotVersion> versions = new LinkedHashMap<String, SnapshotVersion>();
+
+ for ( Artifact artifact : artifacts )
+ {
+ SnapshotVersion sv = new SnapshotVersion();
+ sv.setClassifier( artifact.getClassifier() );
+ sv.setExtension( artifact.getExtension() );
+ sv.setVersion( getVersion() );
+ sv.setUpdated( lastUpdated );
+ versions.put( getKey( sv.getClassifier(), sv.getExtension() ), sv );
+ }
+
+ Versioning versioning = recessive.getVersioning();
+ if ( versioning != null )
+ {
+ for ( SnapshotVersion sv : versioning.getSnapshotVersions() )
+ {
+ String key = getKey( sv.getClassifier(), sv.getExtension() );
+ if ( !versions.containsKey( key ) )
+ {
+ versions.put( key, sv );
+ }
+ }
+ }
+
+ metadata.getVersioning().setSnapshotVersions( new ArrayList<SnapshotVersion>( versions.values() ) );
+ }
+
+ artifacts.clear();
+ }
+
+ private String getKey( String classifier, String extension )
+ {
+ return classifier + ':' + extension;
+ }
+
+ public String getGroupId()
+ {
+ return metadata.getGroupId();
+ }
+
+ public String getArtifactId()
+ {
+ return metadata.getArtifactId();
+ }
+
+ public String getVersion()
+ {
+ return metadata.getVersion();
+ }
+
+ public Nature getNature()
+ {
+ return Nature.SNAPSHOT;
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadataGenerator.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadataGenerator.java
new file mode 100644
index 00000000..ee7c10b0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadataGenerator.java
@@ -0,0 +1,82 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.impl.MetadataGenerator;
+import org.eclipse.aether.installation.InstallRequest;
+import org.eclipse.aether.metadata.Metadata;
+import org.eclipse.aether.util.ConfigUtils;
+
+/**
+ * @author Benjamin Bentmann
+ */
+class LocalSnapshotMetadataGenerator
+ implements MetadataGenerator
+{
+
+ private Map<Object, LocalSnapshotMetadata> snapshots;
+
+ private final boolean legacyFormat;
+
+ public LocalSnapshotMetadataGenerator( RepositorySystemSession session, InstallRequest request )
+ {
+ legacyFormat = ConfigUtils.getBoolean( session.getConfigProperties(), false, "maven.metadata.legacy" );
+
+ snapshots = new LinkedHashMap<Object, LocalSnapshotMetadata>();
+ }
+
+ public Collection<? extends Metadata> prepare( Collection<? extends Artifact> artifacts )
+ {
+ for ( Artifact artifact : artifacts )
+ {
+ if ( artifact.isSnapshot() )
+ {
+ Object key = LocalSnapshotMetadata.getKey( artifact );
+ LocalSnapshotMetadata snapshotMetadata = snapshots.get( key );
+ if ( snapshotMetadata == null )
+ {
+ snapshotMetadata = new LocalSnapshotMetadata( artifact, legacyFormat );
+ snapshots.put( key, snapshotMetadata );
+ }
+ snapshotMetadata.bind( artifact );
+ }
+ }
+
+ return Collections.emptyList();
+ }
+
+ public Artifact transformArtifact( Artifact artifact )
+ {
+ return artifact;
+ }
+
+ public Collection<? extends Metadata> finish( Collection<? extends Artifact> artifacts )
+ {
+ return snapshots.values();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenAetherModule.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenAetherModule.java
new file mode 100644
index 00000000..fa81f611
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenAetherModule.java
@@ -0,0 +1,76 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.apache.maven.model.building.DefaultModelBuilderFactory;
+import org.apache.maven.model.building.ModelBuilder;
+import org.eclipse.aether.impl.AetherModule;
+import org.eclipse.aether.impl.ArtifactDescriptorReader;
+import org.eclipse.aether.impl.MetadataGeneratorFactory;
+import org.eclipse.aether.impl.VersionRangeResolver;
+import org.eclipse.aether.impl.VersionResolver;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+import com.google.inject.name.Names;
+
+public final class MavenAetherModule
+ extends AbstractModule
+{
+
+ @Override
+ protected void configure()
+ {
+ install( new AetherModule() );
+ bind( ArtifactDescriptorReader.class ) //
+ .to( DefaultArtifactDescriptorReader.class ).in( Singleton.class );
+ bind( VersionResolver.class ) //
+ .to( DefaultVersionResolver.class ).in( Singleton.class );
+ bind( VersionRangeResolver.class ) //
+ .to( DefaultVersionRangeResolver.class ).in( Singleton.class );
+ bind( MetadataGeneratorFactory.class ).annotatedWith( Names.named( "snapshot" ) ) //
+ .to( SnapshotMetadataGeneratorFactory.class ).in( Singleton.class );
+ bind( MetadataGeneratorFactory.class ).annotatedWith( Names.named( "versions" ) ) //
+ .to( VersionsMetadataGeneratorFactory.class ).in( Singleton.class );
+ bind( ModelBuilder.class ) //
+ .toInstance( new DefaultModelBuilderFactory().newInstance() );
+ }
+
+ @Provides
+ @Singleton
+ Set<MetadataGeneratorFactory> provideMetadataGeneratorFactories( @Named( "snapshot" )
+ MetadataGeneratorFactory snapshot,
+ @Named( "versions" )
+ MetadataGeneratorFactory versions )
+ {
+ Set<MetadataGeneratorFactory> factories = new HashSet<MetadataGeneratorFactory>();
+ factories.add( snapshot );
+ factories.add( versions );
+ return Collections.unmodifiableSet( factories );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenMetadata.java
new file mode 100644
index 00000000..bdf28783
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenMetadata.java
@@ -0,0 +1,150 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.Collections;
+import java.util.Map;
+
+import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
+import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.WriterFactory;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.eclipse.aether.RepositoryException;
+import org.eclipse.aether.metadata.AbstractMetadata;
+import org.eclipse.aether.metadata.MergeableMetadata;
+
+/**
+ * @author Benjamin Bentmann
+ */
+abstract class MavenMetadata
+ extends AbstractMetadata
+ implements MergeableMetadata
+{
+
+ static final String MAVEN_METADATA_XML = "maven-metadata.xml";
+
+ private final File file;
+
+ protected Metadata metadata;
+
+ private boolean merged;
+
+ protected MavenMetadata( Metadata metadata, File file )
+ {
+ this.metadata = metadata;
+ this.file = file;
+ }
+
+ public String getType()
+ {
+ return MAVEN_METADATA_XML;
+ }
+
+ public File getFile()
+ {
+ return file;
+ }
+
+ public void merge( File existing, File result )
+ throws RepositoryException
+ {
+ Metadata recessive = read( existing );
+
+ merge( recessive );
+
+ write( result, metadata );
+
+ merged = true;
+ }
+
+ public boolean isMerged()
+ {
+ return merged;
+ }
+
+ protected abstract void merge( Metadata recessive );
+
+ static Metadata read( File metadataFile )
+ throws RepositoryException
+ {
+ if ( metadataFile.length() <= 0 )
+ {
+ return new Metadata();
+ }
+
+ Reader reader = null;
+ try
+ {
+ reader = ReaderFactory.newXmlReader( metadataFile );
+ return new MetadataXpp3Reader().read( reader, false );
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryException( "Could not read metadata " + metadataFile + ": " + e.getMessage(), e );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new RepositoryException( "Could not parse metadata " + metadataFile + ": " + e.getMessage(), e );
+ }
+ finally
+ {
+ IOUtil.close( reader );
+ }
+ }
+
+ private void write( File metadataFile, Metadata metadata )
+ throws RepositoryException
+ {
+ Writer writer = null;
+ try
+ {
+ metadataFile.getParentFile().mkdirs();
+ writer = WriterFactory.newXmlWriter( metadataFile );
+ new MetadataXpp3Writer().write( writer, metadata );
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryException( "Could not write metadata " + metadataFile + ": " + e.getMessage(), e );
+ }
+ finally
+ {
+ IOUtil.close( writer );
+ }
+ }
+
+ public Map<String, String> getProperties()
+ {
+ return Collections.emptyMap();
+ }
+
+ @Override
+ public org.eclipse.aether.metadata.Metadata setProperties( Map<String, String> properties )
+ {
+ return this;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java
new file mode 100644
index 00000000..5b240efe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java
@@ -0,0 +1,141 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Properties;
+
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.artifact.DefaultArtifactType;
+import org.eclipse.aether.collection.DependencyGraphTransformer;
+import org.eclipse.aether.collection.DependencyManager;
+import org.eclipse.aether.collection.DependencySelector;
+import org.eclipse.aether.collection.DependencyTraverser;
+import org.eclipse.aether.impl.ArtifactDescriptorReader;
+import org.eclipse.aether.impl.DefaultServiceLocator;
+import org.eclipse.aether.impl.MetadataGeneratorFactory;
+import org.eclipse.aether.impl.VersionRangeResolver;
+import org.eclipse.aether.impl.VersionResolver;
+import org.eclipse.aether.util.artifact.DefaultArtifactTypeRegistry;
+import org.eclipse.aether.util.graph.manager.ClassicDependencyManager;
+import org.eclipse.aether.util.graph.selector.AndDependencySelector;
+import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
+import org.eclipse.aether.util.graph.selector.OptionalDependencySelector;
+import org.eclipse.aether.util.graph.selector.ScopeDependencySelector;
+import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
+import org.eclipse.aether.util.graph.transformer.ConflictResolver;
+import org.eclipse.aether.util.graph.transformer.JavaDependencyContextRefiner;
+import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver;
+import org.eclipse.aether.util.graph.transformer.JavaScopeSelector;
+import org.eclipse.aether.util.graph.transformer.NearestVersionSelector;
+import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
+import org.eclipse.aether.util.graph.traverser.FatArtifactTraverser;
+import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy;
+
+/**
+ * A utility class to assist in setting up a Maven-like repository system. <em>Note:</em> This component is meant to
+ * assist those clients that employ the repository system outside of an IoC container, Maven plugins should instead
+ * always use regular dependency injection to acquire the repository system.
+ *
+ * @author Benjamin Bentmann
+ */
+public final class MavenRepositorySystemUtils
+{
+
+ private MavenRepositorySystemUtils()
+ {
+ // hide constructor
+ }
+
+ /**
+ * Creates a new service locator that already knows about all service implementations included in this library. To
+ * acquire a complete repository system, clients need to add some repository connectors for remote transfers.
+ *
+ * @return The new service locator, never {@code null}.
+ */
+ public static DefaultServiceLocator newServiceLocator()
+ {
+ DefaultServiceLocator locator = new DefaultServiceLocator();
+ locator.addService( ArtifactDescriptorReader.class, DefaultArtifactDescriptorReader.class );
+ locator.addService( VersionResolver.class, DefaultVersionResolver.class );
+ locator.addService( VersionRangeResolver.class, DefaultVersionRangeResolver.class );
+ locator.addService( MetadataGeneratorFactory.class, SnapshotMetadataGeneratorFactory.class );
+ locator.addService( MetadataGeneratorFactory.class, VersionsMetadataGeneratorFactory.class );
+ return locator;
+ }
+
+ /**
+ * Creates a new Maven-like repository system session by initializing the session with values typical for
+ * Maven-based resolution. In more detail, this method configures settings relevant for the processing of dependency
+ * graphs, most other settings remain at their generic default value. Use the various setters to further configure
+ * the session with authentication, mirror, proxy and other information required for your environment.
+ *
+ * @return The new repository system session, never {@code null}.
+ */
+ public static DefaultRepositorySystemSession newSession()
+ {
+ DefaultRepositorySystemSession session = new DefaultRepositorySystemSession();
+
+ DependencyTraverser depTraverser = new FatArtifactTraverser();
+ session.setDependencyTraverser( depTraverser );
+
+ DependencyManager depManager = new ClassicDependencyManager();
+ session.setDependencyManager( depManager );
+
+ DependencySelector depFilter =
+ new AndDependencySelector( new ScopeDependencySelector( "test", "provided" ),
+ new OptionalDependencySelector(), new ExclusionDependencySelector() );
+ session.setDependencySelector( depFilter );
+
+ DependencyGraphTransformer transformer =
+ new ConflictResolver( new NearestVersionSelector(), new JavaScopeSelector(),
+ new SimpleOptionalitySelector(), new JavaScopeDeriver() );
+ new ChainedDependencyGraphTransformer( transformer, new JavaDependencyContextRefiner() );
+ session.setDependencyGraphTransformer( transformer );
+
+ DefaultArtifactTypeRegistry stereotypes = new DefaultArtifactTypeRegistry();
+ stereotypes.add( new DefaultArtifactType( "pom" ) );
+ stereotypes.add( new DefaultArtifactType( "maven-plugin", "jar", "", "java" ) );
+ stereotypes.add( new DefaultArtifactType( "jar", "jar", "", "java" ) );
+ stereotypes.add( new DefaultArtifactType( "ejb", "jar", "", "java" ) );
+ stereotypes.add( new DefaultArtifactType( "ejb-client", "jar", "client", "java" ) );
+ stereotypes.add( new DefaultArtifactType( "test-jar", "jar", "tests", "java" ) );
+ stereotypes.add( new DefaultArtifactType( "javadoc", "jar", "javadoc", "java" ) );
+ stereotypes.add( new DefaultArtifactType( "java-source", "jar", "sources", "java", false, false ) );
+ stereotypes.add( new DefaultArtifactType( "war", "war", "", "java", false, true ) );
+ stereotypes.add( new DefaultArtifactType( "ear", "ear", "", "java", false, true ) );
+ stereotypes.add( new DefaultArtifactType( "rar", "rar", "", "java", false, true ) );
+ stereotypes.add( new DefaultArtifactType( "par", "par", "", "java", false, true ) );
+ session.setArtifactTypeRegistry( stereotypes );
+
+ session.setArtifactDescriptorPolicy( new SimpleArtifactDescriptorPolicy( true, true ) );
+
+ // MNG-5670 guard against ConcurrentModificationException
+ Properties sysProps = new Properties();
+ for ( String key : System.getProperties().stringPropertyNames() )
+ {
+ sysProps.put( key, System.getProperty( key ) );
+ }
+ session.setSystemProperties( sysProps );
+ session.setConfigProperties( sysProps );
+
+ return session;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenSnapshotMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenSnapshotMetadata.java
new file mode 100644
index 00000000..1e6f9097
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenSnapshotMetadata.java
@@ -0,0 +1,100 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.eclipse.aether.artifact.Artifact;
+
+/**
+ * @author Hervé Boutemy
+ */
+abstract class MavenSnapshotMetadata
+ extends MavenMetadata
+{
+ static final String SNAPSHOT = "SNAPSHOT";
+
+ protected final Collection<Artifact> artifacts = new ArrayList<Artifact>();
+
+ protected final boolean legacyFormat;
+
+ protected MavenSnapshotMetadata( Metadata metadata, File file, boolean legacyFormat )
+ {
+ super( metadata, file );
+ this.legacyFormat = legacyFormat;
+ }
+
+ protected static Metadata createRepositoryMetadata( Artifact artifact, boolean legacyFormat )
+ {
+ Metadata metadata = new Metadata();
+ if ( !legacyFormat )
+ {
+ metadata.setModelVersion( "1.1.0" );
+ }
+ metadata.setGroupId( artifact.getGroupId() );
+ metadata.setArtifactId( artifact.getArtifactId() );
+ metadata.setVersion( artifact.getBaseVersion() );
+
+ return metadata;
+ }
+
+ public void bind( Artifact artifact )
+ {
+ artifacts.add( artifact );
+ }
+
+ public Object getKey()
+ {
+ return getGroupId() + ':' + getArtifactId() + ':' + getVersion();
+ }
+
+ public static Object getKey( Artifact artifact )
+ {
+ return artifact.getGroupId() + ':' + artifact.getArtifactId() + ':' + artifact.getBaseVersion();
+ }
+
+ protected String getKey( String classifier, String extension )
+ {
+ return classifier + ':' + extension;
+ }
+
+ public String getGroupId()
+ {
+ return metadata.getGroupId();
+ }
+
+ public String getArtifactId()
+ {
+ return metadata.getArtifactId();
+ }
+
+ public String getVersion()
+ {
+ return metadata.getVersion();
+ }
+
+ public Nature getNature()
+ {
+ return Nature.SNAPSHOT;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenWorkspaceReader.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenWorkspaceReader.java
new file mode 100644
index 00000000..270cf588
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenWorkspaceReader.java
@@ -0,0 +1,32 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.repository.WorkspaceReader;
+
+public interface MavenWorkspaceReader
+ extends WorkspaceReader
+{
+
+ Model findModel( Artifact artifact );
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RelocatedArtifact.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RelocatedArtifact.java
new file mode 100644
index 00000000..958eb388
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RelocatedArtifact.java
@@ -0,0 +1,116 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Map;
+
+import org.eclipse.aether.artifact.AbstractArtifact;
+import org.eclipse.aether.artifact.Artifact;
+
+/**
+ * @author Benjamin Bentmann
+ */
+final class RelocatedArtifact
+ extends AbstractArtifact
+{
+
+ private final Artifact artifact;
+
+ private final String groupId;
+
+ private final String artifactId;
+
+ private final String version;
+
+ public RelocatedArtifact( Artifact artifact, String groupId, String artifactId, String version )
+ {
+ if ( artifact == null )
+ {
+ throw new IllegalArgumentException( "no artifact specified" );
+ }
+ this.artifact = artifact;
+ this.groupId = ( groupId != null && groupId.length() > 0 ) ? groupId : null;
+ this.artifactId = ( artifactId != null && artifactId.length() > 0 ) ? artifactId : null;
+ this.version = ( version != null && version.length() > 0 ) ? version : null;
+ }
+
+ public String getGroupId()
+ {
+ if ( groupId != null )
+ {
+ return groupId;
+ }
+ else
+ {
+ return artifact.getGroupId();
+ }
+ }
+
+ public String getArtifactId()
+ {
+ if ( artifactId != null )
+ {
+ return artifactId;
+ }
+ else
+ {
+ return artifact.getArtifactId();
+ }
+ }
+
+ public String getVersion()
+ {
+ if ( version != null )
+ {
+ return version;
+ }
+ else
+ {
+ return artifact.getVersion();
+ }
+ }
+
+ public String getClassifier()
+ {
+ return artifact.getClassifier();
+ }
+
+ public String getExtension()
+ {
+ return artifact.getExtension();
+ }
+
+ public File getFile()
+ {
+ return artifact.getFile();
+ }
+
+ public String getProperty( String key, String defaultValue )
+ {
+ return artifact.getProperty( key, defaultValue );
+ }
+
+ public Map<String, String> getProperties()
+ {
+ return artifact.getProperties();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java
new file mode 100644
index 00000000..4494cae6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java
@@ -0,0 +1,152 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.TimeZone;
+
+import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.repository.metadata.Snapshot;
+import org.apache.maven.artifact.repository.metadata.SnapshotVersion;
+import org.apache.maven.artifact.repository.metadata.Versioning;
+import org.eclipse.aether.artifact.Artifact;
+
+/**
+ * @author Benjamin Bentmann
+ */
+final class RemoteSnapshotMetadata
+ extends MavenSnapshotMetadata
+{
+
+ private final Map<String, SnapshotVersion> versions = new LinkedHashMap<String, SnapshotVersion>();
+
+ public RemoteSnapshotMetadata( Artifact artifact, boolean legacyFormat )
+ {
+ super( createRepositoryMetadata( artifact, legacyFormat ), null, legacyFormat );
+ }
+
+ private RemoteSnapshotMetadata( Metadata metadata, File file, boolean legacyFormat )
+ {
+ super( metadata, file, legacyFormat );
+ }
+
+ public MavenMetadata setFile( File file )
+ {
+ return new RemoteSnapshotMetadata( metadata, file, legacyFormat );
+ }
+
+ public String getExpandedVersion( Artifact artifact )
+ {
+ String key = getKey( artifact.getClassifier(), artifact.getExtension() );
+ return versions.get( key ).getVersion();
+ }
+
+ @Override
+ protected void merge( Metadata recessive )
+ {
+ Snapshot snapshot;
+ String lastUpdated;
+
+ if ( metadata.getVersioning() == null )
+ {
+ DateFormat utcDateFormatter = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
+ utcDateFormatter.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
+
+ snapshot = new Snapshot();
+ snapshot.setBuildNumber( getBuildNumber( recessive ) + 1 );
+ snapshot.setTimestamp( utcDateFormatter.format( new Date() ) );
+
+ Versioning versioning = new Versioning();
+ versioning.setSnapshot( snapshot );
+ versioning.setLastUpdated( snapshot.getTimestamp().replace( ".", "" ) );
+ lastUpdated = versioning.getLastUpdated();
+
+ metadata.setVersioning( versioning );
+ }
+ else
+ {
+ snapshot = metadata.getVersioning().getSnapshot();
+ lastUpdated = metadata.getVersioning().getLastUpdated();
+ }
+
+ for ( Artifact artifact : artifacts )
+ {
+ String version = artifact.getVersion();
+
+ if ( version.endsWith( SNAPSHOT ) )
+ {
+ String qualifier = snapshot.getTimestamp() + '-' + snapshot.getBuildNumber();
+ version = version.substring( 0, version.length() - SNAPSHOT.length() ) + qualifier;
+ }
+
+ SnapshotVersion sv = new SnapshotVersion();
+ sv.setClassifier( artifact.getClassifier() );
+ sv.setExtension( artifact.getExtension() );
+ sv.setVersion( version );
+ sv.setUpdated( lastUpdated );
+
+ versions.put( getKey( sv.getClassifier(), sv.getExtension() ), sv );
+ }
+
+ artifacts.clear();
+
+ Versioning versioning = recessive.getVersioning();
+ if ( versioning != null )
+ {
+ for ( SnapshotVersion sv : versioning.getSnapshotVersions() )
+ {
+ String key = getKey( sv.getClassifier(), sv.getExtension() );
+ if ( !versions.containsKey( key ) )
+ {
+ versions.put( key, sv );
+ }
+ }
+ }
+
+ if ( !legacyFormat )
+ {
+ metadata.getVersioning().setSnapshotVersions( new ArrayList<SnapshotVersion>( versions.values() ) );
+ }
+ }
+
+ private static int getBuildNumber( Metadata metadata )
+ {
+ int number = 0;
+
+ Versioning versioning = metadata.getVersioning();
+ if ( versioning != null )
+ {
+ Snapshot snapshot = versioning.getSnapshot();
+ if ( snapshot != null && snapshot.getBuildNumber() > 0 )
+ {
+ number = snapshot.getBuildNumber();
+ }
+ }
+
+ return number;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java
new file mode 100644
index 00000000..6cbeec55
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java
@@ -0,0 +1,107 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.deployment.DeployRequest;
+import org.eclipse.aether.impl.MetadataGenerator;
+import org.eclipse.aether.metadata.Metadata;
+import org.eclipse.aether.util.ConfigUtils;
+
+/**
+ * @author Benjamin Bentmann
+ */
+class RemoteSnapshotMetadataGenerator
+ implements MetadataGenerator
+{
+
+ private final Map<Object, RemoteSnapshotMetadata> snapshots;
+
+ private final boolean legacyFormat;
+
+ public RemoteSnapshotMetadataGenerator( RepositorySystemSession session, DeployRequest request )
+ {
+ legacyFormat = ConfigUtils.getBoolean( session.getConfigProperties(), false, "maven.metadata.legacy" );
+
+ snapshots = new LinkedHashMap<Object, RemoteSnapshotMetadata>();
+
+ /*
+ * NOTE: This should be considered a quirk to support interop with Maven's legacy ArtifactDeployer which
+ * processes one artifact at a time and hence cannot associate the artifacts from the same project to use the
+ * same timestamp+buildno for the snapshot versions. Allowing the caller to pass in metadata from a previous
+ * deployment allows to re-establish the association between the artifacts of the same project.
+ */
+ for ( Metadata metadata : request.getMetadata() )
+ {
+ if ( metadata instanceof RemoteSnapshotMetadata )
+ {
+ RemoteSnapshotMetadata snapshotMetadata = (RemoteSnapshotMetadata) metadata;
+ snapshots.put( snapshotMetadata.getKey(), snapshotMetadata );
+ }
+ }
+ }
+
+ public Collection<? extends Metadata> prepare( Collection<? extends Artifact> artifacts )
+ {
+ for ( Artifact artifact : artifacts )
+ {
+ if ( artifact.isSnapshot() )
+ {
+ Object key = RemoteSnapshotMetadata.getKey( artifact );
+ RemoteSnapshotMetadata snapshotMetadata = snapshots.get( key );
+ if ( snapshotMetadata == null )
+ {
+ snapshotMetadata = new RemoteSnapshotMetadata( artifact, legacyFormat );
+ snapshots.put( key, snapshotMetadata );
+ }
+ snapshotMetadata.bind( artifact );
+ }
+ }
+
+ return snapshots.values();
+ }
+
+ public Artifact transformArtifact( Artifact artifact )
+ {
+ if ( artifact.isSnapshot() && artifact.getVersion().equals( artifact.getBaseVersion() ) )
+ {
+ Object key = RemoteSnapshotMetadata.getKey( artifact );
+ RemoteSnapshotMetadata snapshotMetadata = snapshots.get( key );
+ if ( snapshotMetadata != null )
+ {
+ artifact = artifact.setVersion( snapshotMetadata.getExpandedVersion( artifact ) );
+ }
+ }
+
+ return artifact;
+ }
+
+ public Collection<? extends Metadata> finish( Collection<? extends Artifact> artifacts )
+ {
+ return Collections.emptyList();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/SnapshotMetadataGeneratorFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/SnapshotMetadataGeneratorFactory.java
new file mode 100644
index 00000000..79ffaade
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/SnapshotMetadataGeneratorFactory.java
@@ -0,0 +1,52 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.codehaus.plexus.component.annotations.Component;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.deployment.DeployRequest;
+import org.eclipse.aether.impl.MetadataGenerator;
+import org.eclipse.aether.impl.MetadataGeneratorFactory;
+import org.eclipse.aether.installation.InstallRequest;
+
+/**
+ * @author Benjamin Bentmann
+ */
+@Component( role = MetadataGeneratorFactory.class, hint = "snapshot" )
+public class SnapshotMetadataGeneratorFactory
+ implements MetadataGeneratorFactory
+{
+
+ public MetadataGenerator newInstance( RepositorySystemSession session, InstallRequest request )
+ {
+ return new LocalSnapshotMetadataGenerator( session, request );
+ }
+
+ public MetadataGenerator newInstance( RepositorySystemSession session, DeployRequest request )
+ {
+ return new RemoteSnapshotMetadataGenerator( session, request );
+ }
+
+ public float getPriority()
+ {
+ return 10;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java
new file mode 100644
index 00000000..adaca9db
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java
@@ -0,0 +1,133 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+
+import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.repository.metadata.Versioning;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.ArtifactProperties;
+
+/**
+ * @author Benjamin Bentmann
+ */
+final class VersionsMetadata
+ extends MavenMetadata
+{
+
+ private final Artifact artifact;
+
+ public VersionsMetadata( Artifact artifact )
+ {
+ super( createRepositoryMetadata( artifact ), null );
+ this.artifact = artifact;
+ }
+
+ public VersionsMetadata( Artifact artifact, File file )
+ {
+ super( createRepositoryMetadata( artifact ), file );
+ this.artifact = artifact;
+ }
+
+ private static Metadata createRepositoryMetadata( Artifact artifact )
+ {
+ Metadata metadata = new Metadata();
+ metadata.setGroupId( artifact.getGroupId() );
+ metadata.setArtifactId( artifact.getArtifactId() );
+
+ Versioning versioning = new Versioning();
+ versioning.addVersion( artifact.getBaseVersion() );
+ if ( !artifact.isSnapshot() )
+ {
+ versioning.setRelease( artifact.getBaseVersion() );
+ }
+ if ( "maven-plugin".equals( artifact.getProperty( ArtifactProperties.TYPE, "" ) ) )
+ {
+ versioning.setLatest( artifact.getBaseVersion() );
+ }
+
+ metadata.setVersioning( versioning );
+
+ return metadata;
+ }
+
+ @Override
+ protected void merge( Metadata recessive )
+ {
+ Versioning versioning = metadata.getVersioning();
+ versioning.updateTimestamp();
+
+ if ( recessive.getVersioning() != null )
+ {
+ if ( versioning.getLatest() == null )
+ {
+ versioning.setLatest( recessive.getVersioning().getLatest() );
+ }
+ if ( versioning.getRelease() == null )
+ {
+ versioning.setRelease( recessive.getVersioning().getRelease() );
+ }
+
+ Collection<String> versions = new LinkedHashSet<String>( recessive.getVersioning().getVersions() );
+ versions.addAll( versioning.getVersions() );
+ versioning.setVersions( new ArrayList<String>( versions ) );
+ }
+ }
+
+ public Object getKey()
+ {
+ return getGroupId() + ':' + getArtifactId();
+ }
+
+ public static Object getKey( Artifact artifact )
+ {
+ return artifact.getGroupId() + ':' + artifact.getArtifactId();
+ }
+
+ public MavenMetadata setFile( File file )
+ {
+ return new VersionsMetadata( artifact, file );
+ }
+
+ public String getGroupId()
+ {
+ return artifact.getGroupId();
+ }
+
+ public String getArtifactId()
+ {
+ return artifact.getArtifactId();
+ }
+
+ public String getVersion()
+ {
+ return "";
+ }
+
+ public Nature getNature()
+ {
+ return artifact.isSnapshot() ? Nature.RELEASE_OR_SNAPSHOT : Nature.RELEASE;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGenerator.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGenerator.java
new file mode 100644
index 00000000..e2f5e82d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGenerator.java
@@ -0,0 +1,108 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.deployment.DeployRequest;
+import org.eclipse.aether.impl.MetadataGenerator;
+import org.eclipse.aether.installation.InstallRequest;
+import org.eclipse.aether.metadata.Metadata;
+
+/**
+ * @author Benjamin Bentmann
+ */
+class VersionsMetadataGenerator
+ implements MetadataGenerator
+{
+
+ private Map<Object, VersionsMetadata> versions;
+
+ private Map<Object, VersionsMetadata> processedVersions;
+
+ public VersionsMetadataGenerator( RepositorySystemSession session, InstallRequest request )
+ {
+ this( session, request.getMetadata() );
+ }
+
+ public VersionsMetadataGenerator( RepositorySystemSession session, DeployRequest request )
+ {
+ this( session, request.getMetadata() );
+ }
+
+ private VersionsMetadataGenerator( RepositorySystemSession session, Collection<? extends Metadata> metadatas )
+ {
+ versions = new LinkedHashMap<Object, VersionsMetadata>();
+ processedVersions = new LinkedHashMap<Object, VersionsMetadata>();
+
+ /*
+ * NOTE: This should be considered a quirk to support interop with Maven's legacy ArtifactDeployer which
+ * processes one artifact at a time and hence cannot associate the artifacts from the same project to use the
+ * same version index. Allowing the caller to pass in metadata from a previous deployment allows to re-establish
+ * the association between the artifacts of the same project.
+ */
+ for ( Iterator<? extends Metadata> it = metadatas.iterator(); it.hasNext(); )
+ {
+ Metadata metadata = it.next();
+ if ( metadata instanceof VersionsMetadata )
+ {
+ it.remove();
+ VersionsMetadata versionsMetadata = (VersionsMetadata) metadata;
+ processedVersions.put( versionsMetadata.getKey(), versionsMetadata );
+ }
+ }
+ }
+
+ public Collection<? extends Metadata> prepare( Collection<? extends Artifact> artifacts )
+ {
+ return Collections.emptyList();
+ }
+
+ public Artifact transformArtifact( Artifact artifact )
+ {
+ return artifact;
+ }
+
+ public Collection<? extends Metadata> finish( Collection<? extends Artifact> artifacts )
+ {
+ for ( Artifact artifact : artifacts )
+ {
+ Object key = VersionsMetadata.getKey( artifact );
+ if ( processedVersions.get( key ) == null )
+ {
+ VersionsMetadata versionsMetadata = versions.get( key );
+ if ( versionsMetadata == null )
+ {
+ versionsMetadata = new VersionsMetadata( artifact );
+ versions.put( key, versionsMetadata );
+ }
+ }
+ }
+
+ return versions.values();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGeneratorFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGeneratorFactory.java
new file mode 100644
index 00000000..47ef3601
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGeneratorFactory.java
@@ -0,0 +1,52 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.codehaus.plexus.component.annotations.Component;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.deployment.DeployRequest;
+import org.eclipse.aether.impl.MetadataGenerator;
+import org.eclipse.aether.impl.MetadataGeneratorFactory;
+import org.eclipse.aether.installation.InstallRequest;
+
+/**
+ * @author Benjamin Bentmann
+ */
+@Component( role = MetadataGeneratorFactory.class, hint = "versions" )
+public class VersionsMetadataGeneratorFactory
+ implements MetadataGeneratorFactory
+{
+
+ public MetadataGenerator newInstance( RepositorySystemSession session, InstallRequest request )
+ {
+ return new VersionsMetadataGenerator( session, request );
+ }
+
+ public MetadataGenerator newInstance( RepositorySystemSession session, DeployRequest request )
+ {
+ return new VersionsMetadataGenerator( session, request );
+ }
+
+ public float getPriority()
+ {
+ return 5;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/package-info.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/package-info.java
new file mode 100644
index 00000000..5582cf75
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/package-info.java
@@ -0,0 +1,25 @@
+// CHECKSTYLE_OFF: RegexpHeader
+/**
+ * <a href="http://www.eclipse.org/aether/">Aether</a> extensions for utilizing the Maven POM and Maven repository
+ * metadata.
+ */
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */ \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/site/apt/index.apt b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/site/apt/index.apt
new file mode 100644
index 00000000..600ec417
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/site/apt/index.apt
@@ -0,0 +1,33 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ Introduction
+ -----
+ Hervé Boutemy
+ -----
+ 2012-09-29
+ -----
+
+Maven Aether Provider
+
+ Maven Aether Provider is an {{{http://www.eclipse.org/aether/}Aether}} extension to support
+ Maven POMs and local+remote repositories.
+
+ Main component is <<<MavenRepositorySystemUtils>>>
+ ({{{./apidocs/org/apache/maven/repository/internal/MavenRepositorySystemUtils.html}javadoc}},
+ {{{./xref/org/apache/maven/repository/internal/MavenRepositorySystemUtils.html}source}}).
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/site/site.xml b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/site/site.xml
new file mode 100644
index 00000000..3a16bf98
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/site/site.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
+ <body>
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ <item name="JavaDocs" href="apidocs/index.html"/>
+ <item name="Source Xref" href="xref/index.html"/>
+ <!--item name="FAQ" href="faq.html"/-->
+ </menu>
+
+ <menu ref="parent"/>
+ <menu ref="reports"/>
+ </body>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/AbstractRepositoryTestCase.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/AbstractRepositoryTestCase.java
new file mode 100644
index 00000000..b81450ce
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/AbstractRepositoryTestCase.java
@@ -0,0 +1,87 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.net.MalformedURLException;
+
+import org.apache.maven.repository.internal.util.ConsoleRepositoryListener;
+import org.apache.maven.repository.internal.util.ConsoleTransferListener;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusTestCase;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.RemoteRepository;
+
+public abstract class AbstractRepositoryTestCase
+ extends PlexusTestCase
+{
+ protected RepositorySystem system;
+
+ protected RepositorySystemSession session;
+
+ @Override
+ protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration )
+ {
+ super.customizeContainerConfiguration( containerConfiguration );
+ containerConfiguration.setAutoWiring( true );
+ containerConfiguration.setClassPathScanning( PlexusConstants.SCANNING_INDEX );
+ }
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ system = lookup( RepositorySystem.class );
+ session = newMavenRepositorySystemSession( system );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ session = null;
+ system = null;
+ super.tearDown();
+ }
+
+ public static RepositorySystemSession newMavenRepositorySystemSession( RepositorySystem system )
+ {
+ DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
+
+ LocalRepository localRepo = new LocalRepository( "target/local-repo" );
+ session.setLocalRepositoryManager( system.newLocalRepositoryManager( session, localRepo ) );
+
+ session.setTransferListener( new ConsoleTransferListener() );
+ session.setRepositoryListener( new ConsoleRepositoryListener() );
+
+ return session;
+ }
+
+ public static RemoteRepository newTestRepository()
+ throws MalformedURLException
+ {
+ return new RemoteRepository.Builder( "repo", "default",
+ getTestFile( "target/test-classes/repo" ).toURI().toURL().toString() ).build();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java
new file mode 100644
index 00000000..e8731380
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java
@@ -0,0 +1,77 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import org.eclipse.aether.RepositoryEvent;
+import org.eclipse.aether.RepositoryEvent.EventType;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.impl.ArtifactDescriptorReader;
+import org.eclipse.aether.impl.RepositoryEventDispatcher;
+import org.eclipse.aether.resolution.ArtifactDescriptorRequest;
+import org.mockito.ArgumentCaptor;
+
+public class DefaultArtifactDescriptorReaderTest
+ extends AbstractRepositoryTestCase
+{
+
+ public void testMng5459()
+ throws Exception
+ {
+ // prepare
+ DefaultArtifactDescriptorReader reader = (DefaultArtifactDescriptorReader) lookup( ArtifactDescriptorReader.class );
+
+ RepositoryEventDispatcher eventDispatcher = mock( RepositoryEventDispatcher.class );
+
+ ArgumentCaptor<RepositoryEvent> event = ArgumentCaptor.forClass( RepositoryEvent.class );
+
+ reader.setRepositoryEventDispatcher( eventDispatcher );
+
+ ArtifactDescriptorRequest request = new ArtifactDescriptorRequest();
+
+ request.addRepository( newTestRepository() );
+
+ request.setArtifact( new DefaultArtifact( "org.apache.maven.its", "dep-mng5459", "jar", "0.4.0-SNAPSHOT" ) );
+
+ // execute
+ reader.readArtifactDescriptor( session, request );
+
+ // verify
+ verify( eventDispatcher ).dispatch( event.capture() );
+
+ boolean missingArtifactDescriptor = false;
+
+ for( RepositoryEvent evt : event.getAllValues() )
+ {
+ if ( EventType.ARTIFACT_DESCRIPTOR_MISSING.equals( evt.getType() ) )
+ {
+ assertEquals( "Could not find artifact org.apache.maven.its:dep-mng5459:pom:0.4.0-20130404.090532-2 in repo (" + newTestRepository().getUrl() + ")", evt.getException().getMessage() );
+ missingArtifactDescriptor = true;
+ }
+ }
+
+ if( !missingArtifactDescriptor )
+ {
+ fail( "Expected missing artifact descriptor for org.apache.maven.its:dep-mng5459:pom:0.4.0-20130404.090532-2" );
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/DefaultVersionResolverTest.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/DefaultVersionResolverTest.java
new file mode 100644
index 00000000..90dd6a4c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/DefaultVersionResolverTest.java
@@ -0,0 +1,96 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.impl.VersionResolver;
+import org.eclipse.aether.resolution.VersionRequest;
+import org.eclipse.aether.resolution.VersionResult;
+import org.eclipse.aether.artifact.DefaultArtifact;
+
+public class DefaultVersionResolverTest
+ extends AbstractRepositoryTestCase
+{
+ private DefaultVersionResolver versionResolver;
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ // be sure we're testing the right class, i.e. DefaultVersionResolver.class
+ versionResolver = (DefaultVersionResolver) lookup( VersionResolver.class, "default" );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ versionResolver = null;
+ super.tearDown();
+ }
+
+ public void testResolveSeparateInstalledClassifiedNonUniqueVersionedArtifacts()
+ throws Exception
+ {
+ VersionRequest requestB = new VersionRequest();
+ requestB.addRepository( newTestRepository() );
+ Artifact artifactB =
+ new DefaultArtifact( "org.apache.maven.its", "dep-mng5324", "classifierB", "jar", "07.20.3-SNAPSHOT" );
+ requestB.setArtifact( artifactB );
+
+ VersionResult resultB = versionResolver.resolveVersion( session, requestB );
+ assertEquals( "07.20.3-20120809.112920-97", resultB.getVersion() );
+
+ VersionRequest requestA = new VersionRequest();
+ requestA.addRepository( newTestRepository() );
+
+ Artifact artifactA =
+ new DefaultArtifact( "org.apache.maven.its", "dep-mng5324", "classifierA", "jar", "07.20.3-SNAPSHOT" );
+ requestA.setArtifact( artifactA );
+
+ VersionResult resultA = versionResolver.resolveVersion( session, requestA );
+ assertEquals( "07.20.3-20120809.112124-88", resultA.getVersion() );
+ }
+
+ public void testResolveSeparateInstalledClassifiedNonVersionedArtifacts()
+ throws Exception
+ {
+ VersionRequest requestA = new VersionRequest();
+ requestA.addRepository( newTestRepository() );
+ String versionA = "07.20.3-20120809.112124-88";
+ Artifact artifactA =
+ new DefaultArtifact( "org.apache.maven.its", "dep-mng5324", "classifierA", "jar", versionA );
+ requestA.setArtifact( artifactA );
+
+ VersionResult resultA = versionResolver.resolveVersion( session, requestA );
+ assertEquals( versionA, resultA.getVersion() );
+
+ VersionRequest requestB = new VersionRequest();
+ requestB.addRepository( newTestRepository() );
+ String versionB = "07.20.3-20120809.112920-97";
+ Artifact artifactB =
+ new DefaultArtifact( "org.apache.maven.its", "dep-mng5324", "classifierB", "jar", versionB );
+ requestB.setArtifact( artifactB );
+
+ VersionResult resultB = versionResolver.resolveVersion( session, requestB );
+ assertEquals( versionB, resultB.getVersion() );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java
new file mode 100644
index 00000000..768835a5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java
@@ -0,0 +1,45 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.impl.MetadataGeneratorFactory;
+import org.eclipse.aether.spi.locator.ServiceLocator;
+
+import junit.framework.TestCase;
+
+public class MavenRepositorySystemUtilsTest
+ extends TestCase
+{
+
+ public void testGetRepositorySystem()
+ {
+ ServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
+ RepositorySystem repoSys = locator.getService( RepositorySystem.class );
+ assertNotNull( repoSys );
+ }
+
+ public void testGetMetadataGeneratorFactories()
+ {
+ ServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
+ assertEquals( 2, locator.getServices( MetadataGeneratorFactory.class ).size() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/RepositorySystemTest.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/RepositorySystemTest.java
new file mode 100644
index 00000000..db77a441
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/RepositorySystemTest.java
@@ -0,0 +1,220 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.collection.CollectResult;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.resolution.ArtifactDescriptorRequest;
+import org.eclipse.aether.resolution.ArtifactDescriptorResult;
+import org.eclipse.aether.resolution.ArtifactRequest;
+import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.artifact.DefaultArtifact;
+
+public class RepositorySystemTest
+ extends AbstractRepositoryTestCase
+{
+ public void testResolveVersionRange()
+ throws Exception
+ {
+ //VersionRangeResult resolveVersionRange( RepositorySystemSession session, VersionRangeRequest request )
+ // throws VersionRangeResolutionException;
+
+ }
+
+ public void testResolveVersion()
+ throws Exception
+ {
+ //VersionResult resolveVersion( RepositorySystemSession session, VersionRequest request )
+ // throws VersionResolutionException;
+ }
+
+ public void testReadArtifactDescriptor()
+ throws Exception
+ {
+ Artifact artifact = new DefaultArtifact( "ut.simple:artifact:extension:classifier:1.0" );
+
+ ArtifactDescriptorRequest request = new ArtifactDescriptorRequest();
+ request.setArtifact( artifact );
+ request.addRepository( newTestRepository() );
+
+ ArtifactDescriptorResult result = system.readArtifactDescriptor( session, request );
+
+ List<Dependency> deps = result.getDependencies();
+ assertEquals( 2, deps.size() );
+ checkUtSimpleArtifactDependencies( deps.get( 0 ), deps.get( 1 ) );
+ }
+
+ /**
+ * check ut.simple:artifact:1.0 dependencies
+ */
+ private void checkUtSimpleArtifactDependencies( Dependency dep1, Dependency dep2 )
+ {
+ assertEquals( "compile", dep1.getScope() );
+ assertFalse( dep1.isOptional() );
+ assertEquals( 0, dep1.getExclusions().size() );
+ Artifact depArtifact = dep1.getArtifact();
+ assertEquals( "ut.simple", depArtifact.getGroupId() );
+ assertEquals( "dependency", depArtifact.getArtifactId() );
+ assertEquals( "1.0", depArtifact.getVersion() );
+ assertEquals( "1.0", depArtifact.getBaseVersion() );
+ assertNull( depArtifact.getFile() );
+ assertFalse( depArtifact.isSnapshot() );
+ assertEquals( "", depArtifact.getClassifier() );
+ assertEquals( "jar", depArtifact.getExtension() );
+ assertEquals( "java", depArtifact.getProperty( "language", null ) );
+ assertEquals( "jar", depArtifact.getProperty( "type", null ) );
+ assertEquals( "true", depArtifact.getProperty( "constitutesBuildPath", null ) );
+ assertEquals( "false", depArtifact.getProperty( "includesDependencies", null ) );
+ assertEquals( 4, depArtifact.getProperties().size() );
+
+ assertEquals( "compile", dep2.getScope() );
+ assertFalse( dep2.isOptional() );
+ assertEquals( 0, dep2.getExclusions().size() );
+ depArtifact = dep2.getArtifact();
+ assertEquals( "ut.simple", depArtifact.getGroupId() );
+ assertEquals( "dependency", depArtifact.getArtifactId() );
+ assertEquals( "1.0", depArtifact.getVersion() );
+ assertEquals( "1.0", depArtifact.getBaseVersion() );
+ assertNull( depArtifact.getFile() );
+ assertFalse( depArtifact.isSnapshot() );
+ assertEquals( "sources", depArtifact.getClassifier() );
+ assertEquals( "jar", depArtifact.getExtension() );
+ assertEquals( "java", depArtifact.getProperty( "language", null ) );
+ assertEquals( "jar", depArtifact.getProperty( "type", null ) ); // shouldn't it be java-sources given the classifier?
+ assertEquals( "true", depArtifact.getProperty( "constitutesBuildPath", null ) ); // shouldn't it be false given the classifier?
+ assertEquals( "false", depArtifact.getProperty( "includesDependencies", null ) );
+ assertEquals( 4, depArtifact.getProperties().size() );
+ }
+
+ public void testCollectDependencies()
+ throws Exception
+ {
+ Artifact artifact = new DefaultArtifact( "ut.simple:artifact:extension:classifier:1.0" );
+ // notice: extension and classifier not really used in this test...
+
+ CollectRequest collectRequest = new CollectRequest();
+ collectRequest.setRoot( new Dependency( artifact, null ) );
+ collectRequest.addRepository( newTestRepository() );
+
+ CollectResult collectResult = system.collectDependencies( session, collectRequest );
+
+ List<DependencyNode> nodes = collectResult.getRoot().getChildren();
+ assertEquals( 2, nodes.size() );
+ checkUtSimpleArtifactDependencies( nodes.get( 0 ).getDependency(), nodes.get( 1 ).getDependency() );
+ }
+
+ public void testResolveArtifact()
+ throws Exception
+ {
+ Artifact artifact = new DefaultArtifact( "ut.simple:artifact:1.0" );
+
+ ArtifactRequest artifactRequest = new ArtifactRequest();
+ artifactRequest.setArtifact( artifact );
+ artifactRequest.addRepository( newTestRepository() );
+
+ ArtifactResult artifactResult = system.resolveArtifact( session, artifactRequest );
+ checkArtifactResult( artifactResult, "artifact-1.0.jar" );
+
+ artifact = new DefaultArtifact( "ut.simple:artifact:zip:1.0" );
+ artifactRequest.setArtifact( artifact );
+ artifactResult = system.resolveArtifact( session, artifactRequest );
+ checkArtifactResult( artifactResult, "artifact-1.0.zip" );
+
+ artifact = new DefaultArtifact( "ut.simple:artifact:zip:classifier:1.0" );
+ artifactRequest.setArtifact( artifact );
+ artifactResult = system.resolveArtifact( session, artifactRequest );
+ checkArtifactResult( artifactResult, "artifact-1.0-classifier.zip" );
+ }
+
+ private void checkArtifactResult( ArtifactResult result, String filename )
+ {
+ assertFalse( result.isMissing() );
+ assertTrue( result.isResolved() );
+ Artifact artifact = result.getArtifact();
+ assertNotNull( artifact.getFile() );
+ assertEquals( filename, artifact.getFile().getName() );
+ }
+
+ public void testResolveArtifacts()
+ throws Exception
+ {
+ ArtifactRequest req1 = new ArtifactRequest();
+ req1.setArtifact( new DefaultArtifact( "ut.simple:artifact:1.0" ) );
+ req1.addRepository( newTestRepository() );
+
+ ArtifactRequest req2 = new ArtifactRequest();
+ req2.setArtifact( new DefaultArtifact( "ut.simple:artifact:zip:1.0" ) );
+ req2.addRepository( newTestRepository() );
+
+ ArtifactRequest req3 = new ArtifactRequest();
+ req3.setArtifact( new DefaultArtifact( "ut.simple:artifact:zip:classifier:1.0" ) );
+ req3.addRepository( newTestRepository() );
+
+ List<ArtifactRequest> requests = Arrays.asList( req1, req2, req3 );
+
+ List<ArtifactResult> results = system.resolveArtifacts( session, requests );
+
+ assertEquals( 3, results.size() );
+ checkArtifactResult( results.get( 0 ), "artifact-1.0.jar" );
+ checkArtifactResult( results.get( 1 ), "artifact-1.0.zip" );
+ checkArtifactResult( results.get( 2 ), "artifact-1.0-classifier.zip" );
+ }
+
+ public void testResolveMetadata()
+ throws Exception
+ {
+ //List<MetadataResult> resolveMetadata( RepositorySystemSession session,
+ // Collection<? extends MetadataRequest> requests );
+ }
+
+ public void testInstall()
+ throws Exception
+ {
+ //InstallResult install( RepositorySystemSession session, InstallRequest request )
+ // throws InstallationException;
+ // release, snapshot unique ou non unique, attachement
+ }
+
+ public void testDeploy()
+ throws Exception
+ {
+ //DeployResult deploy( RepositorySystemSession session, DeployRequest request )
+ // throws DeploymentException;
+ }
+
+ public void testNewLocalRepositoryManager()
+ throws Exception
+ {
+ //LocalRepositoryManager newLocalRepositoryManager( LocalRepository localRepository );
+ }
+
+ public void testNewSyncContext()
+ throws Exception
+ {
+ //SyncContext newSyncContext( RepositorySystemSession session, boolean shared );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleRepositoryListener.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleRepositoryListener.java
new file mode 100644
index 00000000..2879a9fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleRepositoryListener.java
@@ -0,0 +1,132 @@
+package org.apache.maven.repository.internal.util;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.PrintStream;
+
+import org.eclipse.aether.AbstractRepositoryListener;
+import org.eclipse.aether.RepositoryEvent;
+
+public class ConsoleRepositoryListener
+ extends AbstractRepositoryListener
+{
+
+ private PrintStream out;
+
+ public ConsoleRepositoryListener()
+ {
+ this( null );
+ }
+
+ public ConsoleRepositoryListener( PrintStream out )
+ {
+ this.out = ( out != null ) ? out : System.out;
+ }
+
+ public void artifactDeployed( RepositoryEvent event )
+ {
+ println( "artifactDeployed", event.getArtifact() + " to " + event.getRepository() );
+ }
+
+ public void artifactDeploying( RepositoryEvent event )
+ {
+ println( "artifactDeploying", event.getArtifact() + " to " + event.getRepository() );
+ }
+
+ public void artifactDescriptorInvalid( RepositoryEvent event )
+ {
+ println( "artifactDescriptorInvalid", "for " + event.getArtifact() + ": " + event.getException().getMessage() );
+ }
+
+ public void artifactDescriptorMissing( RepositoryEvent event )
+ {
+ println( "artifactDescriptorMissing", "for " + event.getArtifact() );
+ }
+
+ public void artifactInstalled( RepositoryEvent event )
+ {
+ println( "artifactInstalled", event.getArtifact() + " to " + event.getFile() );
+ }
+
+ public void artifactInstalling( RepositoryEvent event )
+ {
+ println( "artifactInstalling", event.getArtifact() + " to " + event.getFile() );
+ }
+
+ public void artifactResolved( RepositoryEvent event )
+ {
+ println( "artifactResolved", event.getArtifact() + " from " + event.getRepository() );
+ }
+
+ public void artifactDownloading( RepositoryEvent event )
+ {
+ println( "artifactDownloading", event.getArtifact() + " from " + event.getRepository() );
+ }
+
+ public void artifactDownloaded( RepositoryEvent event )
+ {
+ println( "artifactDownloaded", event.getArtifact() + " from " + event.getRepository() );
+ }
+
+ public void artifactResolving( RepositoryEvent event )
+ {
+ println( "artifactResolving", event.getArtifact().toString() );
+ }
+
+ public void metadataDeployed( RepositoryEvent event )
+ {
+ println( "metadataDeployed", event.getMetadata() + " to " + event.getRepository() );
+ }
+
+ public void metadataDeploying( RepositoryEvent event )
+ {
+ println( "metadataDeploying", event.getMetadata() + " to " + event.getRepository() );
+ }
+
+ public void metadataInstalled( RepositoryEvent event )
+ {
+ println( "metadataInstalled", event.getMetadata() + " to " + event.getFile() );
+ }
+
+ public void metadataInstalling( RepositoryEvent event )
+ {
+ println( "metadataInstalling", event.getMetadata() + " to " + event.getFile() );
+ }
+
+ public void metadataInvalid( RepositoryEvent event )
+ {
+ println( "metadataInvalid", event.getMetadata().toString() );
+ }
+
+ public void metadataResolved( RepositoryEvent event )
+ {
+ println( "metadataResolved", event.getMetadata() + " from " + event.getRepository() );
+ }
+
+ public void metadataResolving( RepositoryEvent event )
+ {
+ println( "metadataResolving", event.getMetadata() + " from " + event.getRepository() );
+ }
+
+ private void println( String event, String message )
+ {
+ out.println( "Aether Repository - " + event + ": " + message );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleTransferListener.java b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleTransferListener.java
new file mode 100644
index 00000000..fb442834
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleTransferListener.java
@@ -0,0 +1,186 @@
+package org.apache.maven.repository.internal.util;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.PrintStream;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.util.Locale;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.eclipse.aether.transfer.AbstractTransferListener;
+import org.eclipse.aether.transfer.TransferEvent;
+import org.eclipse.aether.transfer.TransferResource;
+
+public class ConsoleTransferListener
+ extends AbstractTransferListener
+{
+
+ private PrintStream out;
+
+ private Map<TransferResource, Long> downloads = new ConcurrentHashMap<TransferResource, Long>();
+
+ private int lastLength;
+
+ public ConsoleTransferListener()
+ {
+ this( null );
+ }
+
+ public ConsoleTransferListener( PrintStream out )
+ {
+ this.out = ( out != null ) ? out : System.out;
+ }
+
+ @Override
+ public void transferInitiated( TransferEvent event )
+ {
+ String message = event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploading" : "Downloading";
+
+ println( "transferInitiated", message + ": " + event.getResource().getRepositoryUrl() + event.getResource().getResourceName() );
+ }
+
+ @Override
+ public void transferProgressed( TransferEvent event )
+ {
+ TransferResource resource = event.getResource();
+ downloads.put( resource, event.getTransferredBytes() );
+
+ StringBuilder buffer = new StringBuilder( 64 );
+
+ for ( Map.Entry<TransferResource, Long> entry : downloads.entrySet() )
+ {
+ long total = entry.getKey().getContentLength();
+ long complete = entry.getValue();
+
+ buffer.append( getStatus( complete, total ) ).append( " " );
+ }
+
+ int pad = lastLength - buffer.length();
+ lastLength = buffer.length();
+ pad( buffer, pad );
+ buffer.append( '\r' );
+
+ print( "transferProgressed", buffer.toString() );
+ }
+
+ private String getStatus( long complete, long total )
+ {
+ if ( total >= 1024 )
+ {
+ return toKB( complete ) + "/" + toKB( total ) + " KB ";
+ }
+ else if ( total >= 0 )
+ {
+ return complete + "/" + total + " B ";
+ }
+ else if ( complete >= 1024 )
+ {
+ return toKB( complete ) + " KB ";
+ }
+ else
+ {
+ return complete + " B ";
+ }
+ }
+
+ private void pad( StringBuilder buffer, int spaces )
+ {
+ String block = " ";
+ while ( spaces > 0 )
+ {
+ int n = Math.min( spaces, block.length() );
+ buffer.append( block, 0, n );
+ spaces -= n;
+ }
+ }
+
+ @Override
+ public void transferSucceeded( TransferEvent event )
+ {
+ transferCompleted( event );
+
+ TransferResource resource = event.getResource();
+ long contentLength = event.getTransferredBytes();
+ if ( contentLength >= 0 )
+ {
+ String type = ( event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploaded" : "Downloaded" );
+ String len = contentLength >= 1024 ? toKB( contentLength ) + " KB" : contentLength + " B";
+
+ String throughput = "";
+ long duration = System.currentTimeMillis() - resource.getTransferStartTime();
+ if ( duration > 0 )
+ {
+ DecimalFormat format = new DecimalFormat( "0.0", new DecimalFormatSymbols( Locale.ENGLISH ) );
+ double kbPerSec = ( contentLength / 1024.0 ) / ( duration / 1000.0 );
+ throughput = " at " + format.format( kbPerSec ) + " KB/sec";
+ }
+
+ println( "transferSucceeded", type + ": " + resource.getRepositoryUrl() + resource.getResourceName() + " ("
+ + len + throughput + ")" );
+ }
+ }
+
+ @Override
+ public void transferFailed( TransferEvent event )
+ {
+ transferCompleted( event );
+
+ println( "transferFailed", event.getException().getClass() + ": " + event.getException().getMessage() );
+ }
+
+ private void transferCompleted( TransferEvent event )
+ {
+ downloads.remove( event.getResource() );
+
+ StringBuilder buffer = new StringBuilder( 64 );
+ pad( buffer, lastLength );
+ buffer.append( '\r' );
+ out.println( buffer );
+ }
+
+ @Override
+ public void transferCorrupted( TransferEvent event )
+ {
+ println( "transferCorrupted", event.getException().getClass() + ": " + event.getException().getMessage() );
+ }
+
+ protected long toKB( long bytes )
+ {
+ return ( bytes + 1023 ) / 1024;
+ }
+
+ private void println( String event, String message )
+ {
+ print( event, message );
+ out.println();
+ }
+
+ private void print( String event, String message )
+ {
+ out.print( "Aether Transfer - " + event );
+ if ( message != null )
+ {
+ out.print( ": " );
+ out.print( message );
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5324/07.20.3-SNAPSHOT/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5324/07.20.3-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 00000000..9f0a7fed
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5324/07.20.3-SNAPSHOT/maven-metadata.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+-->
+
+<metadata xmlns="http://maven.apache.org/METADATA/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/METADATA/1.1.0 http://maven.apache.org/xsd/metadata-1.1.0.xsd"
+ modelVersion="1.1.0">
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>dep-mng5324</artifactId>
+ <version>07.20.3-SNAPSHOT</version><!-- metadata for artifact snapshot -->
+ <versioning>
+ <snapshot>
+ <timestamp>20120809.112920</timestamp>
+ <buildNumber>97</buildNumber>
+ </snapshot>
+ <lastUpdated>20120809112920</lastUpdated>
+ <snapshotVersions>
+ <snapshotVersion>
+ <classifier>classifierA</classifier>
+ <extension>jar</extension>
+ <value>07.20.3-20120809.112124-88</value>
+ <updated>20120809112124</updated>
+ </snapshotVersion>
+ <snapshotVersion>
+ <classifier>classifierB</classifier>
+ <extension>jar</extension>
+ <value>07.20.3-20120809.112920-97</value>
+ <updated>20120809112920</updated>
+ </snapshotVersion>
+ </snapshotVersions>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5459/0.4.0-SNAPSHOT/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5459/0.4.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 00000000..923f26fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5459/0.4.0-SNAPSHOT/maven-metadata.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+-->
+
+<metadata xmlns="http://maven.apache.org/METADATA/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/METADATA/1.1.0 http://maven.apache.org/xsd/metadata-1.1.0.xsd"
+ modelVersion="1.1.0">
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>dep-mng5459</artifactId>
+ <version>0.4.0-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <timestamp>20130404.090532</timestamp>
+ <buildNumber>2</buildNumber>
+ </snapshot>
+ <lastUpdated>20130404093657</lastUpdated>
+ <snapshotVersions>
+ <snapshotVersion>
+ <extension>pom</extension>
+ <value>0.4.0-20130404.090532-2</value>
+ <updated>20130404090532</updated>
+ </snapshotVersion>
+ <snapshotVersion>
+ <extension>jar</extension>
+ <value>0.4.0-20130404.093655-3</value>
+ <updated>20130404093655</updated>
+ </snapshotVersion>
+ </snapshotVersions>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0-classifier.zip b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0-classifier.zip
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0-classifier.zip
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.jar
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.jar
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.pom
new file mode 100644
index 00000000..f8b72af5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.pom
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>ut.simple</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0</version>
+ </parent>
+
+ <artifactId>artifact</artifactId>
+
+ <name>Simple Unit Test Artifact</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>ut.simple</groupId>
+ <artifactId>dependency</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>ut.simple</groupId>
+ <artifactId>dependency</artifactId>
+ <version>1.0</version>
+ <classifier>sources</classifier>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.zip b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.zip
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.zip
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/maven-metadata.xml
new file mode 100644
index 00000000..2de7eccf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/maven-metadata.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+-->
+
+<metadata xmlns="http://maven.apache.org/METADATA/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/METADATA/1.1.0 http://maven.apache.org/xsd/metadata-1.1.0.xsd">
+ <groupId>ut.simple</groupId>
+ <artifactId>artifact</artifactId>
+ <versioning>
+ <latest>1.0</latest>
+ <release>1.0</release>
+ <versions>
+ <version>1.0</version>
+ </versions>
+ <lastUpdated>20111123122038</lastUpdated>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0-sources.jar b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0-sources.jar
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0-sources.jar
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0.jar
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0.jar
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0.pom
new file mode 100644
index 00000000..c021dfac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0.pom
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>ut.simple</groupId>
+ <artifactId>dependency</artifactId>
+ <version>1.0</version>
+
+ <name>Simple Unit Test Dependency</name>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/maven-metadata.xml
new file mode 100644
index 00000000..8a97c341
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/maven-metadata.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+-->
+
+<metadata xmlns="http://maven.apache.org/METADATA/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/METADATA/1.1.0 http://maven.apache.org/xsd/metadata-1.1.0.xsd">
+ <groupId>ut.simple</groupId>
+ <artifactId>dependency</artifactId>
+ <versioning>
+ <latest>1.0</latest>
+ <release>1.0</release>
+ <versions>
+ <version>1.0</version>
+ </versions>
+ <lastUpdated>20111123122038</lastUpdated>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/parent/1.0/parent-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/parent/1.0/parent-1.0.pom
new file mode 100644
index 00000000..ed64c9e6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/parent/1.0/parent-1.0.pom
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>ut.simple</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+
+ <name>Simple Unit Test Parent</name>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>ut.simple</groupId>
+ <artifactId>dependency</artifactId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/parent/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/parent/maven-metadata.xml
new file mode 100644
index 00000000..7199d52a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/parent/maven-metadata.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+-->
+
+<metadata xmlns="http://maven.apache.org/METADATA/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/METADATA/1.1.0 http://maven.apache.org/xsd/metadata-1.1.0.xsd">
+ <groupId>ut.simple</groupId>
+ <artifactId>parent</artifactId>
+ <versioning>
+ <latest>1.0</latest>
+ <release>1.0</release>
+ <versions>
+ <version>1.0</version>
+ </versions>
+ <lastUpdated>20111123122038</lastUpdated>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-ant-tasks-2.1.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-ant-tasks-2.1.1.jar
new file mode 100644
index 00000000..7810a541
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-ant-tasks-2.1.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-artifact/pom.xml
new file mode 100644
index 00000000..206d72b8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/pom.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language
+ governing permissions and limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.3.3</version>
+ </parent>
+
+ <artifactId>maven-artifact</artifactId>
+
+ <name>Maven Artifact</name>
+
+ <scm><!-- remove when git scm url format can accept artifact-id at the end, as automatically inherited -->
+ <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
+ <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
+ <tag>maven-3.3.3</tag>
+ </scm>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-metadata</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifestEntries>
+ <Main-Class>org.apache.maven.artifact.versioning.ComparableVersion</Main-Class>
+ </manifestEntries>
+ </archive>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java
new file mode 100644
index 00000000..6cc00226
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java
@@ -0,0 +1,161 @@
+package org.apache.maven.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
+import org.apache.maven.artifact.versioning.VersionRange;
+
+/**
+ * Maven Artifact interface. Notice that it mixes artifact definition concepts (groupId, artifactId, version)
+ * with dependency information (version range, scope).
+ */
+public interface Artifact
+ extends Comparable<Artifact>
+{
+
+ String RELEASE_VERSION = "RELEASE";
+
+ String LATEST_VERSION = "LATEST";
+
+ String SNAPSHOT_VERSION = "SNAPSHOT";
+
+ Pattern VERSION_FILE_PATTERN = Pattern.compile( "^(.*)-([0-9]{8}.[0-9]{6})-([0-9]+)$" );
+
+ // TODO: into artifactScope handler
+
+ String SCOPE_COMPILE = "compile";
+
+ String SCOPE_COMPILE_PLUS_RUNTIME = "compile+runtime";
+
+ String SCOPE_TEST = "test";
+
+ String SCOPE_RUNTIME = "runtime";
+
+ String SCOPE_RUNTIME_PLUS_SYSTEM = "runtime+system";
+
+ String SCOPE_PROVIDED = "provided";
+
+ String SCOPE_SYSTEM = "system";
+
+ String SCOPE_IMPORT = "import"; // Used to import dependencyManagement dependencies
+
+ String getGroupId();
+
+ String getArtifactId();
+
+ String getVersion();
+
+ void setVersion( String version );
+
+ String getScope();
+
+ String getType();
+
+ String getClassifier();
+
+ boolean hasClassifier();
+
+ File getFile();
+
+ void setFile( File destination );
+
+ String getBaseVersion();
+
+ void setBaseVersion( String baseVersion );
+
+ String getId();
+
+ String getDependencyConflictId();
+
+ void addMetadata( ArtifactMetadata metadata );
+
+ Collection<ArtifactMetadata> getMetadataList();
+
+ void setRepository( ArtifactRepository remoteRepository );
+
+ ArtifactRepository getRepository();
+
+ void updateVersion( String version, ArtifactRepository localRepository );
+
+ String getDownloadUrl();
+
+ void setDownloadUrl( String downloadUrl );
+
+ ArtifactFilter getDependencyFilter();
+
+ void setDependencyFilter( ArtifactFilter artifactFilter );
+
+ ArtifactHandler getArtifactHandler();
+
+ List<String> getDependencyTrail();
+
+ void setDependencyTrail( List<String> dependencyTrail );
+
+ void setScope( String scope );
+
+ VersionRange getVersionRange();
+
+ void setVersionRange( VersionRange newRange );
+
+ void selectVersion( String version );
+
+ void setGroupId( String groupId );
+
+ void setArtifactId( String artifactId );
+
+ boolean isSnapshot();
+
+ void setResolved( boolean resolved );
+
+ boolean isResolved();
+
+ void setResolvedVersion( String version );
+
+ void setArtifactHandler( ArtifactHandler handler );
+
+ boolean isRelease();
+
+ void setRelease( boolean release );
+
+ List<ArtifactVersion> getAvailableVersions();
+
+ void setAvailableVersions( List<ArtifactVersion> versions );
+
+ boolean isOptional();
+
+ void setOptional( boolean optional );
+
+ ArtifactVersion getSelectedVersion()
+ throws OverConstrainedVersionException;
+
+ boolean isSelectedVersionKnown()
+ throws OverConstrainedVersionException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
new file mode 100644
index 00000000..8efc45cd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
@@ -0,0 +1,215 @@
+package org.apache.maven.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+
+import org.apache.maven.artifact.versioning.VersionRange;
+
+public final class ArtifactUtils
+{
+
+ public static boolean isSnapshot( String version )
+ {
+ if ( version != null )
+ {
+ if ( version.regionMatches( true, version.length() - Artifact.SNAPSHOT_VERSION.length(),
+ Artifact.SNAPSHOT_VERSION, 0, Artifact.SNAPSHOT_VERSION.length() ) )
+ {
+ return true;
+ }
+ else if ( Artifact.VERSION_FILE_PATTERN.matcher( version ).matches() )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static String toSnapshotVersion( String version )
+ {
+ if ( version == null )
+ {
+ throw new IllegalArgumentException( "version: null" );
+ }
+
+ Matcher m = Artifact.VERSION_FILE_PATTERN.matcher( version );
+ if ( m.matches() )
+ {
+ return m.group( 1 ) + "-" + Artifact.SNAPSHOT_VERSION;
+ }
+ else
+ {
+ return version;
+ }
+ }
+
+ public static String versionlessKey( Artifact artifact )
+ {
+ return versionlessKey( artifact.getGroupId(), artifact.getArtifactId() );
+ }
+
+ public static String versionlessKey( String groupId, String artifactId )
+ {
+ if ( groupId == null )
+ {
+ throw new NullPointerException( "groupId is null" );
+ }
+ if ( artifactId == null )
+ {
+ throw new NullPointerException( "artifactId is null" );
+ }
+ return groupId + ":" + artifactId;
+ }
+
+ public static String key( Artifact artifact )
+ {
+ return key( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() );
+ }
+
+ public static String key( String groupId, String artifactId, String version )
+ {
+ if ( groupId == null )
+ {
+ throw new NullPointerException( "groupId is null" );
+ }
+ if ( artifactId == null )
+ {
+ throw new NullPointerException( "artifactId is null" );
+ }
+ if ( version == null )
+ {
+ throw new NullPointerException( "version is null" );
+ }
+
+ return groupId + ":" + artifactId + ":" + version;
+ }
+
+ public static Map<String, Artifact> artifactMapByVersionlessId( Collection<Artifact> artifacts )
+ {
+ Map<String, Artifact> artifactMap = new LinkedHashMap<String, Artifact>();
+
+ if ( artifacts != null )
+ {
+ for ( Artifact artifact : artifacts )
+ {
+ artifactMap.put( versionlessKey( artifact ), artifact );
+ }
+ }
+
+ return artifactMap;
+ }
+
+ public static Artifact copyArtifactSafe( Artifact artifact )
+ {
+ return ( artifact != null ) ? copyArtifact( artifact ) : null;
+ }
+
+ public static Artifact copyArtifact( Artifact artifact )
+ {
+ VersionRange range = artifact.getVersionRange();
+
+ // For some reason with the introduction of MNG-1577 we have the case in Yoko where a depMan section has
+ // something like the following:
+ //
+ // <dependencyManagement>
+ // <dependencies>
+ // <!-- Yoko modules -->
+ // <dependency>
+ // <groupId>org.apache.yoko</groupId>
+ // <artifactId>yoko-core</artifactId>
+ // <version>${version}</version>
+ // </dependency>
+ // ...
+ //
+ // And the range is not set so we'll check here and set it. jvz.
+
+ if ( range == null )
+ {
+ range = VersionRange.createFromVersion( artifact.getVersion() );
+ }
+
+ DefaultArtifact clone = new DefaultArtifact( artifact.getGroupId(), artifact.getArtifactId(), range.cloneOf(),
+ artifact.getScope(), artifact.getType(), artifact.getClassifier(),
+ artifact.getArtifactHandler(), artifact.isOptional() );
+ clone.setRelease( artifact.isRelease() );
+ clone.setResolvedVersion( artifact.getVersion() );
+ clone.setResolved( artifact.isResolved() );
+ clone.setFile( artifact.getFile() );
+
+ clone.setAvailableVersions( copyList( artifact.getAvailableVersions() ) );
+ if ( artifact.getVersion() != null )
+ {
+ clone.setBaseVersion( artifact.getBaseVersion() );
+ }
+ clone.setDependencyFilter( artifact.getDependencyFilter() );
+ clone.setDependencyTrail( copyList( artifact.getDependencyTrail() ) );
+ clone.setDownloadUrl( artifact.getDownloadUrl() );
+ clone.setRepository( artifact.getRepository() );
+
+ return clone;
+ }
+
+ /** Returns <code>to</code> collection */
+ public static <T extends Collection<Artifact>> T copyArtifacts( Collection<Artifact> from, T to )
+ {
+ for ( Artifact artifact : from )
+ {
+ to.add( ArtifactUtils.copyArtifact( artifact ) );
+ }
+ return to;
+ }
+
+ public static <K, T extends Map<K, Artifact>> T copyArtifacts( Map<K, ? extends Artifact> from, T to )
+ {
+ if ( from != null )
+ {
+ for ( Map.Entry<K, ? extends Artifact> entry : from.entrySet() )
+ {
+ to.put( entry.getKey(), ArtifactUtils.copyArtifact( entry.getValue() ) );
+ }
+ }
+
+ return to;
+ }
+
+ private static <T> List<T> copyList( List<T> original )
+ {
+ List<T> copy = null;
+
+ if ( original != null )
+ {
+ copy = new ArrayList<T>();
+
+ if ( !original.isEmpty() )
+ {
+ copy.addAll( original );
+ }
+ }
+
+ return copy;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java
new file mode 100644
index 00000000..e3e42c0a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java
@@ -0,0 +1,597 @@
+package org.apache.maven.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * @author Jason van Zyl
+ */
+public class DefaultArtifact
+ implements Artifact
+{
+ private String groupId;
+
+ private String artifactId;
+
+ private String baseVersion;
+
+ private final String type;
+
+ private final String classifier;
+
+ private volatile String scope;
+
+ private volatile File file;
+
+ private ArtifactRepository repository;
+
+ private String downloadUrl;
+
+ private ArtifactFilter dependencyFilter;
+
+ private ArtifactHandler artifactHandler;
+
+ private List<String> dependencyTrail;
+
+ private volatile String version;
+
+ private VersionRange versionRange;
+
+ private volatile boolean resolved;
+
+ private boolean release;
+
+ private List<ArtifactVersion> availableVersions;
+
+ private Map<Object, ArtifactMetadata> metadataMap;
+
+ private boolean optional;
+
+ public DefaultArtifact( String groupId, String artifactId, String version, String scope, String type,
+ String classifier, ArtifactHandler artifactHandler )
+ {
+ this( groupId, artifactId, VersionRange.createFromVersion( version ), scope, type, classifier, artifactHandler,
+ false );
+ }
+
+ public DefaultArtifact( String groupId, String artifactId, VersionRange versionRange, String scope, String type,
+ String classifier, ArtifactHandler artifactHandler )
+ {
+ this( groupId, artifactId, versionRange, scope, type, classifier, artifactHandler, false );
+ }
+
+ public DefaultArtifact( String groupId, String artifactId, VersionRange versionRange, String scope, String type,
+ String classifier, ArtifactHandler artifactHandler, boolean optional )
+ {
+ this.groupId = groupId;
+
+ this.artifactId = artifactId;
+
+ this.versionRange = versionRange;
+
+ selectVersionFromNewRangeIfAvailable();
+
+ this.artifactHandler = artifactHandler;
+
+ this.scope = scope;
+
+ this.type = type;
+
+ if ( classifier == null )
+ {
+ classifier = artifactHandler.getClassifier();
+ }
+
+ this.classifier = classifier;
+
+ this.optional = optional;
+
+ validateIdentity();
+ }
+
+ private void validateIdentity()
+ {
+ if ( empty( groupId ) )
+ {
+ throw new InvalidArtifactRTException( groupId, artifactId, getVersion(), type,
+ "The groupId cannot be empty." );
+ }
+
+ if ( artifactId == null )
+ {
+ throw new InvalidArtifactRTException( groupId, artifactId, getVersion(), type,
+ "The artifactId cannot be empty." );
+ }
+
+ if ( type == null )
+ {
+ throw new InvalidArtifactRTException( groupId, artifactId, getVersion(), type,
+ "The type cannot be empty." );
+ }
+
+ if ( ( version == null ) && ( versionRange == null ) )
+ {
+ throw new InvalidArtifactRTException( groupId, artifactId, getVersion(), type,
+ "The version cannot be empty." );
+ }
+ }
+
+ private boolean empty( String value )
+ {
+ return ( value == null ) || ( value.trim().length() < 1 );
+ }
+
+ public String getClassifier()
+ {
+ return classifier;
+ }
+
+ public boolean hasClassifier()
+ {
+ return StringUtils.isNotEmpty( classifier );
+ }
+
+ public String getScope()
+ {
+ return scope;
+ }
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ public String getVersion()
+ {
+ return version;
+ }
+
+ public void setVersion( String version )
+ {
+ this.version = version;
+ setBaseVersionInternal( version );
+ versionRange = null;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+
+ public void setFile( File file )
+ {
+ this.file = file;
+ }
+
+ public File getFile()
+ {
+ return file;
+ }
+
+ public ArtifactRepository getRepository()
+ {
+ return repository;
+ }
+
+ public void setRepository( ArtifactRepository repository )
+ {
+ this.repository = repository;
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public String getId()
+ {
+ return getDependencyConflictId() + ":" + getBaseVersion();
+ }
+
+ public String getDependencyConflictId()
+ {
+ StringBuilder sb = new StringBuilder( 128 );
+ sb.append( getGroupId() );
+ sb.append( ":" );
+ appendArtifactTypeClassifierString( sb );
+ return sb.toString();
+ }
+
+ private void appendArtifactTypeClassifierString( StringBuilder sb )
+ {
+ sb.append( getArtifactId() );
+ sb.append( ":" );
+ sb.append( getType() );
+ if ( hasClassifier() )
+ {
+ sb.append( ":" );
+ sb.append( getClassifier() );
+ }
+ }
+
+ public void addMetadata( ArtifactMetadata metadata )
+ {
+ if ( metadataMap == null )
+ {
+ metadataMap = new HashMap<Object, ArtifactMetadata>();
+ }
+
+ ArtifactMetadata m = metadataMap.get( metadata.getKey() );
+ if ( m != null )
+ {
+ m.merge( metadata );
+ }
+ else
+ {
+ metadataMap.put( metadata.getKey(), metadata );
+ }
+ }
+
+ public Collection<ArtifactMetadata> getMetadataList()
+ {
+ if ( metadataMap == null )
+ {
+ return Collections.emptyList();
+ }
+
+ return metadataMap.values();
+ }
+
+ // ----------------------------------------------------------------------
+ // Object overrides
+ // ----------------------------------------------------------------------
+
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+ if ( getGroupId() != null )
+ {
+ sb.append( getGroupId() );
+ sb.append( ":" );
+ }
+ appendArtifactTypeClassifierString( sb );
+ sb.append( ":" );
+ if ( getBaseVersionInternal() != null )
+ {
+ sb.append( getBaseVersionInternal() );
+ }
+ else
+ {
+ sb.append( versionRange.toString() );
+ }
+ if ( scope != null )
+ {
+ sb.append( ":" );
+ sb.append( scope );
+ }
+ return sb.toString();
+ }
+
+ public int hashCode()
+ {
+ int result = 17;
+ result = 37 * result + groupId.hashCode();
+ result = 37 * result + artifactId.hashCode();
+ result = 37 * result + type.hashCode();
+ if ( version != null )
+ {
+ result = 37 * result + version.hashCode();
+ }
+ result = 37 * result + ( classifier != null ? classifier.hashCode() : 0 );
+ return result;
+ }
+
+ public boolean equals( Object o )
+ {
+ if ( o == this )
+ {
+ return true;
+ }
+
+ if ( !( o instanceof Artifact ) )
+ {
+ return false;
+ }
+
+ Artifact a = (Artifact) o;
+
+ if ( !a.getGroupId().equals( groupId ) )
+ {
+ return false;
+ }
+ else if ( !a.getArtifactId().equals( artifactId ) )
+ {
+ return false;
+ }
+ else if ( !a.getVersion().equals( version ) )
+ {
+ return false;
+ }
+ else if ( !a.getType().equals( type ) )
+ {
+ return false;
+ }
+ else if ( a.getClassifier() == null ? classifier != null : !a.getClassifier().equals( classifier ) )
+ {
+ return false;
+ }
+
+ // We don't consider the version range in the comparison, just the resolved version
+
+ return true;
+ }
+
+ public String getBaseVersion()
+ {
+ if ( baseVersion == null && version != null )
+ {
+ setBaseVersionInternal( version );
+ }
+
+ return baseVersion;
+ }
+
+ protected String getBaseVersionInternal()
+ {
+ if ( ( baseVersion == null ) && ( version != null ) )
+ {
+ setBaseVersionInternal( version );
+ }
+
+ return baseVersion;
+ }
+
+ public void setBaseVersion( String baseVersion )
+ {
+ setBaseVersionInternal( baseVersion );
+ }
+
+ protected void setBaseVersionInternal( String baseVersion )
+ {
+ Matcher m = VERSION_FILE_PATTERN.matcher( baseVersion );
+
+ if ( m.matches() )
+ {
+ this.baseVersion = m.group( 1 ) + "-" + SNAPSHOT_VERSION;
+ }
+ else
+ {
+ this.baseVersion = baseVersion;
+ }
+ }
+
+ public int compareTo( Artifact a )
+ {
+ int result = groupId.compareTo( a.getGroupId() );
+ if ( result == 0 )
+ {
+ result = artifactId.compareTo( a.getArtifactId() );
+ if ( result == 0 )
+ {
+ result = type.compareTo( a.getType() );
+ if ( result == 0 )
+ {
+ if ( classifier == null )
+ {
+ if ( a.getClassifier() != null )
+ {
+ result = 1;
+ }
+ }
+ else
+ {
+ if ( a.getClassifier() != null )
+ {
+ result = classifier.compareTo( a.getClassifier() );
+ }
+ else
+ {
+ result = -1;
+ }
+ }
+ if ( result == 0 )
+ {
+ // We don't consider the version range in the comparison, just the resolved version
+ result = new DefaultArtifactVersion( version ).compareTo(
+ new DefaultArtifactVersion( a.getVersion() ) );
+ }
+ }
+ }
+ }
+ return result;
+ }
+
+ public void updateVersion( String version, ArtifactRepository localRepository )
+ {
+ setResolvedVersion( version );
+ setFile( new File( localRepository.getBasedir(), localRepository.pathOf( this ) ) );
+ }
+
+ public String getDownloadUrl()
+ {
+ return downloadUrl;
+ }
+
+ public void setDownloadUrl( String downloadUrl )
+ {
+ this.downloadUrl = downloadUrl;
+ }
+
+ public ArtifactFilter getDependencyFilter()
+ {
+ return dependencyFilter;
+ }
+
+ public void setDependencyFilter( ArtifactFilter artifactFilter )
+ {
+ dependencyFilter = artifactFilter;
+ }
+
+ public ArtifactHandler getArtifactHandler()
+ {
+ return artifactHandler;
+ }
+
+ public List<String> getDependencyTrail()
+ {
+ return dependencyTrail;
+ }
+
+ public void setDependencyTrail( List<String> dependencyTrail )
+ {
+ this.dependencyTrail = dependencyTrail;
+ }
+
+ public void setScope( String scope )
+ {
+ this.scope = scope;
+ }
+
+ public VersionRange getVersionRange()
+ {
+ return versionRange;
+ }
+
+ public void setVersionRange( VersionRange versionRange )
+ {
+ this.versionRange = versionRange;
+ selectVersionFromNewRangeIfAvailable();
+ }
+
+ private void selectVersionFromNewRangeIfAvailable()
+ {
+ if ( ( versionRange != null ) && ( versionRange.getRecommendedVersion() != null ) )
+ {
+ selectVersion( versionRange.getRecommendedVersion().toString() );
+ }
+ else
+ {
+ version = null;
+ baseVersion = null;
+ }
+ }
+
+ public void selectVersion( String version )
+ {
+ this.version = version;
+ setBaseVersionInternal( version );
+ }
+
+ public void setGroupId( String groupId )
+ {
+ this.groupId = groupId;
+ }
+
+ public void setArtifactId( String artifactId )
+ {
+ this.artifactId = artifactId;
+ }
+
+ public boolean isSnapshot()
+ {
+ return getBaseVersion() != null
+ && ( getBaseVersion().endsWith( SNAPSHOT_VERSION ) || getBaseVersion().equals( LATEST_VERSION ) );
+ }
+
+ public void setResolved( boolean resolved )
+ {
+ this.resolved = resolved;
+ }
+
+ public boolean isResolved()
+ {
+ return resolved;
+ }
+
+ public void setResolvedVersion( String version )
+ {
+ this.version = version;
+ // retain baseVersion
+ }
+
+ public void setArtifactHandler( ArtifactHandler artifactHandler )
+ {
+ this.artifactHandler = artifactHandler;
+ }
+
+ public void setRelease( boolean release )
+ {
+ this.release = release;
+ }
+
+ public boolean isRelease()
+ {
+ return release;
+ }
+
+ public List<ArtifactVersion> getAvailableVersions()
+ {
+ return availableVersions;
+ }
+
+ public void setAvailableVersions( List<ArtifactVersion> availableVersions )
+ {
+ this.availableVersions = availableVersions;
+ }
+
+ public boolean isOptional()
+ {
+ return optional;
+ }
+
+ public ArtifactVersion getSelectedVersion()
+ throws OverConstrainedVersionException
+ {
+ return versionRange.getSelectedVersion( this );
+ }
+
+ public boolean isSelectedVersionKnown()
+ throws OverConstrainedVersionException
+ {
+ return versionRange.isSelectedVersionKnown( this );
+ }
+
+ public void setOptional( boolean optional )
+ {
+ this.optional = optional;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/InvalidArtifactRTException.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/InvalidArtifactRTException.java
new file mode 100644
index 00000000..adf656d1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/InvalidArtifactRTException.java
@@ -0,0 +1,100 @@
+package org.apache.maven.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Exception thrown when the identity of an artifact can not be established,
+ * eg. one of groupId, artifactId, version or type is null.
+ */
+public class InvalidArtifactRTException
+ extends RuntimeException
+{
+
+ private final String groupId;
+ private final String artifactId;
+ private final String version;
+ private final String type;
+ private final String baseMessage;
+
+ public InvalidArtifactRTException( String groupId,
+ String artifactId,
+ String version,
+ String type,
+ String message )
+ {
+ this.groupId = groupId;
+ this.artifactId = artifactId;
+ this.version = version;
+ this.type = type;
+ this.baseMessage = message;
+ }
+
+ public InvalidArtifactRTException( String groupId,
+ String artifactId,
+ String version,
+ String type,
+ String message,
+ Throwable cause )
+ {
+ super( cause );
+
+ this.groupId = groupId;
+ this.artifactId = artifactId;
+ this.version = version;
+ this.type = type;
+ this.baseMessage = message;
+ }
+
+ public String getMessage()
+ {
+ return "For artifact {" + getArtifactKey() + "}: " + getBaseMessage();
+ }
+
+ public String getBaseMessage()
+ {
+ return baseMessage;
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+
+ public String getVersion()
+ {
+ return version;
+ }
+
+ public String getArtifactKey()
+ {
+ return groupId + ":" + artifactId + ":" + version + ":" + type;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/handler/ArtifactHandler.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/handler/ArtifactHandler.java
new file mode 100644
index 00000000..a9d60f2e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/handler/ArtifactHandler.java
@@ -0,0 +1,42 @@
+package org.apache.maven.artifact.handler;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ */
+public interface ArtifactHandler
+{
+ String ROLE = ArtifactHandler.class.getName();
+
+ String getExtension();
+
+ String getDirectory();
+
+ String getClassifier();
+
+ String getPackaging();
+
+ boolean isIncludesDependencies();
+
+ String getLanguage();
+
+ boolean isAddedToClasspath();
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java
new file mode 100644
index 00000000..452c9f4a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java
@@ -0,0 +1,27 @@
+package org.apache.maven.artifact.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+@Deprecated
+public interface ArtifactMetadata
+ extends org.apache.maven.repository.legacy.metadata.ArtifactMetadata
+{
+ void merge( ArtifactMetadata metadata );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java
new file mode 100644
index 00000000..9ef30387
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java
@@ -0,0 +1,135 @@
+package org.apache.maven.artifact.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.repository.Proxy;
+
+/**
+ * Abstraction of an artifact repository. Artifact repositories can be remote, local, or even build reactor or
+ * IDE workspace.
+ */
+public interface ArtifactRepository
+{
+ String pathOf( Artifact artifact );
+
+ String pathOfRemoteRepositoryMetadata( ArtifactMetadata artifactMetadata );
+
+ String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository );
+
+ String getUrl();
+
+ void setUrl( String url );
+
+ String getBasedir();
+
+ String getProtocol();
+
+ String getId();
+
+ void setId( String id );
+
+ ArtifactRepositoryPolicy getSnapshots();
+
+ void setSnapshotUpdatePolicy( ArtifactRepositoryPolicy policy );
+
+ ArtifactRepositoryPolicy getReleases();
+
+ void setReleaseUpdatePolicy( ArtifactRepositoryPolicy policy );
+
+ ArtifactRepositoryLayout getLayout();
+
+ void setLayout( ArtifactRepositoryLayout layout );
+
+ String getKey();
+
+ @Deprecated
+ boolean isUniqueVersion();
+
+ @Deprecated
+ boolean isBlacklisted();
+
+ @Deprecated
+ void setBlacklisted( boolean blackListed );
+
+ //
+ // New interface methods for the repository system.
+ //
+ /**
+ *
+ * @param artifact
+ * @return
+ * @since 3.0-alpha-3
+ */
+ Artifact find( Artifact artifact );
+
+ /**
+ * Finds the versions of the specified artifact that are available in this repository.
+ *
+ * @param artifact The artifact whose available versions should be determined, must not be {@code null}.
+ * @return The available versions of the artifact or an empty list if none, never {@code null}.
+ * @since 3.0-alpha-3
+ */
+ List<String> findVersions( Artifact artifact );
+
+ /**
+ * Indicates whether this repository is backed by actual projects. For instance, the build reactor or IDE workspace
+ * are examples of such repositories.
+ *
+ * @return {@code true} if the repository is backed by actual projects, {@code false} otherwise.
+ * @since 3.0-beta-1
+ */
+ boolean isProjectAware();
+
+ /**
+ * @since 3.0-alpha-3
+ */
+ void setAuthentication( Authentication authentication );
+ /**
+ * @since 3.0-alpha-3
+ */
+ Authentication getAuthentication();
+
+ /**
+ * @since 3.0-alpha-3
+ */
+ void setProxy( Proxy proxy );
+ /**
+ * @since 3.0-alpha-3
+ */
+ Proxy getProxy();
+
+ /**
+ * @since 3.0.3
+ * @return the repositories mirrored by the actual one
+ */
+ List<ArtifactRepository> getMirroredRepositories();
+
+ /**
+ * @since 3.0.3
+ * @param mirroredRepositories the repositories that the actual one mirrors
+ */
+ void setMirroredRepositories( List<ArtifactRepository> mirroredRepositories );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java
new file mode 100644
index 00000000..b6cd8f39
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java
@@ -0,0 +1,222 @@
+package org.apache.maven.artifact.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * Describes a set of policies for a repository to use under certain conditions.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class ArtifactRepositoryPolicy
+{
+ public static final String UPDATE_POLICY_NEVER = "never";
+
+ public static final String UPDATE_POLICY_ALWAYS = "always";
+
+ public static final String UPDATE_POLICY_DAILY = "daily";
+
+ public static final String UPDATE_POLICY_INTERVAL = "interval";
+
+ public static final String CHECKSUM_POLICY_FAIL = "fail";
+
+ public static final String CHECKSUM_POLICY_WARN = "warn";
+
+ public static final String CHECKSUM_POLICY_IGNORE = "ignore";
+
+ private boolean enabled;
+
+ private String updatePolicy;
+
+ private String checksumPolicy;
+
+ public ArtifactRepositoryPolicy()
+ {
+ this( true, null, null );
+ }
+
+ public ArtifactRepositoryPolicy( ArtifactRepositoryPolicy policy )
+ {
+ this( policy.isEnabled(), policy.getUpdatePolicy(), policy.getChecksumPolicy() );
+ }
+
+ public ArtifactRepositoryPolicy( boolean enabled, String updatePolicy, String checksumPolicy )
+ {
+ this.enabled = enabled;
+
+ if ( updatePolicy == null )
+ {
+ updatePolicy = UPDATE_POLICY_DAILY;
+ }
+ this.updatePolicy = updatePolicy;
+
+ if ( checksumPolicy == null )
+ {
+ checksumPolicy = CHECKSUM_POLICY_WARN;
+ }
+ this.checksumPolicy = checksumPolicy;
+ }
+
+ public void setEnabled( boolean enabled )
+ {
+ this.enabled = enabled;
+ }
+
+ public void setUpdatePolicy( String updatePolicy )
+ {
+ if ( updatePolicy != null )
+ {
+ this.updatePolicy = updatePolicy;
+ }
+ }
+
+ public void setChecksumPolicy( String checksumPolicy )
+ {
+ if ( checksumPolicy != null )
+ {
+ this.checksumPolicy = checksumPolicy;
+ }
+ }
+
+ public boolean isEnabled()
+ {
+ return enabled;
+ }
+
+ public String getUpdatePolicy()
+ {
+ return updatePolicy;
+ }
+
+ public String getChecksumPolicy()
+ {
+ return checksumPolicy;
+ }
+
+ public boolean checkOutOfDate( Date lastModified )
+ {
+ boolean checkForUpdates = false;
+
+ if ( UPDATE_POLICY_ALWAYS.equals( updatePolicy ) )
+ {
+ checkForUpdates = true;
+ }
+ else if ( UPDATE_POLICY_DAILY.equals( updatePolicy ) )
+ {
+ // Get local midnight boundary
+ Calendar cal = Calendar.getInstance();
+
+ cal.set( Calendar.HOUR_OF_DAY, 0 );
+ cal.set( Calendar.MINUTE, 0 );
+ cal.set( Calendar.SECOND, 0 );
+ cal.set( Calendar.MILLISECOND, 0 );
+
+ if ( cal.getTime().after( lastModified ) )
+ {
+ checkForUpdates = true;
+ }
+ }
+ else if ( updatePolicy.startsWith( UPDATE_POLICY_INTERVAL ) )
+ {
+ String s = updatePolicy.substring( UPDATE_POLICY_INTERVAL.length() + 1 );
+ int minutes = Integer.valueOf( s );
+ Calendar cal = Calendar.getInstance();
+ cal.add( Calendar.MINUTE, -minutes );
+ if ( cal.getTime().after( lastModified ) )
+ {
+ checkForUpdates = true;
+ }
+ }
+ // else assume "never"
+ return checkForUpdates;
+ }
+
+ @Override
+ public String toString()
+ {
+ StringBuilder buffer = new StringBuilder( 64 );
+ buffer.append( "{enabled=" );
+ buffer.append( enabled );
+ buffer.append( ", checksums=" );
+ buffer.append( checksumPolicy );
+ buffer.append( ", updates=" );
+ buffer.append( updatePolicy );
+ buffer.append( "}" );
+ return buffer.toString();
+ }
+
+ public void merge( ArtifactRepositoryPolicy policy )
+ {
+ if ( policy != null && policy.isEnabled() )
+ {
+ setEnabled( true );
+
+ if ( ordinalOfCksumPolicy( policy.getChecksumPolicy() ) < ordinalOfCksumPolicy( getChecksumPolicy() ) )
+ {
+ setChecksumPolicy( policy.getChecksumPolicy() );
+ }
+
+ if ( ordinalOfUpdatePolicy( policy.getUpdatePolicy() ) < ordinalOfUpdatePolicy( getUpdatePolicy() ) )
+ {
+ setUpdatePolicy( policy.getUpdatePolicy() );
+ }
+ }
+ }
+
+ private int ordinalOfCksumPolicy( String policy )
+ {
+ if ( ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL.equals( policy ) )
+ {
+ return 2;
+ }
+ else if ( ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE.equals( policy ) )
+ {
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+ }
+
+ private int ordinalOfUpdatePolicy( String policy )
+ {
+ if ( ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY.equals( policy ) )
+ {
+ return 1440;
+ }
+ else if ( ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS.equals( policy ) )
+ {
+ return 0;
+ }
+ else if ( policy != null && policy.startsWith( ArtifactRepositoryPolicy.UPDATE_POLICY_INTERVAL ) )
+ {
+ String s = policy.substring( UPDATE_POLICY_INTERVAL.length() + 1 );
+ return Integer.valueOf( s );
+ }
+ else
+ {
+ return Integer.MAX_VALUE;
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/Authentication.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/Authentication.java
new file mode 100644
index 00000000..323fb25b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/Authentication.java
@@ -0,0 +1,126 @@
+package org.apache.maven.artifact.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public class Authentication
+{
+
+ private String privateKey;
+
+ private String passphrase;
+
+ public Authentication( String userName, String password )
+ {
+ this.username = userName;
+ this.password = password;
+ }
+
+ /**
+ * Username used to login to the host
+ */
+ private String username;
+
+ /**
+ * Password associated with the login
+ */
+ private String password;
+
+ /**
+ * Get the user's password which is used when connecting to the repository.
+ *
+ * @return password of user
+ */
+ public String getPassword()
+ {
+ return password;
+ }
+
+ /**
+ * Set the user's password which is used when connecting to the repository.
+ *
+ * @param password password of the user
+ */
+ public void setPassword( String password )
+ {
+ this.password = password;
+ }
+
+ /**
+ * Get the username used to access the repository.
+ *
+ * @return username at repository
+ */
+ public String getUsername()
+ {
+ return username;
+ }
+
+ /**
+ * Set username used to access the repository.
+ *
+ * @param userName the username used to access repository
+ */
+ public void setUsername( final String userName )
+ {
+ this.username = userName;
+ }
+
+ /**
+ * Get the passphrase of the private key file. The passphrase is used only when host/protocol supports
+ * authentication via exchange of private/public keys and private key was used for authentication.
+ *
+ * @return passphrase of the private key file
+ */
+ public String getPassphrase()
+ {
+ return passphrase;
+ }
+
+ /**
+ * Set the passphrase of the private key file.
+ *
+ * @param passphrase passphrase of the private key file
+ */
+ public void setPassphrase( final String passphrase )
+ {
+ this.passphrase = passphrase;
+ }
+
+ /**
+ * Get the absolute path to the private key file.
+ *
+ * @return absolute path to private key
+ */
+ public String getPrivateKey()
+ {
+ return privateKey;
+ }
+
+ /**
+ * Set the absolute path to private key file.
+ *
+ * @param privateKey path to private key in local file system
+ */
+ public void setPrivateKey( final String privateKey )
+ {
+ this.privateKey = privateKey;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout.java
new file mode 100644
index 00000000..2a18c863
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout.java
@@ -0,0 +1,38 @@
+package org.apache.maven.artifact.repository.layout;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/** @author jdcasey */
+public interface ArtifactRepositoryLayout
+{
+ String ROLE = ArtifactRepositoryLayout.class.getName();
+
+ String getId();
+
+ String pathOf( Artifact artifact );
+
+ String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository );
+
+ String pathOfRemoteRepositoryMetadata( ArtifactMetadata metadata );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout2.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout2.java
new file mode 100644
index 00000000..c0544e5c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout2.java
@@ -0,0 +1,31 @@
+package org.apache.maven.artifact.repository.layout;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+
+public interface ArtifactRepositoryLayout2
+ extends ArtifactRepositoryLayout
+{
+
+ ArtifactRepository newMavenArtifactRepository( String id, String url, ArtifactRepositoryPolicy snapshots,
+ ArtifactRepositoryPolicy releases );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataStoreException.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataStoreException.java
new file mode 100644
index 00000000..38488522
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataStoreException.java
@@ -0,0 +1,40 @@
+package org.apache.maven.artifact.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Problem storing the repository metadata in the local repository.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class RepositoryMetadataStoreException
+ extends Exception
+{
+ public RepositoryMetadataStoreException( String message )
+ {
+ super( message );
+ }
+
+ public RepositoryMetadataStoreException( String message,
+ Exception e )
+ {
+ super( message, e );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java
new file mode 100644
index 00000000..66e147c2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java
@@ -0,0 +1,347 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+
+/**
+ * Base class for artifact resolution exceptions.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class AbstractArtifactResolutionException
+ extends Exception
+{
+ private String groupId;
+
+ private String artifactId;
+
+ private String version;
+
+ private String type;
+
+ private String classifier;
+
+ private Artifact artifact;
+
+ private List<ArtifactRepository> remoteRepositories;
+
+ private final String originalMessage;
+
+ private final String path;
+
+ static final String LS = System.getProperty( "line.separator" );
+
+ @SuppressWarnings( "checkstyle:parameternumber" )
+ protected AbstractArtifactResolutionException( String message,
+ String groupId,
+ String artifactId,
+ String version,
+ String type,
+ String classifier,
+ List<ArtifactRepository> remoteRepositories,
+ List<String> path )
+ {
+ this( message, groupId, artifactId, version, type, classifier, remoteRepositories, path, null );
+ }
+
+ @SuppressWarnings( "checkstyle:parameternumber" )
+ protected AbstractArtifactResolutionException( String message,
+ String groupId,
+ String artifactId,
+ String version,
+ String type,
+ String classifier,
+ List<ArtifactRepository> remoteRepositories,
+ List<String> path,
+ Throwable t )
+ {
+ super( constructMessageBase( message, groupId, artifactId, version, type, remoteRepositories, path ), t );
+
+ this.originalMessage = message;
+ this.groupId = groupId;
+ this.artifactId = artifactId;
+ this.type = type;
+ this.classifier = classifier;
+ this.version = version;
+ this.remoteRepositories = remoteRepositories;
+ this.path = constructArtifactPath( path, "" );
+ }
+
+ protected AbstractArtifactResolutionException( String message,
+ Artifact artifact )
+ {
+ this( message, artifact, null );
+ }
+
+ protected AbstractArtifactResolutionException( String message,
+ Artifact artifact,
+ List<ArtifactRepository> remoteRepositories )
+ {
+ this( message, artifact, remoteRepositories, null );
+ }
+
+ protected AbstractArtifactResolutionException( String message,
+ Artifact artifact,
+ List<ArtifactRepository> remoteRepositories,
+ Throwable t )
+ {
+ this( message, artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getType(),
+ artifact.getClassifier(), remoteRepositories, artifact.getDependencyTrail(), t );
+ this.artifact = artifact;
+ }
+
+ public Artifact getArtifact()
+ {
+ return artifact;
+ }
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ public String getVersion()
+ {
+ return version;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+
+ /** @return the classifier */
+ public String getClassifier()
+ {
+ return this.classifier;
+ }
+
+ /** @return the path */
+ public String getPath()
+ {
+ return this.path;
+ }
+
+ public List<ArtifactRepository> getRemoteRepositories()
+ {
+ return remoteRepositories;
+ }
+
+ public String getOriginalMessage()
+ {
+ return originalMessage;
+ }
+
+ protected static String constructArtifactPath( List<String> path,
+ String indentation )
+ {
+ StringBuilder sb = new StringBuilder();
+
+ if ( path != null )
+ {
+ sb.append( LS );
+ sb.append( indentation );
+ sb.append( "Path to dependency: " );
+ sb.append( LS );
+ int num = 1;
+ for ( Iterator<String> i = path.iterator(); i.hasNext(); num++ )
+ {
+ sb.append( indentation );
+ sb.append( "\t" );
+ sb.append( num );
+ sb.append( ") " );
+ sb.append( i.next() );
+ sb.append( LS );
+ }
+ }
+
+ return sb.toString();
+ }
+
+ private static String constructMessageBase( String message,
+ String groupId,
+ String artifactId,
+ String version,
+ String type,
+ List<ArtifactRepository> remoteRepositories,
+ List<String> path )
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( message );
+
+ if ( message == null || !message.contains( "from the specified remote repositories:" ) )
+ {
+ sb.append( LS );
+ sb.append( " " ).append( groupId ).append( ":" ).append( artifactId ).append( ":" ).append( type ).append(
+ ":" ).append( version );
+ sb.append( LS );
+ if ( remoteRepositories != null )
+ {
+ sb.append( LS );
+ sb.append( "from the specified remote repositories:" );
+ sb.append( LS ).append( " " );
+
+ if ( remoteRepositories.isEmpty() )
+ {
+ sb.append( "(none)" );
+ }
+
+ for ( Iterator<ArtifactRepository> i = remoteRepositories.iterator(); i.hasNext(); )
+ {
+ ArtifactRepository remoteRepository = i.next();
+
+ sb.append( remoteRepository.getId() );
+ sb.append( " (" );
+ sb.append( remoteRepository.getUrl() );
+
+ ArtifactRepositoryPolicy releases = remoteRepository.getReleases();
+ if ( releases != null )
+ {
+ sb.append( ", releases=" ).append( releases.isEnabled() );
+ }
+
+ ArtifactRepositoryPolicy snapshots = remoteRepository.getSnapshots();
+ if ( snapshots != null )
+ {
+ sb.append( ", snapshots=" ).append( snapshots.isEnabled() );
+ }
+
+ sb.append( ")" );
+ if ( i.hasNext() )
+ {
+ sb.append( "," ).append( LS ).append( " " );
+ }
+ }
+ }
+
+ sb.append( constructArtifactPath( path, "" ) );
+ sb.append( LS );
+ }
+
+ return sb.toString();
+ }
+
+ @SuppressWarnings( "checkstyle:parameternumber" )
+ protected static String constructMissingArtifactMessage( String message,
+ String indentation,
+ String groupId,
+ String artifactId,
+ String version,
+ String type,
+ String classifier,
+ String downloadUrl,
+ List<String> path )
+ {
+ StringBuilder sb = new StringBuilder( message );
+
+ if ( !"pom".equals( type ) )
+ {
+ if ( downloadUrl != null )
+ {
+ sb.append( LS );
+ sb.append( LS );
+ sb.append( indentation );
+ sb.append( "Try downloading the file manually from: " );
+ sb.append( LS );
+ sb.append( indentation );
+ sb.append( " " );
+ sb.append( downloadUrl );
+ }
+ else
+ {
+ sb.append( LS );
+ sb.append( LS );
+ sb.append( indentation );
+ sb.append( "Try downloading the file manually from the project website." );
+ }
+
+ sb.append( LS );
+ sb.append( LS );
+ sb.append( indentation );
+ sb.append( "Then, install it using the command: " );
+ sb.append( LS );
+ sb.append( indentation );
+ sb.append( " mvn install:install-file -DgroupId=" );
+ sb.append( groupId );
+ sb.append( " -DartifactId=" );
+ sb.append( artifactId );
+ sb.append( " -Dversion=" );
+ sb.append( version );
+
+ //insert classifier only if it was used in the artifact
+ if ( classifier != null && !classifier.equals( "" ) )
+ {
+ sb.append( " -Dclassifier=" );
+ sb.append( classifier );
+ }
+ sb.append( " -Dpackaging=" );
+ sb.append( type );
+ sb.append( " -Dfile=/path/to/file" );
+ sb.append( LS );
+
+ // If people want to deploy it
+ sb.append( LS );
+ sb.append( indentation );
+ sb.append( "Alternatively, if you host your own repository you can deploy the file there: " );
+ sb.append( LS );
+ sb.append( indentation );
+ sb.append( " mvn deploy:deploy-file -DgroupId=" );
+ sb.append( groupId );
+ sb.append( " -DartifactId=" );
+ sb.append( artifactId );
+ sb.append( " -Dversion=" );
+ sb.append( version );
+
+ //insert classifier only if it was used in the artifact
+ if ( classifier != null && !classifier.equals( "" ) )
+ {
+ sb.append( " -Dclassifier=" );
+ sb.append( classifier );
+ }
+ sb.append( " -Dpackaging=" );
+ sb.append( type );
+ sb.append( " -Dfile=/path/to/file" );
+ sb.append( " -Durl=[url] -DrepositoryId=[id]" );
+ sb.append( LS );
+ }
+
+ sb.append( constructArtifactPath( path, indentation ) );
+ sb.append( LS );
+
+ return sb.toString();
+ }
+
+ public String getArtifactPath()
+ {
+ return path;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java
new file mode 100644
index 00000000..76f7b584
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java
@@ -0,0 +1,85 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/**
+ * @author Jason van Zyl
+ */
+public class ArtifactNotFoundException
+ extends AbstractArtifactResolutionException
+{
+ private String downloadUrl;
+
+ protected ArtifactNotFoundException( String message, Artifact artifact,
+ List<ArtifactRepository> remoteRepositories )
+ {
+ super( message, artifact, remoteRepositories );
+ }
+
+ public ArtifactNotFoundException( String message, Artifact artifact )
+ {
+ this( message, artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getType(),
+ artifact.getClassifier(), null, artifact.getDownloadUrl(), artifact.getDependencyTrail() );
+ }
+
+ protected ArtifactNotFoundException( String message, Artifact artifact,
+ List<ArtifactRepository> remoteRepositories, Throwable cause )
+ {
+ this( message, artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getType(),
+ artifact.getClassifier(), remoteRepositories, artifact.getDownloadUrl(), artifact.getDependencyTrail(),
+ cause );
+ }
+
+ @SuppressWarnings( "checkstyle:parameternumber" )
+ public ArtifactNotFoundException( String message, String groupId, String artifactId, String version, String type,
+ String classifier, List<ArtifactRepository> remoteRepositories,
+ String downloadUrl, List<String> path, Throwable cause )
+ {
+ super( constructMissingArtifactMessage( message, "", groupId, artifactId, version, type, classifier,
+ downloadUrl, path ), groupId, artifactId, version, type, classifier,
+ remoteRepositories, null, cause );
+
+ this.downloadUrl = downloadUrl;
+ }
+
+ @SuppressWarnings( "checkstyle:parameternumber" )
+ private ArtifactNotFoundException( String message, String groupId, String artifactId, String version, String type,
+ String classifier, List<ArtifactRepository> remoteRepositories,
+ String downloadUrl, List<String> path )
+ {
+ super( constructMissingArtifactMessage( message, "", groupId, artifactId, version, type, classifier,
+ downloadUrl, path ), groupId, artifactId, version, type, classifier,
+ remoteRepositories, null );
+
+ this.downloadUrl = downloadUrl;
+ }
+
+ public String getDownloadUrl()
+ {
+ return downloadUrl;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java
new file mode 100644
index 00000000..074d812c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java
@@ -0,0 +1,68 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/**
+ * @author Jason van Zyl
+ */
+public class ArtifactResolutionException
+ extends AbstractArtifactResolutionException
+{
+ @SuppressWarnings( "checkstyle:parameternumber" )
+ public ArtifactResolutionException( String message, String groupId, String artifactId, String version, String type,
+ String classifier, List<ArtifactRepository> remoteRepositories,
+ List<String> path, Throwable t )
+ {
+ super( message, groupId, artifactId, version, type, classifier, remoteRepositories, path, t );
+ }
+
+ public ArtifactResolutionException( String message, String groupId, String artifactId, String version, String type,
+ String classifier, Throwable t )
+ {
+ super( message, groupId, artifactId, version, type, classifier, null, null, t );
+ }
+
+ public ArtifactResolutionException( String message, Artifact artifact )
+ {
+ super( message, artifact );
+ }
+
+ public ArtifactResolutionException( String message, Artifact artifact, List<ArtifactRepository> remoteRepositories )
+ {
+ super( message, artifact, remoteRepositories );
+ }
+
+ public ArtifactResolutionException( String message, Artifact artifact, Throwable cause )
+ {
+ super( message, artifact, null, cause );
+ }
+
+ public ArtifactResolutionException( String message, Artifact artifact, List<ArtifactRepository> remoteRepositories,
+ Throwable cause )
+ {
+ super( message, artifact, remoteRepositories, cause );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/CyclicDependencyException.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/CyclicDependencyException.java
new file mode 100644
index 00000000..d3706179
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/CyclicDependencyException.java
@@ -0,0 +1,45 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * Indiciates a cycle in the dependency graph.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class CyclicDependencyException
+ extends ArtifactResolutionException
+{
+ private Artifact artifact;
+
+ public CyclicDependencyException( String message,
+ Artifact artifact )
+ {
+ super( message, artifact );
+ this.artifact = artifact;
+ }
+
+ public Artifact getArtifact()
+ {
+ return artifact;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/MultipleArtifactsNotFoundException.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/MultipleArtifactsNotFoundException.java
new file mode 100644
index 00000000..0f13db15
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/MultipleArtifactsNotFoundException.java
@@ -0,0 +1,122 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/**
+ * Exception caused when one or more artifacts can not be resolved because they are not found in the
+ * local or remote repositories.
+ */
+public class MultipleArtifactsNotFoundException
+ extends ArtifactResolutionException
+{
+ private final List<Artifact> resolvedArtifacts;
+ private final List<Artifact> missingArtifacts;
+
+ /** @deprecated use {@link #MultipleArtifactsNotFoundException(Artifact, List, List, List)} */
+ @Deprecated
+ public MultipleArtifactsNotFoundException( Artifact originatingArtifact,
+ List<Artifact> missingArtifacts,
+ List<ArtifactRepository> remoteRepositories )
+ {
+ this( originatingArtifact, new ArrayList<Artifact>(), missingArtifacts, remoteRepositories );
+ }
+
+ /**
+ * Create an instance of the exception with allrequired information.
+ *
+ * @param originatingArtifact the artifact that was being resolved
+ * @param resolvedArtifacts artifacts that could be resolved
+ * @param missingArtifacts artifacts that could not be resolved
+ * @param remoteRepositories remote repositories where the missing artifacts were not found
+ */
+ public MultipleArtifactsNotFoundException( Artifact originatingArtifact,
+ List<Artifact> resolvedArtifacts,
+ List<Artifact> missingArtifacts,
+ List<ArtifactRepository> remoteRepositories )
+ {
+ super( constructMessage( missingArtifacts ), originatingArtifact, remoteRepositories );
+ this.resolvedArtifacts = resolvedArtifacts;
+ this.missingArtifacts = missingArtifacts;
+ }
+
+ /**
+ * artifacts that could be resolved
+ *
+ * @return {@link List} of {@link Artifact}
+ */
+ public List<Artifact> getResolvedArtifacts()
+ {
+ return resolvedArtifacts;
+ }
+
+ /**
+ * artifacts that could NOT be resolved
+ *
+ * @return {@link List} of {@link Artifact}
+ */
+ public List<Artifact> getMissingArtifacts()
+ {
+ return missingArtifacts;
+ }
+
+ private static String constructMessage( List<Artifact> artifacts )
+ {
+ StringBuilder buffer = new StringBuilder( "Missing:\n" );
+
+ buffer.append( "----------\n" );
+
+ int counter = 0;
+
+ for ( Artifact artifact : artifacts )
+ {
+ String message = ( ++counter ) + ") " + artifact.getId();
+
+ buffer.append( constructMissingArtifactMessage( message, " ", artifact.getGroupId(),
+ artifact.getArtifactId(), artifact.getVersion(), artifact.getType(), artifact.getClassifier(),
+ artifact.getDownloadUrl(), artifact.getDependencyTrail() ) );
+ }
+
+ buffer.append( "----------\n" );
+
+ int size = artifacts.size();
+
+ buffer.append( size ).append( " required artifact" );
+
+ if ( size > 1 )
+ {
+ buffer.append( "s are" );
+ }
+ else
+ {
+ buffer.append( " is" );
+ }
+
+ buffer.append( " missing.\n\nfor artifact: " );
+
+ return buffer.toString();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/filter/ArtifactFilter.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/filter/ArtifactFilter.java
new file mode 100644
index 00000000..27b08a88
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/filter/ArtifactFilter.java
@@ -0,0 +1,30 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ */
+public interface ArtifactFilter
+{
+ boolean include( Artifact artifact );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ArtifactVersion.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ArtifactVersion.java
new file mode 100644
index 00000000..5b516a91
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ArtifactVersion.java
@@ -0,0 +1,42 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Describes an artifact version in terms of its components, converts it to/from a string and
+ * compares two versions.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public interface ArtifactVersion
+ extends Comparable<ArtifactVersion>
+{
+ int getMajorVersion();
+
+ int getMinorVersion();
+
+ int getIncrementalVersion();
+
+ int getBuildNumber();
+
+ String getQualifier();
+
+ void parseVersion( String version );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java
new file mode 100644
index 00000000..67a46960
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java
@@ -0,0 +1,503 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Properties;
+import java.util.Stack;
+
+/**
+ * Generic implementation of version comparison.
+ *
+ * <p>Features:
+ * <ul>
+ * <li>mixing of '<code>-</code>' (dash) and '<code>.</code>' (dot) separators,</li>
+ * <li>transition between characters and digits also constitutes a separator:
+ * <code>1.0alpha1 =&gt; [1, 0, alpha, 1]</code></li>
+ * <li>unlimited number of version components,</li>
+ * <li>version components in the text can be digits or strings,</li>
+ * <li>strings are checked for well-known qualifiers and the qualifier ordering is used for version ordering.
+ * Well-known qualifiers (case insensitive) are:<ul>
+ * <li><code>alpha</code> or <code>a</code></li>
+ * <li><code>beta</code> or <code>b</code></li>
+ * <li><code>milestone</code> or <code>m</code></li>
+ * <li><code>rc</code> or <code>cr</code></li>
+ * <li><code>snapshot</code></li>
+ * <li><code>(the empty string)</code> or <code>ga</code> or <code>final</code></li>
+ * <li><code>sp</code></li>
+ * </ul>
+ * Unknown qualifiers are considered after known qualifiers, with lexical order (always case insensitive),
+ * </li>
+ * <li>a dash usually precedes a qualifier, and is always less important than something preceded with a dot.</li>
+ * </ul></p>
+ *
+ * @see <a href="https://cwiki.apache.org/confluence/display/MAVENOLD/Versioning">"Versioning" on Maven Wiki</a>
+ * @author <a href="mailto:kenney@apache.org">Kenney Westerhof</a>
+ * @author <a href="mailto:hboutemy@apache.org">Hervé Boutemy</a>
+ */
+public class ComparableVersion
+ implements Comparable<ComparableVersion>
+{
+ private String value;
+
+ private String canonical;
+
+ private ListItem items;
+
+ private interface Item
+ {
+ int INTEGER_ITEM = 0;
+ int STRING_ITEM = 1;
+ int LIST_ITEM = 2;
+
+ int compareTo( Item item );
+
+ int getType();
+
+ boolean isNull();
+ }
+
+ /**
+ * Represents a numeric item in the version item list.
+ */
+ private static class IntegerItem
+ implements Item
+ {
+ private static final BigInteger BIG_INTEGER_ZERO = new BigInteger( "0" );
+
+ private final BigInteger value;
+
+ public static final IntegerItem ZERO = new IntegerItem();
+
+ private IntegerItem()
+ {
+ this.value = BIG_INTEGER_ZERO;
+ }
+
+ public IntegerItem( String str )
+ {
+ this.value = new BigInteger( str );
+ }
+
+ public int getType()
+ {
+ return INTEGER_ITEM;
+ }
+
+ public boolean isNull()
+ {
+ return BIG_INTEGER_ZERO.equals( value );
+ }
+
+ public int compareTo( Item item )
+ {
+ if ( item == null )
+ {
+ return BIG_INTEGER_ZERO.equals( value ) ? 0 : 1; // 1.0 == 1, 1.1 > 1
+ }
+
+ switch ( item.getType() )
+ {
+ case INTEGER_ITEM:
+ return value.compareTo( ( (IntegerItem) item ).value );
+
+ case STRING_ITEM:
+ return 1; // 1.1 > 1-sp
+
+ case LIST_ITEM:
+ return 1; // 1.1 > 1-1
+
+ default:
+ throw new RuntimeException( "invalid item: " + item.getClass() );
+ }
+ }
+
+ public String toString()
+ {
+ return value.toString();
+ }
+ }
+
+ /**
+ * Represents a string in the version item list, usually a qualifier.
+ */
+ private static class StringItem
+ implements Item
+ {
+ private static final String[] QUALIFIERS = { "alpha", "beta", "milestone", "rc", "snapshot", "", "sp" };
+
+ @SuppressWarnings( "checkstyle:constantname" )
+ private static final List<String> _QUALIFIERS = Arrays.asList( QUALIFIERS );
+
+ private static final Properties ALIASES = new Properties();
+ static
+ {
+ ALIASES.put( "ga", "" );
+ ALIASES.put( "final", "" );
+ ALIASES.put( "cr", "rc" );
+ }
+
+ /**
+ * A comparable value for the empty-string qualifier. This one is used to determine if a given qualifier makes
+ * the version older than one without a qualifier, or more recent.
+ */
+ private static final String RELEASE_VERSION_INDEX = String.valueOf( _QUALIFIERS.indexOf( "" ) );
+
+ private String value;
+
+ public StringItem( String value, boolean followedByDigit )
+ {
+ if ( followedByDigit && value.length() == 1 )
+ {
+ // a1 = alpha-1, b1 = beta-1, m1 = milestone-1
+ switch ( value.charAt( 0 ) )
+ {
+ case 'a':
+ value = "alpha";
+ break;
+ case 'b':
+ value = "beta";
+ break;
+ case 'm':
+ value = "milestone";
+ break;
+ default:
+ }
+ }
+ this.value = ALIASES.getProperty( value , value );
+ }
+
+ public int getType()
+ {
+ return STRING_ITEM;
+ }
+
+ public boolean isNull()
+ {
+ return ( comparableQualifier( value ).compareTo( RELEASE_VERSION_INDEX ) == 0 );
+ }
+
+ /**
+ * Returns a comparable value for a qualifier.
+ *
+ * This method takes into account the ordering of known qualifiers then unknown qualifiers with lexical
+ * ordering.
+ *
+ * just returning an Integer with the index here is faster, but requires a lot of if/then/else to check for -1
+ * or QUALIFIERS.size and then resort to lexical ordering. Most comparisons are decided by the first character,
+ * so this is still fast. If more characters are needed then it requires a lexical sort anyway.
+ *
+ * @param qualifier
+ * @return an equivalent value that can be used with lexical comparison
+ */
+ public static String comparableQualifier( String qualifier )
+ {
+ int i = _QUALIFIERS.indexOf( qualifier );
+
+ return i == -1 ? ( _QUALIFIERS.size() + "-" + qualifier ) : String.valueOf( i );
+ }
+
+ public int compareTo( Item item )
+ {
+ if ( item == null )
+ {
+ // 1-rc < 1, 1-ga > 1
+ return comparableQualifier( value ).compareTo( RELEASE_VERSION_INDEX );
+ }
+ switch ( item.getType() )
+ {
+ case INTEGER_ITEM:
+ return -1; // 1.any < 1.1 ?
+
+ case STRING_ITEM:
+ return comparableQualifier( value ).compareTo( comparableQualifier( ( (StringItem) item ).value ) );
+
+ case LIST_ITEM:
+ return -1; // 1.any < 1-1
+
+ default:
+ throw new RuntimeException( "invalid item: " + item.getClass() );
+ }
+ }
+
+ public String toString()
+ {
+ return value;
+ }
+ }
+
+ /**
+ * Represents a version list item. This class is used both for the global item list and for sub-lists (which start
+ * with '-(number)' in the version specification).
+ */
+ private static class ListItem
+ extends ArrayList<Item>
+ implements Item
+ {
+ public int getType()
+ {
+ return LIST_ITEM;
+ }
+
+ public boolean isNull()
+ {
+ return ( size() == 0 );
+ }
+
+ void normalize()
+ {
+ for ( int i = size() - 1; i >= 0; i-- )
+ {
+ Item lastItem = get( i );
+
+ if ( lastItem.isNull() )
+ {
+ // remove null trailing items: 0, "", empty list
+ remove( i );
+ }
+ else if ( !( lastItem instanceof ListItem ) )
+ {
+ break;
+ }
+ }
+ }
+
+ public int compareTo( Item item )
+ {
+ if ( item == null )
+ {
+ if ( size() == 0 )
+ {
+ return 0; // 1-0 = 1- (normalize) = 1
+ }
+ Item first = get( 0 );
+ return first.compareTo( null );
+ }
+ switch ( item.getType() )
+ {
+ case INTEGER_ITEM:
+ return -1; // 1-1 < 1.0.x
+
+ case STRING_ITEM:
+ return 1; // 1-1 > 1-sp
+
+ case LIST_ITEM:
+ Iterator<Item> left = iterator();
+ Iterator<Item> right = ( (ListItem) item ).iterator();
+
+ while ( left.hasNext() || right.hasNext() )
+ {
+ Item l = left.hasNext() ? left.next() : null;
+ Item r = right.hasNext() ? right.next() : null;
+
+ // if this is shorter, then invert the compare and mul with -1
+ int result = l == null ? ( r == null ? 0 : -1 * r.compareTo( l ) ) : l.compareTo( r );
+
+ if ( result != 0 )
+ {
+ return result;
+ }
+ }
+
+ return 0;
+
+ default:
+ throw new RuntimeException( "invalid item: " + item.getClass() );
+ }
+ }
+
+ public String toString()
+ {
+ StringBuilder buffer = new StringBuilder();
+ for ( Iterator<Item> iter = iterator(); iter.hasNext(); )
+ {
+ Item item = iter.next();
+ if ( buffer.length() > 0 )
+ {
+ buffer.append( ( item instanceof ListItem ) ? '-' : '.' );
+ }
+ buffer.append( item );
+ }
+ return buffer.toString();
+ }
+ }
+
+ public ComparableVersion( String version )
+ {
+ parseVersion( version );
+ }
+
+ public final void parseVersion( String version )
+ {
+ this.value = version;
+
+ items = new ListItem();
+
+ version = version.toLowerCase( Locale.ENGLISH );
+
+ ListItem list = items;
+
+ Stack<Item> stack = new Stack<Item>();
+ stack.push( list );
+
+ boolean isDigit = false;
+
+ int startIndex = 0;
+
+ for ( int i = 0; i < version.length(); i++ )
+ {
+ char c = version.charAt( i );
+
+ if ( c == '.' )
+ {
+ if ( i == startIndex )
+ {
+ list.add( IntegerItem.ZERO );
+ }
+ else
+ {
+ list.add( parseItem( isDigit, version.substring( startIndex, i ) ) );
+ }
+ startIndex = i + 1;
+ }
+ else if ( c == '-' )
+ {
+ if ( i == startIndex )
+ {
+ list.add( IntegerItem.ZERO );
+ }
+ else
+ {
+ list.add( parseItem( isDigit, version.substring( startIndex, i ) ) );
+ }
+ startIndex = i + 1;
+
+ list.add( list = new ListItem() );
+ stack.push( list );
+ }
+ else if ( Character.isDigit( c ) )
+ {
+ if ( !isDigit && i > startIndex )
+ {
+ list.add( new StringItem( version.substring( startIndex, i ), true ) );
+ startIndex = i;
+
+ list.add( list = new ListItem() );
+ stack.push( list );
+ }
+
+ isDigit = true;
+ }
+ else
+ {
+ if ( isDigit && i > startIndex )
+ {
+ list.add( parseItem( true, version.substring( startIndex, i ) ) );
+ startIndex = i;
+
+ list.add( list = new ListItem() );
+ stack.push( list );
+ }
+
+ isDigit = false;
+ }
+ }
+
+ if ( version.length() > startIndex )
+ {
+ list.add( parseItem( isDigit, version.substring( startIndex ) ) );
+ }
+
+ while ( !stack.isEmpty() )
+ {
+ list = (ListItem) stack.pop();
+ list.normalize();
+ }
+
+ canonical = items.toString();
+ }
+
+ private static Item parseItem( boolean isDigit, String buf )
+ {
+ return isDigit ? new IntegerItem( buf ) : new StringItem( buf, false );
+ }
+
+ public int compareTo( ComparableVersion o )
+ {
+ return items.compareTo( o.items );
+ }
+
+ public String toString()
+ {
+ return value;
+ }
+
+ public String getCanonical()
+ {
+ return canonical;
+ }
+
+ public boolean equals( Object o )
+ {
+ return ( o instanceof ComparableVersion ) && canonical.equals( ( (ComparableVersion) o ).canonical );
+ }
+
+ public int hashCode()
+ {
+ return canonical.hashCode();
+ }
+
+ /**
+ * Main to test version parsing and comparison.
+ *
+ * @param args the version strings to parse and compare
+ */
+ public static void main( String... args )
+ {
+ System.out.println( "Display parameters as parsed by Maven (in canonical form) and comparison result:" );
+ if ( args.length == 0 )
+ {
+ return;
+ }
+
+ ComparableVersion prev = null;
+ int i = 1;
+ for ( String version : args )
+ {
+ ComparableVersion c = new ComparableVersion( version );
+
+ if ( prev != null )
+ {
+ int compare = prev.compareTo( c );
+ System.out.println( " " + prev.toString() + ' '
+ + ( ( compare == 0 ) ? "==" : ( ( compare < 0 ) ? "<" : ">" ) ) + ' ' + version );
+ }
+
+ System.out.println( String.valueOf( i++ ) + ". " + version + " == " + c.getCanonical() );
+
+ prev = c;
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/DefaultArtifactVersion.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/DefaultArtifactVersion.java
new file mode 100644
index 00000000..99b2b85b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/DefaultArtifactVersion.java
@@ -0,0 +1,228 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.StringTokenizer;
+import java.util.regex.Pattern;
+import java.util.NoSuchElementException;
+
+/**
+ * Default implementation of artifact versioning.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class DefaultArtifactVersion
+ implements ArtifactVersion
+{
+ private Integer majorVersion;
+
+ private Integer minorVersion;
+
+ private Integer incrementalVersion;
+
+ private Integer buildNumber;
+
+ private String qualifier;
+
+ private ComparableVersion comparable;
+
+ public DefaultArtifactVersion( String version )
+ {
+ parseVersion( version );
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return 11 + comparable.hashCode();
+ }
+
+ @Override
+ public boolean equals( Object other )
+ {
+ if ( this == other )
+ {
+ return true;
+ }
+
+ if ( !( other instanceof ArtifactVersion ) )
+ {
+ return false;
+ }
+
+ return compareTo( (ArtifactVersion) other ) == 0;
+ }
+
+ public int compareTo( ArtifactVersion otherVersion )
+ {
+ if ( otherVersion instanceof DefaultArtifactVersion )
+ {
+ return this.comparable.compareTo( ( (DefaultArtifactVersion) otherVersion ).comparable );
+ }
+ else
+ {
+ return compareTo( new DefaultArtifactVersion( otherVersion.toString() ) );
+ }
+ }
+
+ public int getMajorVersion()
+ {
+ return majorVersion != null ? majorVersion : 0;
+ }
+
+ public int getMinorVersion()
+ {
+ return minorVersion != null ? minorVersion : 0;
+ }
+
+ public int getIncrementalVersion()
+ {
+ return incrementalVersion != null ? incrementalVersion : 0;
+ }
+
+ public int getBuildNumber()
+ {
+ return buildNumber != null ? buildNumber : 0;
+ }
+
+ public String getQualifier()
+ {
+ return qualifier;
+ }
+
+ public final void parseVersion( String version )
+ {
+ comparable = new ComparableVersion( version );
+
+ int index = version.indexOf( "-" );
+
+ String part1;
+ String part2 = null;
+
+ if ( index < 0 )
+ {
+ part1 = version;
+ }
+ else
+ {
+ part1 = version.substring( 0, index );
+ part2 = version.substring( index + 1 );
+ }
+
+ if ( part2 != null )
+ {
+ try
+ {
+ if ( ( part2.length() == 1 ) || !part2.startsWith( "0" ) )
+ {
+ buildNumber = Integer.valueOf( part2 );
+ }
+ else
+ {
+ qualifier = part2;
+ }
+ }
+ catch ( NumberFormatException e )
+ {
+ qualifier = part2;
+ }
+ }
+
+ if ( ( !part1.contains( "." ) ) && !part1.startsWith( "0" ) )
+ {
+ try
+ {
+ majorVersion = Integer.valueOf( part1 );
+ }
+ catch ( NumberFormatException e )
+ {
+ // qualifier is the whole version, including "-"
+ qualifier = version;
+ buildNumber = null;
+ }
+ }
+ else
+ {
+ boolean fallback = false;
+
+ StringTokenizer tok = new StringTokenizer( part1, "." );
+ try
+ {
+ majorVersion = getNextIntegerToken( tok );
+ if ( tok.hasMoreTokens() )
+ {
+ minorVersion = getNextIntegerToken( tok );
+ }
+ if ( tok.hasMoreTokens() )
+ {
+ incrementalVersion = getNextIntegerToken( tok );
+ }
+ if ( tok.hasMoreTokens() )
+ {
+ qualifier = tok.nextToken();
+ fallback = Pattern.compile( "\\d+" ).matcher( qualifier ).matches();
+ }
+
+ // string tokenzier won't detect these and ignores them
+ if ( part1.contains( ".." ) || part1.startsWith( "." ) || part1.endsWith( "." ) )
+ {
+ fallback = true;
+ }
+ }
+ catch ( NumberFormatException e )
+ {
+ fallback = true;
+ }
+
+ if ( fallback )
+ {
+ // qualifier is the whole version, including "-"
+ qualifier = version;
+ majorVersion = null;
+ minorVersion = null;
+ incrementalVersion = null;
+ buildNumber = null;
+ }
+ }
+ }
+
+ private static Integer getNextIntegerToken( StringTokenizer tok )
+ {
+ try
+ {
+ String s = tok.nextToken();
+ if ( ( s.length() > 1 ) && s.startsWith( "0" ) )
+ {
+ throw new NumberFormatException( "Number part has a leading 0: '" + s + "'" );
+ }
+ return Integer.valueOf( s );
+ }
+ catch ( NoSuchElementException e )
+ {
+ throw new NumberFormatException( "Number is invalid" );
+ }
+ }
+
+ @Override
+ public String toString()
+ {
+ return comparable.toString();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/InvalidVersionSpecificationException.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/InvalidVersionSpecificationException.java
new file mode 100644
index 00000000..adc48b93
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/InvalidVersionSpecificationException.java
@@ -0,0 +1,34 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Occurs when a version is invalid.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class InvalidVersionSpecificationException
+ extends Exception
+{
+ public InvalidVersionSpecificationException( String message )
+ {
+ super( message );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/OverConstrainedVersionException.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/OverConstrainedVersionException.java
new file mode 100644
index 00000000..bd8f3830
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/OverConstrainedVersionException.java
@@ -0,0 +1,49 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+
+/**
+ * Occurs when ranges exclude each other and no valid value remains.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class OverConstrainedVersionException
+ extends ArtifactResolutionException
+{
+ public OverConstrainedVersionException( String msg,
+ Artifact artifact )
+ {
+ super( msg, artifact );
+ }
+
+ public OverConstrainedVersionException( String msg,
+ Artifact artifact,
+ List<ArtifactRepository> remoteRepositories )
+ {
+ super( msg, artifact, remoteRepositories );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java
new file mode 100644
index 00000000..d73d7ea5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java
@@ -0,0 +1,195 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Describes a restriction in versioning.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class Restriction
+{
+ private final ArtifactVersion lowerBound;
+
+ private final boolean lowerBoundInclusive;
+
+ private final ArtifactVersion upperBound;
+
+ private final boolean upperBoundInclusive;
+
+ public static final Restriction EVERYTHING = new Restriction( null, false, null, false );
+
+ public Restriction( ArtifactVersion lowerBound, boolean lowerBoundInclusive, ArtifactVersion upperBound,
+ boolean upperBoundInclusive )
+ {
+ this.lowerBound = lowerBound;
+ this.lowerBoundInclusive = lowerBoundInclusive;
+ this.upperBound = upperBound;
+ this.upperBoundInclusive = upperBoundInclusive;
+ }
+
+ public ArtifactVersion getLowerBound()
+ {
+ return lowerBound;
+ }
+
+ public boolean isLowerBoundInclusive()
+ {
+ return lowerBoundInclusive;
+ }
+
+ public ArtifactVersion getUpperBound()
+ {
+ return upperBound;
+ }
+
+ public boolean isUpperBoundInclusive()
+ {
+ return upperBoundInclusive;
+ }
+
+ public boolean containsVersion( ArtifactVersion version )
+ {
+ if ( lowerBound != null )
+ {
+ int comparison = lowerBound.compareTo( version );
+
+ if ( ( comparison == 0 ) && !lowerBoundInclusive )
+ {
+ return false;
+ }
+ if ( comparison > 0 )
+ {
+ return false;
+ }
+ }
+ if ( upperBound != null )
+ {
+ int comparison = upperBound.compareTo( version );
+
+ if ( ( comparison == 0 ) && !upperBoundInclusive )
+ {
+ return false;
+ }
+ if ( comparison < 0 )
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int result = 13;
+
+ if ( lowerBound == null )
+ {
+ result += 1;
+ }
+ else
+ {
+ result += lowerBound.hashCode();
+ }
+
+ result *= lowerBoundInclusive ? 1 : 2;
+
+ if ( upperBound == null )
+ {
+ result -= 3;
+ }
+ else
+ {
+ result -= upperBound.hashCode();
+ }
+
+ result *= upperBoundInclusive ? 2 : 3;
+
+ return result;
+ }
+
+ @Override
+ public boolean equals( Object other )
+ {
+ if ( this == other )
+ {
+ return true;
+ }
+
+ if ( !( other instanceof Restriction ) )
+ {
+ return false;
+ }
+
+ Restriction restriction = (Restriction) other;
+ if ( lowerBound != null )
+ {
+ if ( !lowerBound.equals( restriction.lowerBound ) )
+ {
+ return false;
+ }
+ }
+ else if ( restriction.lowerBound != null )
+ {
+ return false;
+ }
+
+ if ( lowerBoundInclusive != restriction.lowerBoundInclusive )
+ {
+ return false;
+ }
+
+ if ( upperBound != null )
+ {
+ if ( !upperBound.equals( restriction.upperBound ) )
+ {
+ return false;
+ }
+ }
+ else if ( restriction.upperBound != null )
+ {
+ return false;
+ }
+
+ return upperBoundInclusive == restriction.upperBoundInclusive;
+
+ }
+
+ public String toString()
+ {
+ StringBuilder buf = new StringBuilder();
+
+ buf.append( isLowerBoundInclusive() ? "[" : "(" );
+ if ( getLowerBound() != null )
+ {
+ buf.append( getLowerBound().toString() );
+ }
+ buf.append( "," );
+ if ( getUpperBound() != null )
+ {
+ buf.append( getUpperBound().toString() );
+ }
+ buf.append( isUpperBoundInclusive() ? "]" : ")" );
+
+ return buf.toString();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java
new file mode 100644
index 00000000..dd8e028c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java
@@ -0,0 +1,583 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * Construct a version range from a specification.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class VersionRange
+{
+ private final ArtifactVersion recommendedVersion;
+
+ private final List<Restriction> restrictions;
+
+ private VersionRange( ArtifactVersion recommendedVersion,
+ List<Restriction> restrictions )
+ {
+ this.recommendedVersion = recommendedVersion;
+ this.restrictions = restrictions;
+ }
+
+ public ArtifactVersion getRecommendedVersion()
+ {
+ return recommendedVersion;
+ }
+
+ public List<Restriction> getRestrictions()
+ {
+ return restrictions;
+ }
+
+ public VersionRange cloneOf()
+ {
+ List<Restriction> copiedRestrictions = null;
+
+ if ( restrictions != null )
+ {
+ copiedRestrictions = new ArrayList<Restriction>();
+
+ if ( !restrictions.isEmpty() )
+ {
+ copiedRestrictions.addAll( restrictions );
+ }
+ }
+
+ return new VersionRange( recommendedVersion, copiedRestrictions );
+ }
+
+ /**
+ * Create a version range from a string representation
+ * <p/>
+ * Some spec examples are
+ * <ul>
+ * <li><code>1.0</code> Version 1.0</li>
+ * <li><code>[1.0,2.0)</code> Versions 1.0 (included) to 2.0 (not included)</li>
+ * <li><code>[1.0,2.0]</code> Versions 1.0 to 2.0 (both included)</li>
+ * <li><code>[1.5,)</code> Versions 1.5 and higher</li>
+ * <li><code>(,1.0],[1.2,)</code> Versions up to 1.0 (included) and 1.2 or higher</li>
+ * </ul>
+ *
+ * @param spec string representation of a version or version range
+ * @return a new {@link VersionRange} object that represents the spec
+ * @throws InvalidVersionSpecificationException
+ *
+ */
+ public static VersionRange createFromVersionSpec( String spec )
+ throws InvalidVersionSpecificationException
+ {
+ if ( spec == null )
+ {
+ return null;
+ }
+
+ List<Restriction> restrictions = new ArrayList<Restriction>();
+ String process = spec;
+ ArtifactVersion version = null;
+ ArtifactVersion upperBound = null;
+ ArtifactVersion lowerBound = null;
+
+ while ( process.startsWith( "[" ) || process.startsWith( "(" ) )
+ {
+ int index1 = process.indexOf( ")" );
+ int index2 = process.indexOf( "]" );
+
+ int index = index2;
+ if ( index2 < 0 || index1 < index2 )
+ {
+ if ( index1 >= 0 )
+ {
+ index = index1;
+ }
+ }
+
+ if ( index < 0 )
+ {
+ throw new InvalidVersionSpecificationException( "Unbounded range: " + spec );
+ }
+
+ Restriction restriction = parseRestriction( process.substring( 0, index + 1 ) );
+ if ( lowerBound == null )
+ {
+ lowerBound = restriction.getLowerBound();
+ }
+ if ( upperBound != null )
+ {
+ if ( restriction.getLowerBound() == null || restriction.getLowerBound().compareTo( upperBound ) < 0 )
+ {
+ throw new InvalidVersionSpecificationException( "Ranges overlap: " + spec );
+ }
+ }
+ restrictions.add( restriction );
+ upperBound = restriction.getUpperBound();
+
+ process = process.substring( index + 1 ).trim();
+
+ if ( process.length() > 0 && process.startsWith( "," ) )
+ {
+ process = process.substring( 1 ).trim();
+ }
+ }
+
+ if ( process.length() > 0 )
+ {
+ if ( restrictions.size() > 0 )
+ {
+ throw new InvalidVersionSpecificationException(
+ "Only fully-qualified sets allowed in multiple set scenario: " + spec );
+ }
+ else
+ {
+ version = new DefaultArtifactVersion( process );
+ restrictions.add( Restriction.EVERYTHING );
+ }
+ }
+
+ return new VersionRange( version, restrictions );
+ }
+
+ private static Restriction parseRestriction( String spec )
+ throws InvalidVersionSpecificationException
+ {
+ boolean lowerBoundInclusive = spec.startsWith( "[" );
+ boolean upperBoundInclusive = spec.endsWith( "]" );
+
+ String process = spec.substring( 1, spec.length() - 1 ).trim();
+
+ Restriction restriction;
+
+ int index = process.indexOf( "," );
+
+ if ( index < 0 )
+ {
+ if ( !lowerBoundInclusive || !upperBoundInclusive )
+ {
+ throw new InvalidVersionSpecificationException( "Single version must be surrounded by []: " + spec );
+ }
+
+ ArtifactVersion version = new DefaultArtifactVersion( process );
+
+ restriction = new Restriction( version, lowerBoundInclusive, version, upperBoundInclusive );
+ }
+ else
+ {
+ String lowerBound = process.substring( 0, index ).trim();
+ String upperBound = process.substring( index + 1 ).trim();
+ if ( lowerBound.equals( upperBound ) )
+ {
+ throw new InvalidVersionSpecificationException( "Range cannot have identical boundaries: " + spec );
+ }
+
+ ArtifactVersion lowerVersion = null;
+ if ( lowerBound.length() > 0 )
+ {
+ lowerVersion = new DefaultArtifactVersion( lowerBound );
+ }
+ ArtifactVersion upperVersion = null;
+ if ( upperBound.length() > 0 )
+ {
+ upperVersion = new DefaultArtifactVersion( upperBound );
+ }
+
+ if ( upperVersion != null && lowerVersion != null && upperVersion.compareTo( lowerVersion ) < 0 )
+ {
+ throw new InvalidVersionSpecificationException( "Range defies version ordering: " + spec );
+ }
+
+ restriction = new Restriction( lowerVersion, lowerBoundInclusive, upperVersion, upperBoundInclusive );
+ }
+
+ return restriction;
+ }
+
+ public static VersionRange createFromVersion( String version )
+ {
+ List<Restriction> restrictions = Collections.emptyList();
+ return new VersionRange( new DefaultArtifactVersion( version ), restrictions );
+ }
+
+ /**
+ * Creates and returns a new <code>VersionRange</code> that is a restriction of this
+ * version range and the specified version range.
+ * <p>
+ * Note: Precedence is given to the recommended version from this version range over the
+ * recommended version from the specified version range.
+ * </p>
+ *
+ * @param restriction the <code>VersionRange</code> that will be used to restrict this version
+ * range.
+ * @return the <code>VersionRange</code> that is a restriction of this version range and the
+ * specified version range.
+ * <p>
+ * The restrictions of the returned version range will be an intersection of the restrictions
+ * of this version range and the specified version range if both version ranges have
+ * restrictions. Otherwise, the restrictions on the returned range will be empty.
+ * </p>
+ * <p>
+ * The recommended version of the returned version range will be the recommended version of
+ * this version range, provided that ranges falls within the intersected restrictions. If
+ * the restrictions are empty, this version range's recommended version is used if it is not
+ * <code>null</code>. If it is <code>null</code>, the specified version range's recommended
+ * version is used (provided it is non-<code>null</code>). If no recommended version can be
+ * obtained, the returned version range's recommended version is set to <code>null</code>.
+ * </p>
+ * @throws NullPointerException if the specified <code>VersionRange</code> is
+ * <code>null</code>.
+ */
+ public VersionRange restrict( VersionRange restriction )
+ {
+ List<Restriction> r1 = this.restrictions;
+ List<Restriction> r2 = restriction.restrictions;
+ List<Restriction> restrictions;
+
+ if ( r1.isEmpty() || r2.isEmpty() )
+ {
+ restrictions = Collections.emptyList();
+ }
+ else
+ {
+ restrictions = intersection( r1, r2 );
+ }
+
+ ArtifactVersion version = null;
+ if ( restrictions.size() > 0 )
+ {
+ for ( Restriction r : restrictions )
+ {
+ if ( recommendedVersion != null && r.containsVersion( recommendedVersion ) )
+ {
+ // if we find the original, use that
+ version = recommendedVersion;
+ break;
+ }
+ else if ( version == null && restriction.getRecommendedVersion() != null
+ && r.containsVersion( restriction.getRecommendedVersion() ) )
+ {
+ // use this if we can, but prefer the original if possible
+ version = restriction.getRecommendedVersion();
+ }
+ }
+ }
+ // Either the original or the specified version ranges have no restrictions
+ else if ( recommendedVersion != null )
+ {
+ // Use the original recommended version since it exists
+ version = recommendedVersion;
+ }
+ else if ( restriction.recommendedVersion != null )
+ {
+ // Use the recommended version from the specified VersionRange since there is no
+ // original recommended version
+ version = restriction.recommendedVersion;
+ }
+/* TODO: should throw this immediately, but need artifact
+ else
+ {
+ throw new OverConstrainedVersionException( "Restricting incompatible version ranges" );
+ }
+*/
+
+ return new VersionRange( version, restrictions );
+ }
+
+ private List<Restriction> intersection( List<Restriction> r1, List<Restriction> r2 )
+ {
+ List<Restriction> restrictions = new ArrayList<Restriction>( r1.size() + r2.size() );
+ Iterator<Restriction> i1 = r1.iterator();
+ Iterator<Restriction> i2 = r2.iterator();
+ Restriction res1 = i1.next();
+ Restriction res2 = i2.next();
+
+ boolean done = false;
+ while ( !done )
+ {
+ if ( res1.getLowerBound() == null || res2.getUpperBound() == null
+ || res1.getLowerBound().compareTo( res2.getUpperBound() ) <= 0 )
+ {
+ if ( res1.getUpperBound() == null || res2.getLowerBound() == null
+ || res1.getUpperBound().compareTo( res2.getLowerBound() ) >= 0 )
+ {
+ ArtifactVersion lower;
+ ArtifactVersion upper;
+ boolean lowerInclusive;
+ boolean upperInclusive;
+
+ // overlaps
+ if ( res1.getLowerBound() == null )
+ {
+ lower = res2.getLowerBound();
+ lowerInclusive = res2.isLowerBoundInclusive();
+ }
+ else if ( res2.getLowerBound() == null )
+ {
+ lower = res1.getLowerBound();
+ lowerInclusive = res1.isLowerBoundInclusive();
+ }
+ else
+ {
+ int comparison = res1.getLowerBound().compareTo( res2.getLowerBound() );
+ if ( comparison < 0 )
+ {
+ lower = res2.getLowerBound();
+ lowerInclusive = res2.isLowerBoundInclusive();
+ }
+ else if ( comparison == 0 )
+ {
+ lower = res1.getLowerBound();
+ lowerInclusive = res1.isLowerBoundInclusive() && res2.isLowerBoundInclusive();
+ }
+ else
+ {
+ lower = res1.getLowerBound();
+ lowerInclusive = res1.isLowerBoundInclusive();
+ }
+ }
+
+ if ( res1.getUpperBound() == null )
+ {
+ upper = res2.getUpperBound();
+ upperInclusive = res2.isUpperBoundInclusive();
+ }
+ else if ( res2.getUpperBound() == null )
+ {
+ upper = res1.getUpperBound();
+ upperInclusive = res1.isUpperBoundInclusive();
+ }
+ else
+ {
+ int comparison = res1.getUpperBound().compareTo( res2.getUpperBound() );
+ if ( comparison < 0 )
+ {
+ upper = res1.getUpperBound();
+ upperInclusive = res1.isUpperBoundInclusive();
+ }
+ else if ( comparison == 0 )
+ {
+ upper = res1.getUpperBound();
+ upperInclusive = res1.isUpperBoundInclusive() && res2.isUpperBoundInclusive();
+ }
+ else
+ {
+ upper = res2.getUpperBound();
+ upperInclusive = res2.isUpperBoundInclusive();
+ }
+ }
+
+ // don't add if they are equal and one is not inclusive
+ if ( lower == null || upper == null || lower.compareTo( upper ) != 0 )
+ {
+ restrictions.add( new Restriction( lower, lowerInclusive, upper, upperInclusive ) );
+ }
+ else if ( lowerInclusive && upperInclusive )
+ {
+ restrictions.add( new Restriction( lower, lowerInclusive, upper, upperInclusive ) );
+ }
+
+ //noinspection ObjectEquality
+ if ( upper == res2.getUpperBound() )
+ {
+ // advance res2
+ if ( i2.hasNext() )
+ {
+ res2 = i2.next();
+ }
+ else
+ {
+ done = true;
+ }
+ }
+ else
+ {
+ // advance res1
+ if ( i1.hasNext() )
+ {
+ res1 = i1.next();
+ }
+ else
+ {
+ done = true;
+ }
+ }
+ }
+ else
+ {
+ // move on to next in r1
+ if ( i1.hasNext() )
+ {
+ res1 = i1.next();
+ }
+ else
+ {
+ done = true;
+ }
+ }
+ }
+ else
+ {
+ // move on to next in r2
+ if ( i2.hasNext() )
+ {
+ res2 = i2.next();
+ }
+ else
+ {
+ done = true;
+ }
+ }
+ }
+
+ return restrictions;
+ }
+
+ public ArtifactVersion getSelectedVersion( Artifact artifact )
+ throws OverConstrainedVersionException
+ {
+ ArtifactVersion version;
+ if ( recommendedVersion != null )
+ {
+ version = recommendedVersion;
+ }
+ else
+ {
+ if ( restrictions.size() == 0 )
+ {
+ throw new OverConstrainedVersionException( "The artifact has no valid ranges", artifact );
+ }
+
+ version = null;
+ }
+ return version;
+ }
+
+ public boolean isSelectedVersionKnown( Artifact artifact )
+ throws OverConstrainedVersionException
+ {
+ boolean value = false;
+ if ( recommendedVersion != null )
+ {
+ value = true;
+ }
+ else
+ {
+ if ( restrictions.size() == 0 )
+ {
+ throw new OverConstrainedVersionException( "The artifact has no valid ranges", artifact );
+ }
+ }
+ return value;
+ }
+
+ public String toString()
+ {
+ if ( recommendedVersion != null )
+ {
+ return recommendedVersion.toString();
+ }
+ else
+ {
+ StringBuilder buf = new StringBuilder();
+ for ( Iterator<Restriction> i = restrictions.iterator(); i.hasNext(); )
+ {
+ Restriction r = i.next();
+
+ buf.append( r.toString() );
+
+ if ( i.hasNext() )
+ {
+ buf.append( ',' );
+ }
+ }
+ return buf.toString();
+ }
+ }
+
+ public ArtifactVersion matchVersion( List<ArtifactVersion> versions )
+ {
+ // TODO: could be more efficient by sorting the list and then moving along the restrictions in order?
+
+ ArtifactVersion matched = null;
+ for ( ArtifactVersion version : versions )
+ {
+ if ( containsVersion( version ) )
+ {
+ // valid - check if it is greater than the currently matched version
+ if ( matched == null || version.compareTo( matched ) > 0 )
+ {
+ matched = version;
+ }
+ }
+ }
+ return matched;
+ }
+
+ public boolean containsVersion( ArtifactVersion version )
+ {
+ for ( Restriction restriction : restrictions )
+ {
+ if ( restriction.containsVersion( version ) )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean hasRestrictions()
+ {
+ return !restrictions.isEmpty() && recommendedVersion == null;
+ }
+
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+ if ( !( obj instanceof VersionRange ) )
+ {
+ return false;
+ }
+ VersionRange other = (VersionRange) obj;
+
+ boolean equals =
+ recommendedVersion == other.recommendedVersion
+ || ( ( recommendedVersion != null ) && recommendedVersion.equals( other.recommendedVersion ) );
+ equals &=
+ restrictions == other.restrictions
+ || ( ( restrictions != null ) && restrictions.equals( other.restrictions ) );
+ return equals;
+ }
+
+ public int hashCode()
+ {
+ int hash = 7;
+ hash = 31 * hash + ( recommendedVersion == null ? 0 : recommendedVersion.hashCode() );
+ hash = 31 * hash + ( restrictions == null ? 0 : restrictions.hashCode() );
+ return hash;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/repository/Proxy.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/repository/Proxy.java
new file mode 100644
index 00000000..ea2c0238
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/repository/Proxy.java
@@ -0,0 +1,197 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public class Proxy
+{
+ public static final String PROXY_SOCKS5 = "SOCKS_5";
+
+ public static final String PROXY_SOCKS4 = "SOCKS4";
+
+ public static final String PROXY_HTTP = "HTTP";
+
+ /**
+ * Proxy server host
+ */
+ private String host;
+
+ /**
+ * Username used to access the proxy server
+ */
+ private String userName;
+
+ /**
+ * Password associated with the proxy server
+ */
+ private String password;
+
+ /**
+ * Proxy server port
+ */
+ private int port;
+
+ /**
+ * Type of the proxy
+ */
+ private String protocol;
+
+ /**
+ * The non-proxy hosts. Follows Java system property format: <code>*.foo.com|localhost</code>.
+ */
+ private String nonProxyHosts;
+
+ /**
+ * For NTLM proxies, specifies the NTLM host.
+ */
+ private String ntlmHost;
+
+ /**
+ * For NTLM proxies, specifies the NTLM domain.
+ */
+ private String ntlmDomain;
+
+ /**
+ * Return proxy server host name.
+ *
+ * @return proxy server host name
+ */
+ public String getHost()
+ {
+ return host;
+ }
+
+ /**
+ * Set proxy host name.
+ *
+ * @param host proxy server host name
+ */
+ public void setHost( String host )
+ {
+ this.host = host;
+ }
+
+ /**
+ * Get user's password used to login to proxy server.
+ *
+ * @return user's password at proxy host
+ */
+ public String getPassword()
+ {
+ return password;
+ }
+
+ /**
+ * Set the user's password for the proxy server.
+ *
+ * @param password password to use to login to a proxy server
+ */
+ public void setPassword( String password )
+ {
+ this.password = password;
+ }
+
+ /**
+ * Get the proxy port.
+ *
+ * @return proxy server port
+ */
+ public int getPort()
+ {
+ return port;
+ }
+
+ /**
+ * Set the proxy port.
+ *
+ * @param port proxy server port
+ */
+ public void setPort( int port )
+ {
+ this.port = port;
+ }
+
+ /**
+ * Get the proxy username.
+ *
+ * @return username for the proxy server
+ */
+ public String getUserName()
+ {
+ return userName;
+ }
+
+ /**
+ * Set the proxy username.
+ *
+ * @param userName username for the proxy server
+ */
+ public void setUserName( String userName )
+ {
+ this.userName = userName;
+ }
+
+ /**
+ * Get the type of the proxy server.
+ *
+ * @return the type of the proxy server
+ */
+ public String getProtocol()
+ {
+ return protocol;
+ }
+
+ /**
+ * @param type the type of the proxy server like <i>SOCKSv4</i>
+ */
+ public void setProtocol( String protocol )
+ {
+ this.protocol = protocol;
+ }
+
+ public String getNonProxyHosts()
+ {
+ return nonProxyHosts;
+ }
+
+ public void setNonProxyHosts( String nonProxyHosts )
+ {
+ this.nonProxyHosts = nonProxyHosts;
+ }
+
+ public String getNtlmHost()
+ {
+ return ntlmHost;
+ }
+
+ public void setNtlmHost( String ntlmHost )
+ {
+ this.ntlmHost = ntlmHost;
+ }
+
+ public void setNtlmDomain( String ntlmDomain )
+ {
+ this.ntlmDomain = ntlmDomain;
+ }
+
+ public String getNtlmDomain()
+ {
+ return ntlmDomain;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadata.java
new file mode 100644
index 00000000..e66a84a9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadata.java
@@ -0,0 +1,83 @@
+package org.apache.maven.repository.legacy.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataStoreException;
+
+/**
+ * Contains metadata about an artifact, and methods to retrieve/store it from an artifact repository.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @todo merge with artifactmetadatasource
+ * @todo retrieval exception not appropriate for store
+ */
+public interface ArtifactMetadata
+{
+ /** Whether this metadata should be stored alongside the artifact. */
+ boolean storedInArtifactVersionDirectory();
+
+ /** Whether this metadata should be stored alongside the group. */
+ boolean storedInGroupDirectory();
+
+ String getGroupId();
+
+ String getArtifactId();
+
+ String getBaseVersion();
+
+ Object getKey();
+
+ /**
+ * Get the filename of this metadata on the local repository.
+ *
+ * @param repository the remote repository it came from
+ * @return the filename
+ */
+ String getLocalFilename( ArtifactRepository repository );
+
+ /**
+ * Get the filename of this metadata on the remote repository.
+ *
+ * @return the filename
+ */
+ String getRemoteFilename();
+
+ /**
+ * Merge a new metadata set into this piece of metadata.
+ *
+ * @param metadata the new metadata
+ * @todo this should only be needed on the repository metadata
+ */
+ void merge( ArtifactMetadata metadata );
+
+ /**
+ * Store the metadata in the local repository.
+ *
+ * @param localRepository the local repository
+ * @param remoteRepository the remote repository it came from
+ * @todo this should only be needed on the repository metadata
+ */
+ void storeInLocalRepository( ArtifactRepository localRepository,
+ ArtifactRepository remoteRepository )
+ throws RepositoryMetadataStoreException;
+
+ String extendedToString();
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/site/apt/index.apt b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/site/apt/index.apt
new file mode 100644
index 00000000..f796c118
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/site/apt/index.apt
@@ -0,0 +1,47 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ Introduction
+ -----
+ Hervé Boutemy
+ -----
+ 2014-11-30
+ -----
+
+Maven Artifact
+
+ Maven Artifact classes, providing <<<Artifact>>> interface ({{{./apidocs/org/apache/maven/artifact/Artifact.html}javadoc}}),
+ with its <<<DefaultArtifact>>> implementation ({{{./xref/org/apache/maven/artifact/DefaultArtifact.html}source}}).
+
+ The jar file is executable and provides a little tool to display how Maven parses and compares versions:
+
++----+
+$ java -jar maven-artifact-*.jar 3.2.4-alpha-1 3.2.4-SNAPSHOT 3.2.4.0
+Display parameters as parsed by Maven (in canonical form) and comparison result:
+1. 3.2.4-alpha-1 == 3.2.4.alpha.1
+ 3.2.4-alpha-1 < 3.2.4-SNAPSHOT
+2. 3.2.4-SNAPSHOT == 3.2.4.snapshot
+ 3.2.4-SNAPSHOT < 3.2.4.0
+3. 3.2.4.0 == 3.2.4
++----+
+
+* Useful entry points
+
+ * artifact version comparison {{{./apidocs/org/apache/maven/artifact/versioning/ComparableVersion.html}javadoc}},
+
+ * {{{./apidocs/org/apache/maven/artifact/versioning/VersionRange.html}version range}}.
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/site/site.xml b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/site/site.xml
new file mode 100644
index 00000000..3a16bf98
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/site/site.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
+ <body>
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ <item name="JavaDocs" href="apidocs/index.html"/>
+ <item name="Source Xref" href="xref/index.html"/>
+ <!--item name="FAQ" href="faq.html"/-->
+ </menu>
+
+ <menu ref="parent"/>
+ <menu ref="reports"/>
+ </body>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java
new file mode 100644
index 00000000..6cf372f7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java
@@ -0,0 +1,231 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Locale;
+
+import junit.framework.TestCase;
+
+/**
+ * Test ComparableVersion.
+ *
+ * @author <a href="mailto:hboutemy@apache.org">Hervé Boutemy</a>
+ */
+@SuppressWarnings( "unchecked" )
+public class ComparableVersionTest
+ extends TestCase
+{
+ private Comparable newComparable( String version )
+ {
+ ComparableVersion ret = new ComparableVersion( version );
+ String canonical = ret.getCanonical();
+ String parsedCanonical = new ComparableVersion( canonical ).getCanonical();
+
+ System.out.println( "canonical( " + version + " ) = " + canonical );
+ assertEquals( "canonical( " + version + " ) = " + canonical + " -> canonical: " + parsedCanonical, canonical,
+ parsedCanonical );
+
+ return ret;
+ }
+
+ private static final String[] VERSIONS_QUALIFIER =
+ { "1-alpha2snapshot", "1-alpha2", "1-alpha-123", "1-beta-2", "1-beta123", "1-m2", "1-m11", "1-rc", "1-cr2",
+ "1-rc123", "1-SNAPSHOT", "1", "1-sp", "1-sp2", "1-sp123", "1-abc", "1-def", "1-pom-1", "1-1-snapshot",
+ "1-1", "1-2", "1-123" };
+
+ private static final String[] VERSIONS_NUMBER =
+ { "2.0", "2-1", "2.0.a", "2.0.0.a", "2.0.2", "2.0.123", "2.1.0", "2.1-a", "2.1b", "2.1-c", "2.1-1", "2.1.0.1",
+ "2.2", "2.123", "11.a2", "11.a11", "11.b2", "11.b11", "11.m2", "11.m11", "11", "11.a", "11b", "11c", "11m" };
+
+ private void checkVersionsOrder( String[] versions )
+ {
+ Comparable[] c = new Comparable[versions.length];
+ for ( int i = 0; i < versions.length; i++ )
+ {
+ c[i] = newComparable( versions[i] );
+ }
+
+ for ( int i = 1; i < versions.length; i++ )
+ {
+ Comparable low = c[i - 1];
+ for ( int j = i; j < versions.length; j++ )
+ {
+ Comparable high = c[j];
+ assertTrue( "expected " + low + " < " + high, low.compareTo( high ) < 0 );
+ assertTrue( "expected " + high + " > " + low, high.compareTo( low ) > 0 );
+ }
+ }
+ }
+
+ private void checkVersionsEqual( String v1, String v2 )
+ {
+ Comparable c1 = newComparable( v1 );
+ Comparable c2 = newComparable( v2 );
+ assertTrue( "expected " + v1 + " == " + v2, c1.compareTo( c2 ) == 0 );
+ assertTrue( "expected " + v2 + " == " + v1, c2.compareTo( c1 ) == 0 );
+ assertTrue( "expected same hashcode for " + v1 + " and " + v2, c1.hashCode() == c2.hashCode() );
+ assertTrue( "expected " + v1 + ".equals( " + v2 + " )", c1.equals( c2 ) );
+ assertTrue( "expected " + v2 + ".equals( " + v1 + " )", c2.equals( c1 ) );
+ }
+
+ private void checkVersionsOrder( String v1, String v2 )
+ {
+ Comparable c1 = newComparable( v1 );
+ Comparable c2 = newComparable( v2 );
+ assertTrue( "expected " + v1 + " < " + v2, c1.compareTo( c2 ) < 0 );
+ assertTrue( "expected " + v2 + " > " + v1, c2.compareTo( c1 ) > 0 );
+ }
+
+ public void testVersionsQualifier()
+ {
+ checkVersionsOrder( VERSIONS_QUALIFIER );
+ }
+
+ public void testVersionsNumber()
+ {
+ checkVersionsOrder( VERSIONS_NUMBER );
+ }
+
+ public void testVersionsEqual()
+ {
+ newComparable( "1.0-alpha" );
+ checkVersionsEqual( "1", "1" );
+ checkVersionsEqual( "1", "1.0" );
+ checkVersionsEqual( "1", "1.0.0" );
+ checkVersionsEqual( "1.0", "1.0.0" );
+ checkVersionsEqual( "1", "1-0" );
+ checkVersionsEqual( "1", "1.0-0" );
+ checkVersionsEqual( "1.0", "1.0-0" );
+ // no separator between number and character
+ checkVersionsEqual( "1a", "1-a" );
+ checkVersionsEqual( "1a", "1.0-a" );
+ checkVersionsEqual( "1a", "1.0.0-a" );
+ checkVersionsEqual( "1.0a", "1-a" );
+ checkVersionsEqual( "1.0.0a", "1-a" );
+ checkVersionsEqual( "1x", "1-x" );
+ checkVersionsEqual( "1x", "1.0-x" );
+ checkVersionsEqual( "1x", "1.0.0-x" );
+ checkVersionsEqual( "1.0x", "1-x" );
+ checkVersionsEqual( "1.0.0x", "1-x" );
+
+ // aliases
+ checkVersionsEqual( "1ga", "1" );
+ checkVersionsEqual( "1final", "1" );
+ checkVersionsEqual( "1cr", "1rc" );
+
+ // special "aliases" a, b and m for alpha, beta and milestone
+ checkVersionsEqual( "1a1", "1-alpha-1" );
+ checkVersionsEqual( "1b2", "1-beta-2" );
+ checkVersionsEqual( "1m3", "1-milestone-3" );
+
+ // case insensitive
+ checkVersionsEqual( "1X", "1x" );
+ checkVersionsEqual( "1A", "1a" );
+ checkVersionsEqual( "1B", "1b" );
+ checkVersionsEqual( "1M", "1m" );
+ checkVersionsEqual( "1Ga", "1" );
+ checkVersionsEqual( "1GA", "1" );
+ checkVersionsEqual( "1Final", "1" );
+ checkVersionsEqual( "1FinaL", "1" );
+ checkVersionsEqual( "1FINAL", "1" );
+ checkVersionsEqual( "1Cr", "1Rc" );
+ checkVersionsEqual( "1cR", "1rC" );
+ checkVersionsEqual( "1m3", "1Milestone3" );
+ checkVersionsEqual( "1m3", "1MileStone3" );
+ checkVersionsEqual( "1m3", "1MILESTONE3" );
+ }
+
+ public void testVersionComparing()
+ {
+ checkVersionsOrder( "1", "2" );
+ checkVersionsOrder( "1.5", "2" );
+ checkVersionsOrder( "1", "2.5" );
+ checkVersionsOrder( "1.0", "1.1" );
+ checkVersionsOrder( "1.1", "1.2" );
+ checkVersionsOrder( "1.0.0", "1.1" );
+ checkVersionsOrder( "1.0.1", "1.1" );
+ checkVersionsOrder( "1.1", "1.2.0" );
+
+ checkVersionsOrder( "1.0-alpha-1", "1.0" );
+ checkVersionsOrder( "1.0-alpha-1", "1.0-alpha-2" );
+ checkVersionsOrder( "1.0-alpha-1", "1.0-beta-1" );
+
+ checkVersionsOrder( "1.0-beta-1", "1.0-SNAPSHOT" );
+ checkVersionsOrder( "1.0-SNAPSHOT", "1.0" );
+ checkVersionsOrder( "1.0-alpha-1-SNAPSHOT", "1.0-alpha-1" );
+
+ checkVersionsOrder( "1.0", "1.0-1" );
+ checkVersionsOrder( "1.0-1", "1.0-2" );
+ checkVersionsOrder( "1.0.0", "1.0-1" );
+
+ checkVersionsOrder( "2.0-1", "2.0.1" );
+ checkVersionsOrder( "2.0.1-klm", "2.0.1-lmn" );
+ checkVersionsOrder( "2.0.1", "2.0.1-xyz" );
+
+ checkVersionsOrder( "2.0.1", "2.0.1-123" );
+ checkVersionsOrder( "2.0.1-xyz", "2.0.1-123" );
+ }
+
+ /**
+ * Test <a href="https://jira.codehaus.org/browse/MNG-5568">MNG-5568</a> edge case
+ * which was showing transitive inconsistency: since A > B and B > C then we should have A > C
+ * otherwise sorting a list of ComparableVersions() will in some cases throw runtime exception;
+ * see Netbeans issues <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=240845">240845</a> and
+ * <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=226100">226100</a>
+ */
+ public void testMng5568()
+ {
+ String a = "6.1.0";
+ String b = "6.1.0rc3";
+ String c = "6.1H.5-beta"; // this is the unusual version string, with 'H' in the middle
+
+ checkVersionsOrder( b, a ); // classical
+ checkVersionsOrder( b, c ); // now b < c, but before MNG-5568, we had b > c
+ checkVersionsOrder( a, c );
+ }
+
+ public void testLocaleIndependent()
+ {
+ Locale orig = Locale.getDefault();
+ Locale[] locales = { Locale.ENGLISH, new Locale( "tr" ), Locale.getDefault() };
+ try
+ {
+ for ( Locale locale : locales )
+ {
+ Locale.setDefault( locale );
+ checkVersionsEqual( "1-abcdefghijklmnopqrstuvwxyz", "1-ABCDEFGHIJKLMNOPQRSTUVWXYZ" );
+ }
+ }
+ finally
+ {
+ Locale.setDefault( orig );
+ }
+ }
+
+ public void testReuse()
+ {
+ ComparableVersion c1 = new ComparableVersion( "1" );
+ c1.parseVersion( "2" );
+
+ Comparable c2 = newComparable( "2" );
+
+ assertEquals( "reused instance should be equivalent to new instance", c1, c2 );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/DefaultArtifactVersionTest.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/DefaultArtifactVersionTest.java
new file mode 100644
index 00000000..fc5a2742
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/DefaultArtifactVersionTest.java
@@ -0,0 +1,223 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Test DefaultArtifactVersion.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class DefaultArtifactVersionTest
+ extends TestCase
+{
+ private ArtifactVersion newArtifactVersion( String version )
+ {
+ return new DefaultArtifactVersion( version );
+ }
+
+ private void checkVersionParsing( String version, int major, int minor, int incremental, int buildnumber,
+ String qualifier )
+ {
+ ArtifactVersion artifactVersion = newArtifactVersion( version );
+ String parsed =
+ "'" + version + "' parsed as ('" + artifactVersion.getMajorVersion() + "', '"
+ + artifactVersion.getMinorVersion() + "', '" + artifactVersion.getIncrementalVersion() + "', '"
+ + artifactVersion.getBuildNumber() + "', '" + artifactVersion.getQualifier() + "'), ";
+ assertEquals( parsed + "check major version", major, artifactVersion.getMajorVersion() );
+ assertEquals( parsed + "check minor version", minor, artifactVersion.getMinorVersion() );
+ assertEquals( parsed + "check incremental version", incremental, artifactVersion.getIncrementalVersion() );
+ assertEquals( parsed + "check build number", buildnumber, artifactVersion.getBuildNumber() );
+ assertEquals( parsed + "check qualifier", qualifier, artifactVersion.getQualifier() );
+ assertEquals( "check " + version + " string value", version, artifactVersion.toString() );
+ }
+
+ public void testVersionParsing()
+ {
+ checkVersionParsing( "1", 1, 0, 0, 0, null );
+ checkVersionParsing( "1.2", 1, 2, 0, 0, null );
+ checkVersionParsing( "1.2.3", 1, 2, 3, 0, null );
+ checkVersionParsing( "1.2.3-1", 1, 2, 3, 1, null );
+ checkVersionParsing( "1.2.3-alpha-1", 1, 2, 3, 0, "alpha-1" );
+ checkVersionParsing( "1.2-alpha-1", 1, 2, 0, 0, "alpha-1" );
+ checkVersionParsing( "1.2-alpha-1-20050205.060708-1", 1, 2, 0, 0, "alpha-1-20050205.060708-1" );
+ checkVersionParsing( "RELEASE", 0, 0, 0, 0, "RELEASE" );
+ checkVersionParsing( "2.0-1", 2, 0, 0, 1, null );
+
+ // 0 at the beginning of a number has a special handling
+ checkVersionParsing( "02", 0, 0, 0, 0, "02" );
+ checkVersionParsing( "0.09", 0, 0, 0, 0, "0.09" );
+ checkVersionParsing( "0.2.09", 0, 0, 0, 0, "0.2.09" );
+ checkVersionParsing( "2.0-01", 2, 0, 0, 0, "01" );
+
+ // version schemes not really supported: fully transformed as qualifier
+ checkVersionParsing( "1.0.1b", 0, 0, 0, 0, "1.0.1b" );
+ checkVersionParsing( "1.0M2", 0, 0, 0, 0, "1.0M2" );
+ checkVersionParsing( "1.0RC2", 0, 0, 0, 0, "1.0RC2" );
+ checkVersionParsing( "1.1.2.beta1", 1, 1, 2, 0, "beta1" );
+ checkVersionParsing( "1.7.3.beta1", 1, 7, 3, 0, "beta1" );
+ checkVersionParsing( "1.7.3.0", 0, 0, 0, 0, "1.7.3.0" );
+ checkVersionParsing( "1.7.3.0-1", 0, 0, 0, 0, "1.7.3.0-1" );
+ checkVersionParsing( "PATCH-1193602", 0, 0, 0, 0, "PATCH-1193602" );
+ checkVersionParsing( "5.0.0alpha-2006020117", 0, 0, 0, 0, "5.0.0alpha-2006020117" );
+ checkVersionParsing( "1.0.0.-SNAPSHOT", 0, 0, 0, 0, "1.0.0.-SNAPSHOT" );
+ checkVersionParsing( "1..0-SNAPSHOT", 0, 0, 0, 0, "1..0-SNAPSHOT" );
+ checkVersionParsing( "1.0.-SNAPSHOT", 0, 0, 0, 0, "1.0.-SNAPSHOT" );
+ checkVersionParsing( ".1.0-SNAPSHOT", 0, 0, 0, 0, ".1.0-SNAPSHOT" );
+
+ checkVersionParsing( "1.2.3.200705301630", 0, 0, 0, 0, "1.2.3.200705301630" );
+ checkVersionParsing( "1.2.3-200705301630", 1, 2, 3, 0, "200705301630" );
+ }
+
+ public void testVersionComparing()
+ {
+ assertVersionEqual( "1", "1" );
+ assertVersionOlder( "1", "2" );
+ assertVersionOlder( "1.5", "2" );
+ assertVersionOlder( "1", "2.5" );
+ assertVersionEqual( "1", "1.0" );
+ assertVersionEqual( "1", "1.0.0" );
+ assertVersionOlder( "1.0", "1.1" );
+ assertVersionOlder( "1.1", "1.2" );
+ assertVersionOlder( "1.0.0", "1.1" );
+ assertVersionOlder( "1.1", "1.2.0" );
+
+ assertVersionOlder( "1.1.2.alpha1", "1.1.2" );
+ assertVersionOlder( "1.1.2.alpha1", "1.1.2.beta1" );
+ assertVersionOlder( "1.1.2.beta1", "1.2" );
+
+ assertVersionOlder( "1.0-alpha-1", "1.0" );
+ assertVersionOlder( "1.0-alpha-1", "1.0-alpha-2" );
+ assertVersionOlder( "1.0-alpha-2", "1.0-alpha-15" );
+ assertVersionOlder( "1.0-alpha-1", "1.0-beta-1" );
+
+ assertVersionOlder( "1.0-beta-1", "1.0-SNAPSHOT" );
+ assertVersionOlder( "1.0-SNAPSHOT", "1.0" );
+ assertVersionOlder( "1.0-alpha-1-SNAPSHOT", "1.0-alpha-1" );
+
+ assertVersionOlder( "1.0", "1.0-1" );
+ assertVersionOlder( "1.0-1", "1.0-2" );
+ assertVersionEqual( "2.0-0", "2.0" );
+ assertVersionOlder( "2.0", "2.0-1" );
+ assertVersionOlder( "2.0.0", "2.0-1" );
+ assertVersionOlder( "2.0-1", "2.0.1" );
+
+ assertVersionOlder( "2.0.1-klm", "2.0.1-lmn" );
+ assertVersionOlder( "2.0.1", "2.0.1-xyz" );
+ assertVersionOlder( "2.0.1-xyz-1", "2.0.1-1-xyz" );
+
+ assertVersionOlder( "2.0.1", "2.0.1-123" );
+ assertVersionOlder( "2.0.1-xyz", "2.0.1-123" );
+
+ assertVersionOlder( "1.2.3-10000000000", "1.2.3-10000000001" );
+ assertVersionOlder( "1.2.3-1", "1.2.3-10000000001" );
+ assertVersionOlder( "2.3.0-v200706262000", "2.3.0-v200706262130" ); // org.eclipse:emf:2.3.0-v200706262000
+ // org.eclipse.wst.common_core.feature_2.0.0.v200706041905-7C78EK9E_EkMNfNOd2d8qq
+ assertVersionOlder( "2.0.0.v200706041905-7C78EK9E_EkMNfNOd2d8qq", "2.0.0.v200706041906-7C78EK9E_EkMNfNOd2d8qq" );
+ }
+
+ public void testVersionSnapshotComparing()
+ {
+ assertVersionEqual( "1-SNAPSHOT", "1-SNAPSHOT" );
+ assertVersionOlder( "1-SNAPSHOT", "2-SNAPSHOT" );
+ assertVersionOlder( "1.5-SNAPSHOT", "2-SNAPSHOT" );
+ assertVersionOlder( "1-SNAPSHOT", "2.5-SNAPSHOT" );
+ assertVersionEqual( "1-SNAPSHOT", "1.0-SNAPSHOT" );
+ assertVersionEqual( "1-SNAPSHOT", "1.0.0-SNAPSHOT" );
+ assertVersionOlder( "1.0-SNAPSHOT", "1.1-SNAPSHOT" );
+ assertVersionOlder( "1.1-SNAPSHOT", "1.2-SNAPSHOT" );
+ assertVersionOlder( "1.0.0-SNAPSHOT", "1.1-SNAPSHOT" );
+ assertVersionOlder( "1.1-SNAPSHOT", "1.2.0-SNAPSHOT" );
+
+ // assertVersionOlder( "1.0-alpha-1-SNAPSHOT", "1.0-SNAPSHOT" );
+ assertVersionOlder( "1.0-alpha-1-SNAPSHOT", "1.0-alpha-2-SNAPSHOT" );
+ assertVersionOlder( "1.0-alpha-1-SNAPSHOT", "1.0-beta-1-SNAPSHOT" );
+
+ assertVersionOlder( "1.0-beta-1-SNAPSHOT", "1.0-SNAPSHOT-SNAPSHOT" );
+ assertVersionOlder( "1.0-SNAPSHOT-SNAPSHOT", "1.0-SNAPSHOT" );
+ assertVersionOlder( "1.0-alpha-1-SNAPSHOT-SNAPSHOT", "1.0-alpha-1-SNAPSHOT" );
+
+ assertVersionOlder( "1.0-SNAPSHOT", "1.0-1-SNAPSHOT" );
+ assertVersionOlder( "1.0-1-SNAPSHOT", "1.0-2-SNAPSHOT" );
+ // assertVersionEqual( "2.0-0-SNAPSHOT", "2.0-SNAPSHOT" );
+ assertVersionOlder( "2.0-SNAPSHOT", "2.0-1-SNAPSHOT" );
+ assertVersionOlder( "2.0.0-SNAPSHOT", "2.0-1-SNAPSHOT" );
+ assertVersionOlder( "2.0-1-SNAPSHOT", "2.0.1-SNAPSHOT" );
+
+ assertVersionOlder( "2.0.1-klm-SNAPSHOT", "2.0.1-lmn-SNAPSHOT" );
+ // assertVersionOlder( "2.0.1-xyz-SNAPSHOT", "2.0.1-SNAPSHOT" );
+ assertVersionOlder( "2.0.1-SNAPSHOT", "2.0.1-123-SNAPSHOT" );
+ assertVersionOlder( "2.0.1-xyz-SNAPSHOT", "2.0.1-123-SNAPSHOT" );
+ }
+
+ public void testSnapshotVsReleases()
+ {
+ assertVersionOlder( "1.0-RC1", "1.0-SNAPSHOT" );
+ assertVersionOlder( "1.0-rc1", "1.0-SNAPSHOT" );
+ assertVersionOlder( "1.0-rc-1", "1.0-SNAPSHOT" );
+ }
+
+ public void testHashCode()
+ {
+ ArtifactVersion v1 = newArtifactVersion( "1" );
+ ArtifactVersion v2 = newArtifactVersion( "1.0" );
+ assertEquals( true, v1.equals( v2 ) );
+ assertEquals( v1.hashCode(), v2.hashCode() );
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( newArtifactVersion( "1" ).equals( null ) );
+ }
+
+ public void testEqualsTypeSafe()
+ {
+ assertFalse( newArtifactVersion( "1" ).equals( "non-an-artifact-version-instance" ) );
+ }
+
+ public void testNonNumericVersionRepresentationReturnsANumberFormatException()
+ {
+ try
+ {
+ new DefaultArtifactVersion( "..." );
+ }
+ catch ( Exception e )
+ {
+ assertTrue( "We expect a NumberFormatException to be thrown.", e instanceof NumberFormatException );
+ }
+ }
+
+ private void assertVersionOlder( String left, String right )
+ {
+ assertTrue( left + " should be older than " + right,
+ newArtifactVersion( left ).compareTo( newArtifactVersion( right ) ) < 0 );
+ assertTrue( right + " should be newer than " + left,
+ newArtifactVersion( right ).compareTo( newArtifactVersion( left ) ) > 0 );
+ }
+
+ private void assertVersionEqual( String left, String right )
+ {
+ assertTrue( left + " should be equal to " + right,
+ newArtifactVersion( left ).compareTo( newArtifactVersion( right ) ) == 0 );
+ assertTrue( right + " should be equal to " + left,
+ newArtifactVersion( right ).compareTo( newArtifactVersion( left ) ) == 0 );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
new file mode 100644
index 00000000..14b16cba
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
@@ -0,0 +1,730 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * Tests version range construction.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class VersionRangeTest
+ extends TestCase
+{
+ private static final String CHECK_NUM_RESTRICTIONS = "check number of restrictions";
+
+ private static final String CHECK_UPPER_BOUND = "check upper bound";
+
+ private static final String CHECK_UPPER_BOUND_INCLUSIVE = "check upper bound is inclusive";
+
+ private static final String CHECK_LOWER_BOUND = "check lower bound";
+
+ private static final String CHECK_LOWER_BOUND_INCLUSIVE = "check lower bound is inclusive";
+
+ private static final String CHECK_VERSION_RECOMMENDATION = "check version recommended";
+
+ private static final String CHECK_SELECTED_VERSION_KNOWN = "check selected version known";
+
+ private static final String CHECK_SELECTED_VERSION = "check selected version";
+
+ public void testRange()
+ throws InvalidVersionSpecificationException, OverConstrainedVersionException
+ {
+ Artifact artifact = null;
+
+ VersionRange range = VersionRange.createFromVersionSpec( "(,1.0]" );
+ List<Restriction> restrictions = range.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ Restriction restriction = restrictions.get( 0 );
+ assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.0", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ assertNull( CHECK_VERSION_RECOMMENDATION, range.getRecommendedVersion() );
+ assertFalse( CHECK_SELECTED_VERSION_KNOWN, range.isSelectedVersionKnown( artifact ) );
+ assertNull( CHECK_SELECTED_VERSION, range.getSelectedVersion( artifact ) );
+
+ range = VersionRange.createFromVersionSpec( "1.0" );
+ assertEquals( CHECK_VERSION_RECOMMENDATION, "1.0", range.getRecommendedVersion().toString() );
+ restrictions = range.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ assertTrue( CHECK_SELECTED_VERSION_KNOWN, range.isSelectedVersionKnown( artifact ) );
+ assertEquals( CHECK_SELECTED_VERSION, "1.0", range.getSelectedVersion( artifact ).toString() );
+
+ range = VersionRange.createFromVersionSpec( "[1.0]" );
+ restrictions = range.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.0", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.0", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ assertNull( CHECK_VERSION_RECOMMENDATION, range.getRecommendedVersion() );
+ assertFalse( CHECK_SELECTED_VERSION_KNOWN, range.isSelectedVersionKnown( artifact ) );
+ assertNull( CHECK_SELECTED_VERSION, range.getSelectedVersion( artifact ) );
+
+ range = VersionRange.createFromVersionSpec( "[1.2,1.3]" );
+ restrictions = range.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.2", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.3", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ assertNull( CHECK_VERSION_RECOMMENDATION, range.getRecommendedVersion() );
+ assertFalse( CHECK_SELECTED_VERSION_KNOWN, range.isSelectedVersionKnown( artifact ) );
+ assertNull( CHECK_SELECTED_VERSION, range.getSelectedVersion( artifact ) );
+
+ range = VersionRange.createFromVersionSpec( "[1.0,2.0)" );
+ restrictions = range.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.0", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "2.0", restriction.getUpperBound().toString() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ assertNull( CHECK_VERSION_RECOMMENDATION, range.getRecommendedVersion() );
+ assertFalse( CHECK_SELECTED_VERSION_KNOWN, range.isSelectedVersionKnown( artifact ) );
+ assertNull( CHECK_SELECTED_VERSION, range.getSelectedVersion( artifact ) );
+
+ range = VersionRange.createFromVersionSpec( "[1.5,)" );
+ restrictions = range.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.5", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ assertNull( CHECK_VERSION_RECOMMENDATION, range.getRecommendedVersion() );
+ assertFalse( CHECK_SELECTED_VERSION_KNOWN, range.isSelectedVersionKnown( artifact ) );
+ assertNull( CHECK_SELECTED_VERSION, range.getSelectedVersion( artifact ) );
+
+ range = VersionRange.createFromVersionSpec( "(,1.0],[1.2,)" );
+ restrictions = range.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 2, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.0", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ assertNull( CHECK_VERSION_RECOMMENDATION, range.getRecommendedVersion() );
+ restriction = restrictions.get( 1 );
+ assertEquals( CHECK_LOWER_BOUND, "1.2", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ assertNull( CHECK_VERSION_RECOMMENDATION, range.getRecommendedVersion() );
+ assertFalse( CHECK_SELECTED_VERSION_KNOWN, range.isSelectedVersionKnown( artifact ) );
+ assertNull( CHECK_SELECTED_VERSION, range.getSelectedVersion( artifact ) );
+
+ range = VersionRange.createFromVersionSpec( "[1.0,)" );
+ assertFalse( range.containsVersion( new DefaultArtifactVersion( "1.0-SNAPSHOT" ) ) );
+
+ range = VersionRange.createFromVersionSpec( "[1.0,1.1-SNAPSHOT]" );
+ assertTrue( range.containsVersion( new DefaultArtifactVersion( "1.1-SNAPSHOT" ) ) );
+
+ range = VersionRange.createFromVersionSpec( "[5.0.9.0,5.0.10.0)" );
+ assertTrue( range.containsVersion( new DefaultArtifactVersion( "5.0.9.0" ) ) );
+ }
+
+ public void testInvalidRanges()
+ {
+ checkInvalidRange( "(1.0)" );
+ checkInvalidRange( "[1.0)" );
+ checkInvalidRange( "(1.0]" );
+ checkInvalidRange( "(1.0,1.0]" );
+ checkInvalidRange( "[1.0,1.0)" );
+ checkInvalidRange( "(1.0,1.0)" );
+ checkInvalidRange( "[1.1,1.0]" );
+ checkInvalidRange( "[1.0,1.2),1.3" );
+ // overlap
+ checkInvalidRange( "[1.0,1.2),(1.1,1.3]" );
+ // overlap
+ checkInvalidRange( "[1.1,1.3),(1.0,1.2]" );
+ // ordering
+ checkInvalidRange( "(1.1,1.2],[1.0,1.1)" );
+ }
+
+ public void testIntersections()
+ throws InvalidVersionSpecificationException
+ {
+ VersionRange range1 = VersionRange.createFromVersionSpec( "1.0" );
+ VersionRange range2 = VersionRange.createFromVersionSpec( "1.1" );
+ VersionRange mergedRange = range1.restrict( range2 );
+ // TODO: current policy is to retain the original version - is this correct, do we need strategies or is that handled elsewhere?
+// assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1", mergedRange.getRecommendedVersion().toString() );
+ assertEquals( CHECK_VERSION_RECOMMENDATION, "1.0", mergedRange.getRecommendedVersion().toString() );
+ List<Restriction> restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ Restriction restriction = restrictions.get( 0 );
+ assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ mergedRange = range2.restrict( range1 );
+ assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1", mergedRange.getRecommendedVersion().toString() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ // TODO: test reversed restrictions on all below
+ range1 = VersionRange.createFromVersionSpec( "[1.0,)" );
+ range2 = VersionRange.createFromVersionSpec( "1.1" );
+ mergedRange = range1.restrict( range2 );
+ assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1", mergedRange.getRecommendedVersion().toString() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.0", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.1,)" );
+ range2 = VersionRange.createFromVersionSpec( "1.1" );
+ mergedRange = range1.restrict( range2 );
+ assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1", mergedRange.getRecommendedVersion().toString() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.1]" );
+ range2 = VersionRange.createFromVersionSpec( "1.1" );
+ mergedRange = range1.restrict( range2 );
+ assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1", mergedRange.getRecommendedVersion().toString() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "(1.1,)" );
+ range2 = VersionRange.createFromVersionSpec( "1.1" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.2,)" );
+ range2 = VersionRange.createFromVersionSpec( "1.1" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.2", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "(,1.2]" );
+ range2 = VersionRange.createFromVersionSpec( "1.1" );
+ mergedRange = range1.restrict( range2 );
+ assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1", mergedRange.getRecommendedVersion().toString() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.2", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "(,1.1]" );
+ range2 = VersionRange.createFromVersionSpec( "1.1" );
+ mergedRange = range1.restrict( range2 );
+ assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1", mergedRange.getRecommendedVersion().toString() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.1", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "(,1.1)" );
+ range2 = VersionRange.createFromVersionSpec( "1.1" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.1", restriction.getUpperBound().toString() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "(,1.0]" );
+ range2 = VersionRange.createFromVersionSpec( "1.1" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.0", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "(,1.0], [1.1,)" );
+ range2 = VersionRange.createFromVersionSpec( "1.2" );
+ mergedRange = range1.restrict( range2 );
+ assertEquals( CHECK_VERSION_RECOMMENDATION, "1.2", mergedRange.getRecommendedVersion().toString() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 2, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.0", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ restriction = restrictions.get( 1 );
+ assertEquals( CHECK_LOWER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "(,1.0], [1.1,)" );
+ range2 = VersionRange.createFromVersionSpec( "1.0.5" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 2, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.0", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ restriction = restrictions.get( 1 );
+ assertEquals( CHECK_LOWER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "(,1.1), (1.1,)" );
+ range2 = VersionRange.createFromVersionSpec( "1.1" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 2, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.1", restriction.getUpperBound().toString() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ restriction = restrictions.get( 1 );
+ assertEquals( CHECK_LOWER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.1,1.3]" );
+ range2 = VersionRange.createFromVersionSpec( "(1.1,)" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.3", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "(,1.3)" );
+ range2 = VersionRange.createFromVersionSpec( "[1.2,1.3]" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.2", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.3", restriction.getUpperBound().toString() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.1,1.3]" );
+ range2 = VersionRange.createFromVersionSpec( "[1.2,)" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.2", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.3", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "(,1.3]" );
+ range2 = VersionRange.createFromVersionSpec( "[1.2,1.4]" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.2", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.3", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "(1.2,1.3]" );
+ range2 = VersionRange.createFromVersionSpec( "[1.1,1.4]" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.2", restriction.getLowerBound().toString() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.3", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "(1.2,1.3)" );
+ range2 = VersionRange.createFromVersionSpec( "[1.1,1.4]" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.2", restriction.getLowerBound().toString() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.3", restriction.getUpperBound().toString() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.2,1.3)" );
+ range2 = VersionRange.createFromVersionSpec( "[1.1,1.4]" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.2", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.3", restriction.getUpperBound().toString() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.0,1.1]" );
+ range2 = VersionRange.createFromVersionSpec( "[1.1,1.4]" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.1", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.0,1.1)" );
+ range2 = VersionRange.createFromVersionSpec( "[1.1,1.4]" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 0, restrictions.size() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.0,1.2],[1.3,1.5]" );
+ range2 = VersionRange.createFromVersionSpec( "[1.1]" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.1", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.0,1.2],[1.3,1.5]" );
+ range2 = VersionRange.createFromVersionSpec( "[1.4]" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.4", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.4", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.0,1.2],[1.3,1.5]" );
+ range2 = VersionRange.createFromVersionSpec( "[1.1,1.4]" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 2, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.2", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ restriction = restrictions.get( 1 );
+ assertEquals( CHECK_LOWER_BOUND, "1.3", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.4", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.0,1.2),(1.3,1.5]" );
+ range2 = VersionRange.createFromVersionSpec( "[1.1,1.4]" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 2, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.2", restriction.getUpperBound().toString() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ restriction = restrictions.get( 1 );
+ assertEquals( CHECK_LOWER_BOUND, "1.3", restriction.getLowerBound().toString() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.4", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.0,1.2],[1.3,1.5]" );
+ range2 = VersionRange.createFromVersionSpec( "(1.1,1.4)" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 2, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.2", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ restriction = restrictions.get( 1 );
+ assertEquals( CHECK_LOWER_BOUND, "1.3", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.4", restriction.getUpperBound().toString() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.0,1.2),(1.3,1.5]" );
+ range2 = VersionRange.createFromVersionSpec( "(1.1,1.4)" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 2, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.2", restriction.getUpperBound().toString() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ restriction = restrictions.get( 1 );
+ assertEquals( CHECK_LOWER_BOUND, "1.3", restriction.getLowerBound().toString() );
+ assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.4", restriction.getUpperBound().toString() );
+ assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "(,1.1),(1.4,)" );
+ range2 = VersionRange.createFromVersionSpec( "[1.1,1.4]" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 0, restrictions.size() );
+
+ range1 = VersionRange.createFromVersionSpec( "(,1.1],[1.4,)" );
+ range2 = VersionRange.createFromVersionSpec( "(1.1,1.4)" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 0, restrictions.size() );
+
+ range1 = VersionRange.createFromVersionSpec( "[,1.1],[1.4,]" );
+ range2 = VersionRange.createFromVersionSpec( "[1.2,1.3]" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 0, restrictions.size() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.0,1.2],[1.3,1.5]" );
+ range2 = VersionRange.createFromVersionSpec( "[1.1,1.4],[1.6,]" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 2, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.2", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ restriction = restrictions.get( 1 );
+ assertEquals( CHECK_LOWER_BOUND, "1.3", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.4", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.0,1.2],[1.3,1.5]" );
+ range2 = VersionRange.createFromVersionSpec( "[1.1,1.4],[1.5,]" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 3, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.2", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ restriction = restrictions.get( 1 );
+ assertEquals( CHECK_LOWER_BOUND, "1.3", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.4", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ restriction = restrictions.get( 2 );
+ assertEquals( CHECK_LOWER_BOUND, "1.5", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.5", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ range1 = VersionRange.createFromVersionSpec( "[1.0,1.2],[1.3,1.7]" );
+ range2 = VersionRange.createFromVersionSpec( "[1.1,1.4],[1.5,1.6]" );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 3, restrictions.size() );
+ restriction = restrictions.get( 0 );
+ assertEquals( CHECK_LOWER_BOUND, "1.1", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.2", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ restriction = restrictions.get( 1 );
+ assertEquals( CHECK_LOWER_BOUND, "1.3", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.4", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+ restriction = restrictions.get( 2 );
+ assertEquals( CHECK_LOWER_BOUND, "1.5", restriction.getLowerBound().toString() );
+ assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, restriction.isLowerBoundInclusive() );
+ assertEquals( CHECK_UPPER_BOUND, "1.6", restriction.getUpperBound().toString() );
+ assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
+
+ // test restricting empty sets
+ range1 = VersionRange.createFromVersionSpec( "[,1.1],[1.4,]" );
+ range2 = VersionRange.createFromVersionSpec( "[1.2,1.3]" );
+ range1 = range1.restrict( range2 );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 0, restrictions.size() );
+
+ range1 = VersionRange.createFromVersionSpec( "[,1.1],[1.4,]" );
+ range2 = VersionRange.createFromVersionSpec( "[1.2,1.3]" );
+ range2 = range1.restrict( range2 );
+ mergedRange = range1.restrict( range2 );
+ assertNull( CHECK_VERSION_RECOMMENDATION, mergedRange.getRecommendedVersion() );
+ restrictions = mergedRange.getRestrictions();
+ assertEquals( CHECK_NUM_RESTRICTIONS, 0, restrictions.size() );
+ }
+
+ public void testReleaseRangeBoundsContainsSnapshots()
+ throws InvalidVersionSpecificationException
+ {
+ VersionRange range = VersionRange.createFromVersionSpec( "[1.0,1.2]" );
+
+ assertTrue( range.containsVersion( new DefaultArtifactVersion( "1.1-SNAPSHOT" ) ) );
+ assertTrue( range.containsVersion( new DefaultArtifactVersion( "1.2-SNAPSHOT" ) ) );
+ assertFalse( range.containsVersion( new DefaultArtifactVersion( "1.0-SNAPSHOT" ) ) );
+ }
+
+ public void testSnapshotRangeBoundsCanContainSnapshots()
+ throws InvalidVersionSpecificationException
+ {
+ VersionRange range = VersionRange.createFromVersionSpec( "[1.0,1.2-SNAPSHOT]" );
+
+ assertTrue( range.containsVersion( new DefaultArtifactVersion( "1.1-SNAPSHOT" ) ) );
+ assertTrue( range.containsVersion( new DefaultArtifactVersion( "1.2-SNAPSHOT" ) ) );
+
+ range = VersionRange.createFromVersionSpec( "[1.0-SNAPSHOT,1.2]" );
+
+ assertTrue( range.containsVersion( new DefaultArtifactVersion( "1.0-SNAPSHOT" ) ) );
+ assertTrue( range.containsVersion( new DefaultArtifactVersion( "1.1-SNAPSHOT" ) ) );
+ }
+
+ public void testSnapshotSoftVersionCanContainSnapshot()
+ throws InvalidVersionSpecificationException
+ {
+ VersionRange range = VersionRange.createFromVersionSpec( "1.0-SNAPSHOT" );
+
+ assertTrue( range.containsVersion( new DefaultArtifactVersion( "1.0-SNAPSHOT" ) ) );
+ }
+
+ private void checkInvalidRange( String version )
+ {
+ try
+ {
+ VersionRange.createFromVersionSpec( version );
+ fail( "Version " + version + " should have failed to construct" );
+ }
+ catch ( InvalidVersionSpecificationException expected )
+ {
+ // expected
+ }
+ }
+
+ public void testContains() throws InvalidVersionSpecificationException
+ {
+ ArtifactVersion actualVersion = new DefaultArtifactVersion( "2.0.5" );
+ assertTrue( enforceVersion( "2.0.5", actualVersion ) );
+ assertTrue( enforceVersion( "2.0.4", actualVersion ) );
+ assertTrue( enforceVersion( "[2.0.5]", actualVersion ) );
+ assertFalse( enforceVersion( "[2.0.6,)", actualVersion ) );
+ assertFalse( enforceVersion( "[2.0.6]", actualVersion ) );
+ assertTrue( enforceVersion( "[2.0,2.1]", actualVersion ) );
+ assertFalse( enforceVersion( "[2.0,2.0.3]", actualVersion ) );
+ assertTrue( enforceVersion( "[2.0,2.0.5]", actualVersion ) );
+ assertFalse( enforceVersion( "[2.0,2.0.5)", actualVersion ) );
+ }
+
+ public boolean enforceVersion( String requiredVersionRange, ArtifactVersion actualVersion )
+ throws InvalidVersionSpecificationException
+ {
+ VersionRange vr = null;
+
+ vr = VersionRange.createFromVersionSpec( requiredVersionRange );
+
+ return vr.containsVersion( actualVersion );
+ }
+
+ public void testOrder0()
+ {
+ // assertTrue( new DefaultArtifactVersion( "1.0-alpha10" ).compareTo( new DefaultArtifactVersion( "1.0-alpha1" ) ) > 0 );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/pom.xml
new file mode 100644
index 00000000..791b5e4e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/pom.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.3.3</version>
+ </parent>
+
+ <artifactId>maven-builder-support</artifactId>
+
+ <name>Maven Builder Support</name>
+ <description>Support for descriptor builders (model, setting, toolchains)</description>
+
+ <scm><!-- remove when git scm url format can accept artifact-id at the end, as automatically inherited -->
+ <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
+ <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
+ <tag>maven-3.3.3</tag>
+ </scm>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/DefaultProblem.java b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/DefaultProblem.java
new file mode 100644
index 00000000..ad1fc40f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/DefaultProblem.java
@@ -0,0 +1,161 @@
+package org.apache.maven.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Describes a problem that was encountered during settings building. A problem can either be an exception that was
+ * thrown or a simple string message. In addition, a problem carries a hint about its source, e.g. the settings file
+ * that exhibits the problem.
+ *
+ * @author Benjamin Bentmann
+ * @author Robert Scholte
+ */
+class DefaultProblem
+ implements Problem
+{
+
+ private final String source;
+
+ private final int lineNumber;
+
+ private final int columnNumber;
+
+ private final String message;
+
+ private final Exception exception;
+
+ private final Severity severity;
+
+ /**
+ * Creates a new problem with the specified message and exception.
+ * Either {@code message} or {@code exception} is required
+ *
+ * @param message The message describing the problem, may be {@code null}.
+ * @param severity The severity level of the problem, may be {@code null} to default to
+ * {@link SettingsProblem.Severity#ERROR}.
+ * @param source A hint about the source of the problem like a file path, may be {@code null}.
+ * @param lineNumber The one-based index of the line containing the problem or {@code -1} if unknown.
+ * @param columnNumber The one-based index of the column containing the problem or {@code -1} if unknown.
+ * @param exception The exception that caused this problem, may be {@code null}.
+ */
+ public DefaultProblem( String message, Severity severity, String source, int lineNumber, int columnNumber,
+ Exception exception )
+ {
+ this.message = message;
+ this.severity = ( severity != null ) ? severity : Severity.ERROR;
+ this.source = ( source != null ) ? source : "";
+ this.lineNumber = lineNumber;
+ this.columnNumber = columnNumber;
+ this.exception = exception;
+ }
+
+ public String getSource()
+ {
+ return source;
+ }
+
+ public int getLineNumber()
+ {
+ return lineNumber;
+ }
+
+ public int getColumnNumber()
+ {
+ return columnNumber;
+ }
+
+ public String getLocation()
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+
+ if ( getSource().length() > 0 )
+ {
+ if ( buffer.length() > 0 )
+ {
+ buffer.append( ", " );
+ }
+ buffer.append( getSource() );
+ }
+
+ if ( getLineNumber() > 0 )
+ {
+ if ( buffer.length() > 0 )
+ {
+ buffer.append( ", " );
+ }
+ buffer.append( "line " ).append( getLineNumber() );
+ }
+
+ if ( getColumnNumber() > 0 )
+ {
+ if ( buffer.length() > 0 )
+ {
+ buffer.append( ", " );
+ }
+ buffer.append( "column " ).append( getColumnNumber() );
+ }
+
+ return buffer.toString();
+ }
+
+ public Exception getException()
+ {
+ return exception;
+ }
+
+ public String getMessage()
+ {
+ String msg;
+
+ if ( message != null && message.length() > 0 )
+ {
+ msg = message;
+ }
+ else
+ {
+ msg = exception.getMessage();
+
+ if ( msg == null )
+ {
+ msg = "";
+ }
+ }
+
+ return msg;
+ }
+
+ public Severity getSeverity()
+ {
+ return severity;
+ }
+
+ @Override
+ public String toString()
+ {
+ StringBuilder buffer = new StringBuilder( 128 );
+
+ buffer.append( "[" ).append( getSeverity() ).append( "] " );
+ buffer.append( getMessage() );
+ buffer.append( " @ " ).append( getLocation() );
+
+ return buffer.toString();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/DefaultProblemCollector.java b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/DefaultProblemCollector.java
new file mode 100644
index 00000000..567f620e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/DefaultProblemCollector.java
@@ -0,0 +1,64 @@
+package org.apache.maven.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Collects problems that are encountered during settings building.
+ *
+ * @author Benjamin Bentmann
+ * @author Robert Scholte
+ */
+class DefaultProblemCollector
+ implements ProblemCollector
+{
+
+ private List<Problem> problems;
+
+ private String source;
+
+ public DefaultProblemCollector( List<Problem> problems )
+ {
+ this.problems = ( problems != null ) ? problems : new ArrayList<Problem>();
+ }
+
+ @Override
+ public List<Problem> getProblems()
+ {
+ return problems;
+ }
+
+ @Override
+ public void setSource( String source )
+ {
+ this.source = source;
+ }
+
+ @Override
+ public void add( Problem.Severity severity, String message, int line, int column, Exception cause )
+ {
+ Problem problem = new DefaultProblem( message, severity, source, line, column, cause );
+
+ problems.add( problem );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/FileSource.java b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/FileSource.java
new file mode 100644
index 00000000..1a6fc2f4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/FileSource.java
@@ -0,0 +1,79 @@
+package org.apache.maven.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Wraps an ordinary {@link File} as a source.
+ *
+ * @author Benjamin Bentmann
+ */
+public class FileSource
+ implements Source
+{
+ private final File file;
+
+ /**
+ * Creates a new source backed by the specified file.
+ *
+ * @param file The file, must not be {@code null}.
+ */
+ public FileSource( File file )
+ {
+ if ( file == null )
+ {
+ throw new IllegalArgumentException( "no file specified" );
+ }
+ this.file = file.getAbsoluteFile();
+ }
+
+ @Override
+ public InputStream getInputStream()
+ throws IOException
+ {
+ return new FileInputStream( file );
+ }
+
+ @Override
+ public String getLocation()
+ {
+ return file.getPath();
+ }
+
+ /**
+ * Gets the file of this source.
+ *
+ * @return The underlying file, never {@code null}.
+ */
+ public File getFile()
+ {
+ return file;
+ }
+
+ @Override
+ public String toString()
+ {
+ return getLocation();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/Problem.java b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/Problem.java
new file mode 100644
index 00000000..9ab9b3a8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/Problem.java
@@ -0,0 +1,101 @@
+package org.apache.maven.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Describes a problem that was encountered during settings building. A problem can either be an exception that was
+ * thrown or a simple string message. In addition, a problem carries a hint about its source, e.g. the settings file
+ * that exhibits the problem.
+ *
+ * @author Benjamin Bentmann
+ * @author Robert Scholte
+ */
+public interface Problem
+{
+
+ /**
+ * The different severity levels for a problem, in decreasing order.
+ */
+ enum Severity
+ {
+
+ FATAL, //
+ ERROR, //
+ WARNING //
+
+ }
+
+ /**
+ * Gets the hint about the source of the problem. While the syntax of this hint is unspecified and depends on the
+ * creator of the problem, the general expectation is that the hint provides sufficient information to the user to
+ * track the problem back to its origin. A concrete example for such a source hint can be the file path or URL from
+ * which the settings were read.
+ *
+ * @return The hint about the source of the problem or an empty string if unknown, never {@code null}.
+ */
+ String getSource();
+
+ /**
+ * Gets the one-based index of the line containing the problem. The line number should refer to some text file that
+ * is given by {@link #getSource()}.
+ *
+ * @return The one-based index of the line containing the problem or a non-positive value if unknown.
+ */
+ int getLineNumber();
+
+ /**
+ * Gets the one-based index of the column containing the problem. The column number should refer to some text file
+ * that is given by {@link #getSource()}.
+ *
+ * @return The one-based index of the column containing the problem or non-positive value if unknown.
+ */
+ int getColumnNumber();
+
+ /**
+ * Gets the location of the problem. The location is a user-friendly combination of the values from
+ * {@link #getSource()}, {@link #getLineNumber()} and {@link #getColumnNumber()}. The exact syntax of the returned
+ * value is undefined.
+ *
+ * @return The location of the problem, never {@code null}.
+ */
+ String getLocation();
+
+ /**
+ * Gets the exception that caused this problem (if any).
+ *
+ * @return The exception that caused this problem or {@code null} if not applicable.
+ */
+ Exception getException();
+
+ /**
+ * Gets the message that describes this problem.
+ *
+ * @return The message describing this problem, never {@code null}.
+ */
+ String getMessage();
+
+ /**
+ * Gets the severity level of this problem.
+ *
+ * @return The severity level of this problem, never {@code null}.
+ */
+ Severity getSeverity();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/ProblemCollector.java b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/ProblemCollector.java
new file mode 100644
index 00000000..e7015676
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/ProblemCollector.java
@@ -0,0 +1,59 @@
+package org.apache.maven.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+/**
+ * Collects problems that are encountered during settings building.
+ *
+ * @author Benjamin Bentmann
+ * @author Robert Scholte
+ */
+public interface ProblemCollector
+{
+
+ /**
+ * Adds the specified problem.
+ * Either message or exception is required
+ *
+ * @param severity The severity of the problem, must not be {@code null}.
+ * @param message The detail message of the problem, may be {@code null}.
+ * @param line The one-based index of the line containing the problem or {@code -1} if unknown.
+ * @param column The one-based index of the column containing the problem or {@code -1} if unknown.
+ * @param cause The cause of the problem, may be {@code null}.
+ */
+ void add( Problem.Severity severity, String message, int line, int column, Exception cause );
+
+ /**
+ * The next messages will be bound to this source. When calling this method again, previous messages keep
+ * their source, but the next messages will use the new source.
+ *
+ * @param source
+ */
+ void setSource( String source );
+
+ /**
+ *
+ * @return the collected Problems, never {@code null}
+ */
+ List<Problem> getProblems();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/ProblemCollectorFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/ProblemCollectorFactory.java
new file mode 100644
index 00000000..c1c23737
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/ProblemCollectorFactory.java
@@ -0,0 +1,43 @@
+package org.apache.maven.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+/**
+ *
+ * @author Robert Scholte
+ * @since 3.3.0
+ */
+public class ProblemCollectorFactory
+{
+
+ /**
+ * The default implementation is not visible, create it with this factory
+ *
+ * @param problems starting set of problems, may be {@code null}
+ * @return a new instance of a ProblemCollector
+ */
+ public static ProblemCollector newInstance( List<Problem> problems )
+ {
+ return new DefaultProblemCollector( problems );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/Source.java b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/Source.java
new file mode 100644
index 00000000..1f7510ba
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/Source.java
@@ -0,0 +1,49 @@
+package org.apache.maven.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Provides access to the contents of a source independently of the backing store (e.g. file system, database, memory).
+ *
+ * @author Benjamin Bentmann
+ */
+public interface Source
+{
+
+ /**
+ * Gets a byte stream to the source contents. Closing the returned stream is the responsibility of the caller.
+ *
+ * @return A byte stream to the source contents, never {@code null}.
+ */
+ InputStream getInputStream()
+ throws IOException;
+
+ /**
+ * Provides a user-friendly hint about the location of the source. This could be a local file path, a URI or just an
+ * empty string. The intention is to assist users during error reporting.
+ *
+ * @return A user-friendly hint about the location of the source, never {@code null}.
+ */
+ String getLocation();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/StringSource.java b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/StringSource.java
new file mode 100644
index 00000000..f9d87c0b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/StringSource.java
@@ -0,0 +1,90 @@
+package org.apache.maven.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Wraps an ordinary {@link CharSequence} as a source.
+ *
+ * @author Benjamin Bentmann
+ */
+public class StringSource
+ implements Source
+{
+
+ private String content;
+
+ private String location;
+
+ /**
+ * Creates a new source backed by the specified string.
+ *
+ * @param content The String representation, may be empty or {@code null}.
+ */
+ public StringSource( CharSequence content )
+ {
+ this( content, null );
+ }
+
+ /**
+ * Creates a new source backed by the specified string.
+ *
+ * @param content The String representation, may be empty or {@code null}.
+ * @param location The location to report for this use, may be {@code null}.
+ */
+ public StringSource( CharSequence content, String location )
+ {
+ this.content = ( content != null ) ? content.toString() : "";
+ this.location = ( location != null ) ? location : "(memory)";
+ }
+
+ @Override
+ public InputStream getInputStream()
+ throws IOException
+ {
+ return new ByteArrayInputStream( content.getBytes( "UTF-8" ) );
+ }
+
+ @Override
+ public String getLocation()
+ {
+ return location;
+ }
+
+ /**
+ * Gets the content of this source.
+ *
+ * @return The underlying character stream, never {@code null}.
+ */
+ public String getContent()
+ {
+ return content;
+ }
+
+ @Override
+ public String toString()
+ {
+ return getLocation();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/UrlSource.java b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/UrlSource.java
new file mode 100644
index 00000000..7bd3e3c3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/UrlSource.java
@@ -0,0 +1,80 @@
+package org.apache.maven.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+/**
+ * Wraps an ordinary {@link URL} as a source.
+ *
+ * @author Benjamin Bentmann
+ */
+public class UrlSource
+ implements Source
+{
+
+ private URL url;
+
+ /**
+ * Creates a new source backed by the specified URL.
+ *
+ * @param url The file, must not be {@code null}.
+ */
+ public UrlSource( URL url )
+ {
+ if ( url == null )
+ {
+ throw new IllegalArgumentException( "no url specified" );
+ }
+ this.url = url;
+ }
+
+ @Override
+ public InputStream getInputStream()
+ throws IOException
+ {
+ return url.openStream();
+ }
+
+ @Override
+ public String getLocation()
+ {
+ return url.toString();
+ }
+
+ /**
+ * Gets the URL of this source.
+ *
+ * @return The underlying URL, never {@code null}.
+ */
+ public URL getUrl()
+ {
+ return url;
+ }
+
+ @Override
+ public String toString()
+ {
+ return getLocation();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/site/site.xml b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/site/site.xml
new file mode 100644
index 00000000..3a16bf98
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/site/site.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
+ <body>
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ <item name="JavaDocs" href="apidocs/index.html"/>
+ <item name="Source Xref" href="xref/index.html"/>
+ <!--item name="FAQ" href="faq.html"/-->
+ </menu>
+
+ <menu ref="parent"/>
+ <menu ref="reports"/>
+ </body>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/DefaultProblemCollectorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/DefaultProblemCollectorTest.java
new file mode 100644
index 00000000..bf0f8477
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/DefaultProblemCollectorTest.java
@@ -0,0 +1,76 @@
+package org.apache.maven.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.junit.Assert.*;
+
+import org.apache.maven.building.Problem.Severity;
+import org.junit.Test;
+
+public class DefaultProblemCollectorTest
+{
+
+ @Test
+ public void testGetProblems()
+ {
+ DefaultProblemCollector collector = new DefaultProblemCollector( null );
+ assertNotNull( collector.getProblems() );
+ assertEquals( 0, collector.getProblems().size() );
+
+ collector.add( null, "MESSAGE1", -1, -1, null );
+
+ Exception e2 = new Exception();
+ collector.add( Severity.WARNING, null, 42, 127, e2 );
+
+ assertEquals( 2, collector.getProblems().size() );
+
+ Problem p1 = collector.getProblems().get(0);
+ assertEquals( Severity.ERROR, p1.getSeverity() );
+ assertEquals( "MESSAGE1",p1.getMessage() );
+ assertEquals( -1, p1.getLineNumber() );
+ assertEquals( -1, p1.getColumnNumber() );
+ assertEquals( null, p1.getException() );
+
+ Problem p2 = collector.getProblems().get(1);
+ assertEquals( Severity.WARNING, p2.getSeverity() );
+ assertEquals( "",p2.getMessage() );
+ assertEquals( 42, p2.getLineNumber() );
+ assertEquals( 127, p2.getColumnNumber() );
+ assertEquals( e2, p2.getException() );
+ }
+
+ @Test
+ public void testSetSource()
+ {
+ DefaultProblemCollector collector = new DefaultProblemCollector( null );
+
+ collector.add( null, "PROBLEM1", -1, -1, null );
+
+ collector.setSource( "SOURCE_PROBLEM2" );
+ collector.add( null, "PROBLEM2", -1, -1, null );
+
+ collector.setSource( "SOURCE_PROBLEM3" );
+ collector.add( null, "PROBLEM3", -1, -1, null );
+
+ assertEquals( "", collector.getProblems().get( 0 ).getSource() );
+ assertEquals( "SOURCE_PROBLEM2", collector.getProblems().get( 1 ).getSource() );
+ assertEquals( "SOURCE_PROBLEM3", collector.getProblems().get( 2 ).getSource() );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/DefaultProblemTest.java b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/DefaultProblemTest.java
new file mode 100644
index 00000000..80a20da9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/DefaultProblemTest.java
@@ -0,0 +1,136 @@
+package org.apache.maven.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+
+import org.apache.maven.building.Problem.Severity;
+import org.junit.Test;
+
+public class DefaultProblemTest
+{
+
+ @Test
+ public void testGetSeverity()
+ {
+ DefaultProblem problem = new DefaultProblem( null, null, null, -1, -1, null );
+ assertEquals( Severity.ERROR, problem.getSeverity() );
+
+ problem = new DefaultProblem( null, Severity.FATAL, null, -1, -1, null );
+ assertEquals( Severity.FATAL, problem.getSeverity() );
+
+ problem = new DefaultProblem( null, Severity.ERROR, null, -1, -1, null );
+ assertEquals( Severity.ERROR, problem.getSeverity() );
+
+ problem = new DefaultProblem( null, Severity.WARNING, null, -1, -1, null );
+ assertEquals( Severity.WARNING, problem.getSeverity() );
+ }
+
+ @Test
+ public void testGetLineNumber()
+ {
+ DefaultProblem problem = new DefaultProblem( null, null, null, -1, -1, null );
+ assertEquals( -1, problem.getLineNumber() );
+
+ problem = new DefaultProblem( null, null, null, 42, -1, null );
+ assertEquals( 42, problem.getLineNumber() );
+
+ problem = new DefaultProblem( null, null, null, Integer.MAX_VALUE, -1, null );
+ assertEquals( Integer.MAX_VALUE, problem.getLineNumber() );
+
+ // this case is not specified, might also return -1
+ problem = new DefaultProblem( null, null, null, Integer.MIN_VALUE, -1, null );
+ assertEquals( Integer.MIN_VALUE, problem.getLineNumber() );
+ }
+
+ @Test
+ public void testGetColumnNumber()
+ {
+ DefaultProblem problem = new DefaultProblem( null, null, null, -1, -1, null );
+ assertEquals( -1, problem.getColumnNumber() );
+
+ problem = new DefaultProblem( null, null, null, -1, 42, null );
+ assertEquals( 42, problem.getColumnNumber() );
+
+ problem = new DefaultProblem( null, null, null, -1, Integer.MAX_VALUE, null );
+ assertEquals( Integer.MAX_VALUE, problem.getColumnNumber() );
+
+ // this case is not specified, might also return -1
+ problem = new DefaultProblem( null, null, null, -1, Integer.MIN_VALUE, null );
+ assertEquals( Integer.MIN_VALUE, problem.getColumnNumber() );
+ }
+
+ @Test
+ public void testGetException()
+ {
+ DefaultProblem problem = new DefaultProblem( null, null, null, -1, -1, null );
+ assertEquals( null, problem.getException() );
+
+ Exception e = new Exception();
+ problem = new DefaultProblem( null, null, null, -1, -1, e );
+ assertSame( e, problem.getException() );
+ }
+
+ @Test
+ public void testGetSource()
+ {
+ DefaultProblem problem = new DefaultProblem( null, null, null, -1, -1, null );
+ assertEquals( "", problem.getSource() );
+
+ problem = new DefaultProblem( null, null, "", -1, -1, null );
+ assertEquals( "", problem.getSource() );
+
+ problem = new DefaultProblem( null, null, "SOURCE", -1, -1, null );
+ assertEquals( "SOURCE", problem.getSource() );
+ }
+
+ @Test
+ public void testGetLocation()
+ {
+ DefaultProblem problem = new DefaultProblem( null, null, null, -1, -1, null );
+ assertEquals( "", problem.getLocation() );
+
+ problem = new DefaultProblem( null, null, "SOURCE", -1, -1, null );
+ assertEquals( "SOURCE", problem.getLocation() );
+
+ problem = new DefaultProblem( null, null, null, 42, -1, null );
+ assertEquals( "line 42", problem.getLocation() );
+
+ problem = new DefaultProblem( null, null, null, -1, 127, null );
+ assertEquals( "column 127", problem.getLocation() );
+
+ problem = new DefaultProblem( null, null, "SOURCE", 42, 127, null );
+ assertEquals( "SOURCE, line 42, column 127", problem.getLocation() );
+ }
+
+ @Test
+ public void testGetMessage()
+ {
+ DefaultProblem problem = new DefaultProblem( "MESSAGE", null, null, -1, -1, null );
+ assertEquals( "MESSAGE", problem.getMessage() );
+
+ problem = new DefaultProblem( null, null, null, -1, -1, new Exception() );
+ assertEquals( "", problem.getMessage() );
+
+ problem = new DefaultProblem( null, null, null, -1, -1, new Exception( "EXCEPTION MESSAGE" ) );
+ assertEquals( "EXCEPTION MESSAGE", problem.getMessage() );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/FileSourceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/FileSourceTest.java
new file mode 100644
index 00000000..086adda8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/FileSourceTest.java
@@ -0,0 +1,93 @@
+package org.apache.maven.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.Scanner;
+
+import org.junit.Test;
+
+public class FileSourceTest
+{
+
+ @Test
+ public void testFileSource()
+ {
+ try
+ {
+ new FileSource( null );
+ fail( "Should fail, since you must specify a file" );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ assertEquals( "no file specified", e.getMessage() );
+ }
+ }
+
+ @Test
+ public void testGetInputStream()
+ throws Exception
+ {
+ File txtFile = new File( "target/test-classes/source.txt" );
+ FileSource source = new FileSource( txtFile );
+
+ Scanner scanner = null;
+ InputStream is = null;
+ try
+ {
+ is = source.getInputStream();
+
+ scanner = new Scanner( is );
+ assertEquals( "Hello World!", scanner.nextLine() );
+ }
+ finally
+ {
+ if ( scanner != null )
+ {
+ scanner.close();
+ }
+ if ( is != null )
+ {
+ is.close();
+ }
+ }
+ }
+
+ @Test
+ public void testGetLocation()
+ {
+ File txtFile = new File( "target/test-classes/source.txt" );
+ FileSource source = new FileSource( txtFile );
+ assertEquals( txtFile.getAbsolutePath(), source.getLocation() );
+ }
+
+ @Test
+ public void testGetFile()
+ {
+ File txtFile = new File( "target/test-classes/source.txt" );
+ FileSource source = new FileSource( txtFile );
+ assertEquals( txtFile.getAbsoluteFile(), source.getFile() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/ProblemCollectorFactoryTest.java b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/ProblemCollectorFactoryTest.java
new file mode 100644
index 00000000..44c7906c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/ProblemCollectorFactoryTest.java
@@ -0,0 +1,45 @@
+package org.apache.maven.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotSame;
+
+import java.util.Collections;
+
+import org.junit.Test;
+
+public class ProblemCollectorFactoryTest
+{
+
+ @Test
+ public void testNewInstance()
+ {
+ ProblemCollector collector1 = ProblemCollectorFactory.newInstance( null );
+
+ Problem problem = new DefaultProblem( "MESSAGE1", null, null, -1, -1, null );
+ ProblemCollector collector2 = ProblemCollectorFactory.newInstance( Collections.singletonList( problem ) );
+
+ assertNotSame( collector1, collector2 );
+ assertEquals( 0, collector1.getProblems().size() );
+ assertEquals( 1, collector2.getProblems().size() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/StringSourceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/StringSourceTest.java
new file mode 100644
index 00000000..013b8a4d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/StringSourceTest.java
@@ -0,0 +1,79 @@
+package org.apache.maven.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.InputStream;
+import java.util.Scanner;
+
+import org.junit.Test;
+
+public class StringSourceTest
+{
+ @Test
+ public void testGetInputStream()
+ throws Exception
+ {
+ StringSource source = new StringSource( "Hello World!" );
+
+ Scanner scanner = null;
+ InputStream is = null;
+ try
+ {
+ is = source.getInputStream();
+
+ scanner = new Scanner( is );
+ assertEquals( "Hello World!", scanner.nextLine() );
+ }
+ finally
+ {
+ if ( scanner != null )
+ {
+ scanner.close();
+ }
+ if ( is != null )
+ {
+ is.close();
+ }
+ }
+ }
+
+ @Test
+ public void testGetLocation()
+ {
+ StringSource source = new StringSource( "Hello World!" );
+ assertEquals( "(memory)", source.getLocation() );
+
+ source = new StringSource( "Hello World!", "LOCATION" );
+ assertEquals( "LOCATION", source.getLocation() );
+ }
+
+ @Test
+ public void testGetContent()
+ {
+ StringSource source = new StringSource( null );
+ assertEquals( "", source.getContent() );
+
+ source = new StringSource( "Hello World!", "LOCATION" );
+ assertEquals( "Hello World!", source.getContent() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/UrlSourceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/UrlSourceTest.java
new file mode 100644
index 00000000..5524c9b3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/UrlSourceTest.java
@@ -0,0 +1,87 @@
+package org.apache.maven.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Scanner;
+
+import org.junit.Test;
+
+public class UrlSourceTest
+{
+
+ @Test
+ public void testUrlSource()
+ {
+ try
+ {
+ new UrlSource( null );
+ fail( "Should fail, since you must specify a url" );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ assertEquals( "no url specified", e.getMessage() );
+ }
+ }
+
+ @Test
+ public void testGetInputStream()
+ throws Exception
+ {
+ URL txtFile = new File( "target/test-classes/source.txt" ).toURI().toURL();
+ UrlSource source = new UrlSource( txtFile );
+
+ Scanner scanner = null;
+ InputStream is = null;
+ try
+ {
+ is = source.getInputStream();
+
+ scanner = new Scanner( is );
+ assertEquals( "Hello World!", scanner.nextLine() );
+ }
+ finally
+ {
+ if ( scanner != null )
+ {
+ scanner.close();
+ }
+ if ( is != null )
+ {
+ is.close();
+ }
+ }
+ }
+
+ @Test
+ public void testGetLocation()
+ throws Exception
+ {
+ URL txtFile = new File( "target/test-classes/source.txt" ).toURI().toURL();
+ UrlSource source = new UrlSource( txtFile );
+ assertEquals( txtFile.toExternalForm(), source.getLocation() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/resources/source.txt b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/resources/source.txt
new file mode 100644
index 00000000..c57eff55
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/resources/source.txt
@@ -0,0 +1 @@
+Hello World! \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/pom.xml
new file mode 100644
index 00000000..1b4c6c1a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/pom.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language
+ governing permissions and limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.3.3</version>
+ </parent>
+
+ <artifactId>maven-compat</artifactId>
+
+ <name>Maven Compat</name>
+ <description>Maven2 classes maintained as compatibility layer.</description>
+
+ <scm><!-- remove when git scm url format can accept artifact-id at the end, as automatically inherited -->
+ <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
+ <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
+ <tag>maven-3.3.3</tag>
+ </scm>
+
+ <properties>
+ <checkstyle.failOnViolation>false</checkstyle.failOnViolation><!-- lazyness for code that will disappear in future... -->
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model-builder</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-settings</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interpolation</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>org.eclipse.sisu.plexus</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-connector-basic</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-transport-wagon</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-metadata</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <configuration>
+ <version>1.0.0</version>
+ <models>
+ <model>src/main/mdo/profiles.mdo</model>
+ <model>src/main/mdo/paramdoc.mdo</model>
+ </models>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactScopeEnum.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactScopeEnum.java
new file mode 100644
index 00000000..7051e3bf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactScopeEnum.java
@@ -0,0 +1,133 @@
+package org.apache.maven.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Type safe reincarnation of Artifact scope. Also supplies the <code>DEFAULT_SCOPE<code> as well
+ * as convenience method to deal with scope relationships.
+ *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
+
+public enum ArtifactScopeEnum
+{
+ compile( 1 ), test( 2 ), runtime( 3 ), provided( 4 ), system( 5 ), runtime_plus_system( 6 );
+
+ public static final ArtifactScopeEnum DEFAULT_SCOPE = compile;
+
+ private int id;
+
+ // Constructor
+ ArtifactScopeEnum( int id )
+ {
+ this.id = id;
+ }
+
+ int getId()
+ {
+ return id;
+ }
+
+
+ /**
+ * Helper method to simplify null processing
+ *
+ * @return
+ */
+ public static final ArtifactScopeEnum checkScope( ArtifactScopeEnum scope )
+ {
+ return scope == null ? DEFAULT_SCOPE : scope;
+ }
+
+ /**
+ *
+ * @return unsafe String representation of this scope.
+ */
+ public String getScope()
+ {
+ if ( id == 1 )
+ {
+ return Artifact.SCOPE_COMPILE;
+ }
+ else if ( id == 2 )
+ {
+ return Artifact.SCOPE_TEST;
+
+ }
+ else if ( id == 3 )
+ {
+ return Artifact.SCOPE_RUNTIME;
+
+ }
+ else if ( id == 4 )
+ {
+ return Artifact.SCOPE_PROVIDED;
+ }
+ else if ( id == 5 )
+ {
+ return Artifact.SCOPE_SYSTEM;
+ }
+ else
+ {
+ return Artifact.SCOPE_RUNTIME_PLUS_SYSTEM;
+ }
+ }
+
+ private static final ArtifactScopeEnum [][][] COMPLIANCY_SETS = {
+ { { compile }, { compile, provided, system } }
+ , { { test }, { compile, test, provided, system } }
+ , { { runtime }, { compile, runtime, system } }
+ , { { provided }, { compile, test, provided } }
+ };
+
+ /**
+ * scope relationship function. Used by the graph conflict resolution policies
+ *
+ * @param scope
+ * @return true is supplied scope is an inclusive sub-scope of current one.
+ */
+ public boolean encloses( ArtifactScopeEnum scope )
+ {
+ final ArtifactScopeEnum s = checkScope( scope );
+
+ // system scope is historic only - and simple
+ if ( id == system.id )
+ {
+ return scope.id == system.id;
+ }
+
+ for ( ArtifactScopeEnum[][] set : COMPLIANCY_SETS )
+ {
+ if ( id == set[0][0].id )
+ {
+ for ( ArtifactScopeEnum ase : set[1] )
+ {
+ if ( s.id == ase.id )
+ {
+ return true;
+ }
+ }
+ break;
+ }
+ }
+ return false;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactStatus.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactStatus.java
new file mode 100644
index 00000000..3bd1e341
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactStatus.java
@@ -0,0 +1,124 @@
+package org.apache.maven.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Type safe enumeration for the artifact status field.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public final class ArtifactStatus
+ implements Comparable<ArtifactStatus>
+{
+ /**
+ * No trust - no information about status.
+ */
+ public static final ArtifactStatus NONE = new ArtifactStatus( "none", 0 );
+
+ /**
+ * No trust - information was generated with defaults.
+ */
+ public static final ArtifactStatus GENERATED = new ArtifactStatus( "generated", 1 );
+
+ /**
+ * Low trust - was converted from the Maven 1.x repository.
+ */
+ public static final ArtifactStatus CONVERTED = new ArtifactStatus( "converted", 2 );
+
+ /**
+ * Moderate trust - it was deployed directly from a partner.
+ */
+ public static final ArtifactStatus PARTNER = new ArtifactStatus( "partner", 3 );
+
+ /**
+ * Moderate trust - it was deployed directly by a user.
+ */
+ public static final ArtifactStatus DEPLOYED = new ArtifactStatus( "deployed", 4 );
+
+ /**
+ * Trusted, as it has had its data verified by hand.
+ */
+ public static final ArtifactStatus VERIFIED = new ArtifactStatus( "verified", 5 );
+
+ private final int rank;
+
+ private final String key;
+
+ private static Map<String, ArtifactStatus> map;
+
+ private ArtifactStatus( String key, int rank )
+ {
+ this.rank = rank;
+ this.key = key;
+
+ if ( map == null )
+ {
+ map = new HashMap<String, ArtifactStatus>();
+ }
+ map.put( key, this );
+ }
+
+ public static ArtifactStatus valueOf( String status )
+ {
+ ArtifactStatus retVal = null;
+
+ if ( status != null )
+ {
+ retVal = map.get( status );
+ }
+
+ return retVal != null ? retVal : NONE;
+ }
+
+ public boolean equals( Object o )
+ {
+ if ( this == o )
+ {
+ return true;
+ }
+ if ( o == null || getClass() != o.getClass() )
+ {
+ return false;
+ }
+
+ final ArtifactStatus that = (ArtifactStatus) o;
+
+ return rank == that.rank;
+
+ }
+
+ public int hashCode()
+ {
+ return rank;
+ }
+
+ public String toString()
+ {
+ return key;
+ }
+
+ public int compareTo( ArtifactStatus s )
+ {
+ return rank - s.rank;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/UnknownRepositoryLayoutException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/UnknownRepositoryLayoutException.java
new file mode 100644
index 00000000..5abe1105
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/UnknownRepositoryLayoutException.java
@@ -0,0 +1,54 @@
+package org.apache.maven.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+
+/**
+ * Exception which is meant to occur when a layout specified for a particular
+ * repository doesn't have a corresponding {@link ArtifactRepositoryLayout}
+ * component in the current container.
+ *
+ * @author jdcasey
+ */
+public class UnknownRepositoryLayoutException
+ extends InvalidRepositoryException
+{
+
+ private final String layoutId;
+
+ public UnknownRepositoryLayoutException( String repositoryId, String layoutId )
+ {
+ super( "Cannot find ArtifactRepositoryLayout instance for: " + layoutId, repositoryId );
+ this.layoutId = layoutId;
+ }
+
+ public UnknownRepositoryLayoutException( String repositoryId, String layoutId, ComponentLookupException e )
+ {
+ super( "Cannot find ArtifactRepositoryLayout instance for: " + layoutId, repositoryId, e );
+ this.layoutId = layoutId;
+ }
+
+ public String getLayoutId()
+ {
+ return layoutId;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/deployer/ArtifactDeployer.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/deployer/ArtifactDeployer.java
new file mode 100644
index 00000000..072552cc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/deployer/ArtifactDeployer.java
@@ -0,0 +1,61 @@
+package org.apache.maven.artifact.deployer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+public interface ArtifactDeployer
+{
+ String ROLE = ArtifactDeployer.class.getName();
+
+ /**
+ * Deploy an artifact from a particular directory. The artifact handler is used to determine the
+ * filename of the source file.
+ *
+ * @param basedir the directory where the artifact is stored
+ * @param finalName the name of the artifact without extension
+ * @param artifact the artifact definition
+ * @param deploymentRepository the repository to deploy to
+ * @param localRepository the local repository to install into
+ * @throws ArtifactDeploymentException if an error occurred deploying the artifact
+ * @deprecated to be removed before 2.0 after the install/deploy plugins use the alternate
+ * method
+ */
+ @Deprecated
+ void deploy( String basedir, String finalName, Artifact artifact, ArtifactRepository deploymentRepository,
+ ArtifactRepository localRepository )
+ throws ArtifactDeploymentException;
+
+ /**
+ * Deploy an artifact from a particular file.
+ *
+ * @param source the file to deploy
+ * @param artifact the artifact definition
+ * @param deploymentRepository the repository to deploy to
+ * @param localRepository the local repository to install into
+ * @throws ArtifactDeploymentException if an error occurred deploying the artifact
+ */
+ void deploy( File source, Artifact artifact, ArtifactRepository deploymentRepository,
+ ArtifactRepository localRepository )
+ throws ArtifactDeploymentException;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/deployer/ArtifactDeploymentException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/deployer/ArtifactDeploymentException.java
new file mode 100644
index 00000000..6e44ed3c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/deployer/ArtifactDeploymentException.java
@@ -0,0 +1,43 @@
+package org.apache.maven.artifact.deployer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author Jason van Zyl
+ */
+public class ArtifactDeploymentException
+ extends Exception
+{
+ public ArtifactDeploymentException( String message )
+ {
+ super( message );
+ }
+
+ public ArtifactDeploymentException( Throwable cause )
+ {
+ super( cause );
+ }
+
+ public ArtifactDeploymentException( String message,
+ Throwable cause )
+ {
+ super( message, cause );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java
new file mode 100644
index 00000000..abbab821
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java
@@ -0,0 +1,161 @@
+package org.apache.maven.artifact.deployer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.DefaultArtifactRepository;
+import org.apache.maven.artifact.repository.LegacyLocalRepositoryManager;
+import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.MetadataBridge;
+import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.project.artifact.ProjectArtifactMetadata;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.RequestTrace;
+import org.eclipse.aether.deployment.DeployRequest;
+import org.eclipse.aether.deployment.DeployResult;
+import org.eclipse.aether.deployment.DeploymentException;
+import org.eclipse.aether.metadata.MergeableMetadata;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.util.artifact.SubArtifact;
+
+@Component( role = ArtifactDeployer.class, instantiationStrategy = "per-lookup" )
+public class DefaultArtifactDeployer
+ extends AbstractLogEnabled
+ implements ArtifactDeployer
+{
+
+ @Requirement
+ private RepositorySystem repoSystem;
+
+ @Requirement
+ private LegacySupport legacySupport;
+
+ private Map<Object, MergeableMetadata> relatedMetadata = new ConcurrentHashMap<Object, MergeableMetadata>();
+
+ /**
+ * @deprecated we want to use the artifact method only, and ensure artifact.file is set
+ * correctly.
+ */
+ @Deprecated
+ public void deploy( String basedir, String finalName, Artifact artifact, ArtifactRepository deploymentRepository,
+ ArtifactRepository localRepository )
+ throws ArtifactDeploymentException
+ {
+ String extension = artifact.getArtifactHandler().getExtension();
+ File source = new File( basedir, finalName + "." + extension );
+ deploy( source, artifact, deploymentRepository, localRepository );
+ }
+
+ public void deploy( File source, Artifact artifact, ArtifactRepository deploymentRepository,
+ ArtifactRepository localRepository )
+ throws ArtifactDeploymentException
+ {
+ RepositorySystemSession session =
+ LegacyLocalRepositoryManager.overlay( localRepository, legacySupport.getRepositorySession(), repoSystem );
+
+ DeployRequest request = new DeployRequest();
+
+ request.setTrace( RequestTrace.newChild( null, legacySupport.getSession().getCurrentProject() ) );
+
+ org.eclipse.aether.artifact.Artifact mainArtifact = RepositoryUtils.toArtifact( artifact );
+ mainArtifact = mainArtifact.setFile( source );
+ request.addArtifact( mainArtifact );
+
+ String versionKey = artifact.getGroupId() + ':' + artifact.getArtifactId();
+ String snapshotKey = null;
+ if ( artifact.isSnapshot() )
+ {
+ snapshotKey = versionKey + ':' + artifact.getBaseVersion();
+ request.addMetadata( relatedMetadata.get( snapshotKey ) );
+ }
+ request.addMetadata( relatedMetadata.get( versionKey ) );
+
+ for ( ArtifactMetadata metadata : artifact.getMetadataList() )
+ {
+ if ( metadata instanceof ProjectArtifactMetadata )
+ {
+ org.eclipse.aether.artifact.Artifact pomArtifact = new SubArtifact( mainArtifact, "", "pom" );
+ pomArtifact = pomArtifact.setFile( ( (ProjectArtifactMetadata) metadata ).getFile() );
+ request.addArtifact( pomArtifact );
+ }
+ else if ( metadata instanceof SnapshotArtifactRepositoryMetadata
+ || metadata instanceof ArtifactRepositoryMetadata )
+ {
+ // eaten, handled by repo system
+ }
+ else
+ {
+ request.addMetadata( new MetadataBridge( metadata ) );
+ }
+ }
+
+ RemoteRepository remoteRepo = RepositoryUtils.toRepo( deploymentRepository );
+ /*
+ * NOTE: This provides backward-compat with maven-deploy-plugin:2.4 which bypasses the repository factory when
+ * using an alternative deployment location.
+ */
+ if ( deploymentRepository instanceof DefaultArtifactRepository
+ && deploymentRepository.getAuthentication() == null )
+ {
+ RemoteRepository.Builder builder = new RemoteRepository.Builder( remoteRepo );
+ builder.setAuthentication( session.getAuthenticationSelector().getAuthentication( remoteRepo ) );
+ builder.setProxy( session.getProxySelector().getProxy( remoteRepo ) );
+ remoteRepo = builder.build();
+ }
+ request.setRepository( remoteRepo );
+
+ DeployResult result;
+ try
+ {
+ result = repoSystem.deploy( session, request );
+ }
+ catch ( DeploymentException e )
+ {
+ throw new ArtifactDeploymentException( e.getMessage(), e );
+ }
+
+ for ( Object metadata : result.getMetadata() )
+ {
+ if ( metadata.getClass().getName().endsWith( ".internal.VersionsMetadata" ) )
+ {
+ relatedMetadata.put( versionKey, (MergeableMetadata) metadata );
+ }
+ if ( snapshotKey != null && metadata.getClass().getName().endsWith( ".internal.RemoteSnapshotMetadata" ) )
+ {
+ relatedMetadata.put( snapshotKey, (MergeableMetadata) metadata );
+ }
+ }
+
+ artifact.setResolvedVersion( result.getArtifacts().iterator().next().getVersion() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/installer/ArtifactInstallationException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/installer/ArtifactInstallationException.java
new file mode 100644
index 00000000..9f1e45b9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/installer/ArtifactInstallationException.java
@@ -0,0 +1,43 @@
+package org.apache.maven.artifact.installer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ */
+public class ArtifactInstallationException
+ extends Exception
+{
+ public ArtifactInstallationException( String message )
+ {
+ super( message );
+ }
+
+ public ArtifactInstallationException( Throwable cause )
+ {
+ super( cause );
+ }
+
+ public ArtifactInstallationException( String message,
+ Throwable cause )
+ {
+ super( message, cause );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/installer/ArtifactInstaller.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/installer/ArtifactInstaller.java
new file mode 100644
index 00000000..376eba20
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/installer/ArtifactInstaller.java
@@ -0,0 +1,60 @@
+package org.apache.maven.artifact.installer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/**
+ * @author <a href="michal@codehaus.org">Michal Maczka</a>
+ */
+public interface ArtifactInstaller
+{
+ String ROLE = ArtifactInstaller.class.getName();
+
+ /**
+ * Install an artifact from a particular directory. The artifact handler is used to determine
+ * the filename of the source file.
+ *
+ * @param basedir the directory where the artifact is stored
+ * @param finalName the name of the artifact sans extension
+ * @param artifact the artifact definition
+ * @param localRepository the local repository to install into
+ * @throws ArtifactInstallationException if an error occurred installing the artifact
+ * @deprecated to be removed before 2.0 after the instlal/deploy plugins use the alternate
+ * method
+ */
+ @Deprecated
+ void install( String basedir, String finalName, Artifact artifact, ArtifactRepository localRepository )
+ throws ArtifactInstallationException;
+
+ /**
+ * Install an artifact from a particular file.
+ *
+ * @param source the file to install
+ * @param artifact the artifact definition
+ * @param localRepository the local repository to install into
+ * @throws ArtifactInstallationException if an error occurred installing the artifact
+ */
+ void install( File source, Artifact artifact, ArtifactRepository localRepository )
+ throws ArtifactInstallationException;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java
new file mode 100644
index 00000000..a2529757
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java
@@ -0,0 +1,135 @@
+package org.apache.maven.artifact.installer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.LegacyLocalRepositoryManager;
+import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.MetadataBridge;
+import org.apache.maven.artifact.repository.metadata.Snapshot;
+import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.Versioning;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.project.artifact.ProjectArtifactMetadata;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.RequestTrace;
+import org.eclipse.aether.installation.InstallRequest;
+import org.eclipse.aether.installation.InstallationException;
+import org.eclipse.aether.util.artifact.SubArtifact;
+
+/**
+ * @author Jason van Zyl
+ */
+@Component( role = ArtifactInstaller.class )
+public class DefaultArtifactInstaller
+ extends AbstractLogEnabled
+ implements ArtifactInstaller
+{
+
+ @Requirement
+ private RepositorySystem repoSystem;
+
+ @Requirement
+ private LegacySupport legacySupport;
+
+ /** @deprecated we want to use the artifact method only, and ensure artifact.file is set correctly. */
+ @Deprecated
+ public void install( String basedir, String finalName, Artifact artifact, ArtifactRepository localRepository )
+ throws ArtifactInstallationException
+ {
+ String extension = artifact.getArtifactHandler().getExtension();
+ File source = new File( basedir, finalName + "." + extension );
+
+ install( source, artifact, localRepository );
+ }
+
+ public void install( File source, Artifact artifact, ArtifactRepository localRepository )
+ throws ArtifactInstallationException
+ {
+ RepositorySystemSession session =
+ LegacyLocalRepositoryManager.overlay( localRepository, legacySupport.getRepositorySession(), repoSystem );
+
+ InstallRequest request = new InstallRequest();
+
+ request.setTrace( RequestTrace.newChild( null, legacySupport.getSession().getCurrentProject() ) );
+
+ org.eclipse.aether.artifact.Artifact mainArtifact = RepositoryUtils.toArtifact( artifact );
+ mainArtifact = mainArtifact.setFile( source );
+ request.addArtifact( mainArtifact );
+
+ for ( ArtifactMetadata metadata : artifact.getMetadataList() )
+ {
+ if ( metadata instanceof ProjectArtifactMetadata )
+ {
+ org.eclipse.aether.artifact.Artifact pomArtifact = new SubArtifact( mainArtifact, "", "pom" );
+ pomArtifact = pomArtifact.setFile( ( (ProjectArtifactMetadata) metadata ).getFile() );
+ request.addArtifact( pomArtifact );
+ }
+ else if ( metadata instanceof SnapshotArtifactRepositoryMetadata
+ || metadata instanceof ArtifactRepositoryMetadata )
+ {
+ // eaten, handled by repo system
+ }
+ else
+ {
+ request.addMetadata( new MetadataBridge( metadata ) );
+ }
+ }
+
+ try
+ {
+ repoSystem.install( session, request );
+ }
+ catch ( InstallationException e )
+ {
+ throw new ArtifactInstallationException( e.getMessage(), e );
+ }
+
+ /*
+ * NOTE: Not used by Maven core, only here to provide backward-compat with plugins like the Install Plugin.
+ */
+
+ if ( artifact.isSnapshot() )
+ {
+ Snapshot snapshot = new Snapshot();
+ snapshot.setLocalCopy( true );
+ artifact.addMetadata( new SnapshotArtifactRepositoryMetadata( artifact, snapshot ) );
+ }
+
+ Versioning versioning = new Versioning();
+ versioning.updateTimestamp();
+ versioning.addVersion( artifact.getBaseVersion() );
+ if ( artifact.isRelease() )
+ {
+ versioning.setRelease( artifact.getBaseVersion() );
+ }
+ artifact.addMetadata( new ArtifactRepositoryMetadata( artifact, versioning ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
new file mode 100644
index 00000000..29876e24
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
@@ -0,0 +1,182 @@
+package org.apache.maven.artifact.manager;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.repository.MirrorSelector;
+import org.apache.maven.settings.Mirror;
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.crypto.DefaultSettingsDecryptionRequest;
+import org.apache.maven.settings.crypto.SettingsDecrypter;
+import org.apache.maven.settings.crypto.SettingsDecryptionResult;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.authentication.AuthenticationInfo;
+import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+
+@Component( role = WagonManager.class )
+public class DefaultWagonManager
+ extends org.apache.maven.repository.legacy.DefaultWagonManager
+ implements WagonManager
+{
+
+ // NOTE: This must use a different field name than in the super class or IoC has no chance to inject the loggers
+ @Requirement
+ private Logger log;
+
+ @Requirement
+ private LegacySupport legacySupport;
+
+ @Requirement
+ private SettingsDecrypter settingsDecrypter;
+
+ @Requirement
+ private MirrorSelector mirrorSelector;
+
+ @Requirement
+ private ArtifactRepositoryFactory artifactRepositoryFactory;
+
+ public AuthenticationInfo getAuthenticationInfo( String id )
+ {
+ MavenSession session = legacySupport.getSession();
+
+ if ( session != null && id != null )
+ {
+ MavenExecutionRequest request = session.getRequest();
+
+ if ( request != null )
+ {
+ List<Server> servers = request.getServers();
+
+ if ( servers != null )
+ {
+ for ( Server server : servers )
+ {
+ if ( id.equalsIgnoreCase( server.getId() ) )
+ {
+ SettingsDecryptionResult result =
+ settingsDecrypter.decrypt( new DefaultSettingsDecryptionRequest( server ) );
+ server = result.getServer();
+
+ AuthenticationInfo authInfo = new AuthenticationInfo();
+ authInfo.setUserName( server.getUsername() );
+ authInfo.setPassword( server.getPassword() );
+ authInfo.setPrivateKey( server.getPrivateKey() );
+ authInfo.setPassphrase( server.getPassphrase() );
+
+ return authInfo;
+ }
+ }
+ }
+ }
+ }
+
+ // empty one to prevent NPE
+ return new AuthenticationInfo();
+ }
+
+ public ProxyInfo getProxy( String protocol )
+ {
+ MavenSession session = legacySupport.getSession();
+
+ if ( session != null && protocol != null )
+ {
+ MavenExecutionRequest request = session.getRequest();
+
+ if ( request != null )
+ {
+ List<Proxy> proxies = request.getProxies();
+
+ if ( proxies != null )
+ {
+ for ( Proxy proxy : proxies )
+ {
+ if ( proxy.isActive() && protocol.equalsIgnoreCase( proxy.getProtocol() ) )
+ {
+ SettingsDecryptionResult result =
+ settingsDecrypter.decrypt( new DefaultSettingsDecryptionRequest( proxy ) );
+ proxy = result.getProxy();
+
+ ProxyInfo proxyInfo = new ProxyInfo();
+ proxyInfo.setHost( proxy.getHost() );
+ proxyInfo.setType( proxy.getProtocol() );
+ proxyInfo.setPort( proxy.getPort() );
+ proxyInfo.setNonProxyHosts( proxy.getNonProxyHosts() );
+ proxyInfo.setUserName( proxy.getUsername() );
+ proxyInfo.setPassword( proxy.getPassword() );
+
+ return proxyInfo;
+ }
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+
+ public void getArtifact( Artifact artifact, ArtifactRepository repository )
+ throws TransferFailedException, ResourceDoesNotExistException
+ {
+ getArtifact( artifact, repository, null, false );
+ }
+
+ public void getArtifact( Artifact artifact, List<ArtifactRepository> remoteRepositories )
+ throws TransferFailedException, ResourceDoesNotExistException
+ {
+ getArtifact( artifact, remoteRepositories, null, false );
+ }
+
+ @Deprecated
+ public ArtifactRepository getMirrorRepository( ArtifactRepository repository )
+ {
+
+ Mirror mirror = mirrorSelector.getMirror( repository, legacySupport.getSession().getSettings().getMirrors() );
+
+ if ( mirror != null )
+ {
+ String id = mirror.getId();
+ if ( id == null )
+ {
+ // TODO: this should be illegal in settings.xml
+ id = repository.getId();
+ }
+
+ log.debug( "Using mirror: " + mirror.getUrl() + " (id: " + id + ")" );
+
+ repository = artifactRepositoryFactory.createArtifactRepository( id, mirror.getUrl(),
+ repository.getLayout(), repository.getSnapshots(),
+ repository.getReleases() );
+ }
+ return repository;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/manager/WagonConfigurationException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/manager/WagonConfigurationException.java
new file mode 100644
index 00000000..8065116f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/manager/WagonConfigurationException.java
@@ -0,0 +1,38 @@
+package org.apache.maven.artifact.manager;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author Olivier Lamy
+ */
+@Deprecated
+public class WagonConfigurationException
+ extends org.apache.maven.repository.legacy.WagonConfigurationException
+{
+ public WagonConfigurationException( String repositoryId, String message, Throwable cause )
+ {
+ super( repositoryId, message, cause );
+ }
+
+ public WagonConfigurationException( String repositoryId, String message )
+ {
+ super( repositoryId, message );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/manager/WagonManager.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/manager/WagonManager.java
new file mode 100644
index 00000000..fb7ca8b6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/manager/WagonManager.java
@@ -0,0 +1,56 @@
+package org.apache.maven.artifact.manager;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.authentication.AuthenticationInfo;
+import org.apache.maven.wagon.proxy.ProxyInfo;
+
+/**
+ * Manages <a href="http://maven.apache.org/wagon">Wagon</a> related operations in Maven.
+ *
+ * @author <a href="michal.maczka@dimatics.com">Michal Maczka </a>
+ */
+@Deprecated
+public interface WagonManager
+ extends org.apache.maven.repository.legacy.WagonManager
+{
+ /**
+ * this method is only here for backward compat (project-info-reports:dependencies)
+ * the default implementation will return an empty AuthenticationInfo
+ */
+ AuthenticationInfo getAuthenticationInfo( String id );
+
+ ProxyInfo getProxy( String protocol );
+
+ void getArtifact( Artifact artifact, ArtifactRepository repository )
+ throws TransferFailedException, ResourceDoesNotExistException;
+
+ void getArtifact( Artifact artifact, List<ArtifactRepository> remoteRepositories )
+ throws TransferFailedException, ResourceDoesNotExistException;
+
+ ArtifactRepository getMirrorRepository( ArtifactRepository repository );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryFactory.java
new file mode 100644
index 00000000..ac18b3ad
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryFactory.java
@@ -0,0 +1,55 @@
+package org.apache.maven.artifact.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.UnknownRepositoryLayoutException;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+
+/** @author jdcasey */
+public interface ArtifactRepositoryFactory
+{
+ String ROLE = ArtifactRepositoryFactory.class.getName();
+
+ String DEFAULT_LAYOUT_ID = "default";
+
+ String LOCAL_REPOSITORY_ID = "local";
+
+ @Deprecated
+ ArtifactRepositoryLayout getLayout( String layoutId )
+ throws UnknownRepositoryLayoutException;
+
+ @Deprecated
+ ArtifactRepository createDeploymentArtifactRepository( String id, String url, String layoutId, boolean uniqueVersion )
+ throws UnknownRepositoryLayoutException;
+
+ ArtifactRepository createDeploymentArtifactRepository( String id, String url, ArtifactRepositoryLayout layout,
+ boolean uniqueVersion );
+
+ ArtifactRepository createArtifactRepository( String id, String url, String layoutId,
+ ArtifactRepositoryPolicy snapshots, ArtifactRepositoryPolicy releases )
+ throws UnknownRepositoryLayoutException;
+
+ ArtifactRepository createArtifactRepository( String id, String url, ArtifactRepositoryLayout repositoryLayout,
+ ArtifactRepositoryPolicy snapshots, ArtifactRepositoryPolicy releases );
+
+ void setGlobalUpdatePolicy( String snapshotPolicy );
+
+ void setGlobalChecksumPolicy( String checksumPolicy );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java
new file mode 100644
index 00000000..e0a55879
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java
@@ -0,0 +1,267 @@
+package org.apache.maven.artifact.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.repository.Proxy;
+import org.apache.maven.wagon.repository.Repository;
+
+/**
+ * This class is an abstraction of the location from/to resources can be
+ * transfered.
+ *
+ * @author <a href="michal.maczka@dimatics.com">Michal Maczka </a>
+ */
+@Deprecated
+public class DefaultArtifactRepository
+ extends Repository
+ implements ArtifactRepository
+{
+ private ArtifactRepositoryLayout layout;
+
+ private ArtifactRepositoryPolicy snapshots;
+
+ private ArtifactRepositoryPolicy releases;
+
+ private boolean blacklisted;
+
+ private Authentication authentication;
+
+ private Proxy proxy;
+
+ private List<ArtifactRepository> mirroredRepositories = Collections.emptyList();
+
+ /**
+ * Create a local repository or a test repository.
+ *
+ * @param id the unique identifier of the repository
+ * @param url the URL of the repository
+ * @param layout the layout of the repository
+ */
+ public DefaultArtifactRepository( String id, String url, ArtifactRepositoryLayout layout )
+ {
+ this( id, url, layout, null, null );
+ }
+
+ /**
+ * Create a remote deployment repository.
+ *
+ * @param id the unique identifier of the repository
+ * @param url the URL of the repository
+ * @param layout the layout of the repository
+ * @param uniqueVersion whether to assign each snapshot a unique version
+ */
+ public DefaultArtifactRepository( String id, String url, ArtifactRepositoryLayout layout, boolean uniqueVersion )
+ {
+ super( id, url );
+ this.layout = layout;
+ }
+
+ /**
+ * Create a remote download repository.
+ *
+ * @param id the unique identifier of the repository
+ * @param url the URL of the repository
+ * @param layout the layout of the repository
+ * @param snapshots the policies to use for snapshots
+ * @param releases the policies to use for releases
+ */
+ public DefaultArtifactRepository( String id, String url, ArtifactRepositoryLayout layout,
+ ArtifactRepositoryPolicy snapshots, ArtifactRepositoryPolicy releases )
+ {
+ super( id, url );
+
+ this.layout = layout;
+
+ if ( snapshots == null )
+ {
+ snapshots = new ArtifactRepositoryPolicy( true, ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS,
+ ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE );
+ }
+
+ this.snapshots = snapshots;
+
+ if ( releases == null )
+ {
+ releases = new ArtifactRepositoryPolicy( true, ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS,
+ ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE );
+ }
+
+ this.releases = releases;
+ }
+
+ public String pathOf( Artifact artifact )
+ {
+ return layout.pathOf( artifact );
+ }
+
+ public String pathOfRemoteRepositoryMetadata( ArtifactMetadata artifactMetadata )
+ {
+ return layout.pathOfRemoteRepositoryMetadata( artifactMetadata );
+ }
+
+ public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+ {
+ return layout.pathOfLocalRepositoryMetadata( metadata, repository );
+ }
+
+ public void setLayout( ArtifactRepositoryLayout layout )
+ {
+ this.layout = layout;
+ }
+
+ public ArtifactRepositoryLayout getLayout()
+ {
+ return layout;
+ }
+
+ public void setSnapshotUpdatePolicy( ArtifactRepositoryPolicy snapshots )
+ {
+ this.snapshots = snapshots;
+ }
+
+ public ArtifactRepositoryPolicy getSnapshots()
+ {
+ return snapshots;
+ }
+
+ public void setReleaseUpdatePolicy( ArtifactRepositoryPolicy releases )
+ {
+ this.releases = releases;
+ }
+
+ public ArtifactRepositoryPolicy getReleases()
+ {
+ return releases;
+ }
+
+ public String getKey()
+ {
+ return getId();
+ }
+
+ public boolean isBlacklisted()
+ {
+ return blacklisted;
+ }
+
+ public void setBlacklisted( boolean blacklisted )
+ {
+ this.blacklisted = blacklisted;
+ }
+
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( " id: " ).append( getId() ).append( "\n" );
+ sb.append( " url: " ).append( getUrl() ).append( "\n" );
+ sb.append( " layout: " ).append( layout != null ? layout : "none" ).append( "\n" );
+
+ if ( snapshots != null )
+ {
+ sb.append( "snapshots: [enabled => " ).append( snapshots.isEnabled() );
+ sb.append( ", update => " ).append( snapshots.getUpdatePolicy() ).append( "]\n" );
+ }
+
+ if ( releases != null )
+ {
+ sb.append( " releases: [enabled => " ).append( releases.isEnabled() );
+ sb.append( ", update => " ).append( releases.getUpdatePolicy() ).append( "]\n" );
+ }
+
+ return sb.toString();
+ }
+
+ public Artifact find( Artifact artifact )
+ {
+ File artifactFile = new File( getBasedir(), pathOf( artifact ) );
+
+ // We need to set the file here or the resolver will fail with an NPE, not fully equipped to deal
+ // with multiple local repository implementations yet.
+ artifact.setFile( artifactFile );
+
+ if ( artifactFile.exists() )
+ {
+ artifact.setResolved( true );
+ }
+
+ return artifact;
+ }
+
+ public List<String> findVersions( Artifact artifact )
+ {
+ return Collections.emptyList();
+ }
+
+ public boolean isProjectAware()
+ {
+ return false;
+ }
+
+ public Authentication getAuthentication()
+ {
+ return authentication;
+ }
+
+ public void setAuthentication( Authentication authentication )
+ {
+ this.authentication = authentication;
+ }
+
+ public Proxy getProxy()
+ {
+ return proxy;
+ }
+
+ public void setProxy( Proxy proxy )
+ {
+ this.proxy = proxy;
+ }
+
+ public boolean isUniqueVersion()
+ {
+ return true;
+ }
+
+ public List<ArtifactRepository> getMirroredRepositories()
+ {
+ return mirroredRepositories;
+ }
+
+ public void setMirroredRepositories( List<ArtifactRepository> mirroredRepositories )
+ {
+ if ( mirroredRepositories != null )
+ {
+ this.mirroredRepositories = mirroredRepositories;
+ }
+ else
+ {
+ this.mirroredRepositories = Collections.emptyList();
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java
new file mode 100644
index 00000000..658dbdac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java
@@ -0,0 +1,124 @@
+package org.apache.maven.artifact.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.maven.artifact.UnknownRepositoryLayoutException;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.repository.RepositorySystem;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.eclipse.aether.RepositorySystemSession;
+
+/**
+ * @author jdcasey
+ */
+@Component( role = ArtifactRepositoryFactory.class )
+public class DefaultArtifactRepositoryFactory
+ implements ArtifactRepositoryFactory
+{
+
+ @Requirement
+ private org.apache.maven.repository.legacy.repository.ArtifactRepositoryFactory factory;
+
+ @Requirement
+ private LegacySupport legacySupport;
+
+ @Requirement
+ private RepositorySystem repositorySystem;
+
+ public ArtifactRepositoryLayout getLayout( String layoutId )
+ throws UnknownRepositoryLayoutException
+ {
+ return factory.getLayout( layoutId );
+ }
+
+ public ArtifactRepository createDeploymentArtifactRepository( String id, String url, String layoutId,
+ boolean uniqueVersion )
+ throws UnknownRepositoryLayoutException
+ {
+ return injectSession( factory.createDeploymentArtifactRepository( id, url, layoutId, uniqueVersion ), false );
+ }
+
+ public ArtifactRepository createDeploymentArtifactRepository( String id, String url,
+ ArtifactRepositoryLayout repositoryLayout,
+ boolean uniqueVersion )
+ {
+ return injectSession( factory.createDeploymentArtifactRepository( id, url, repositoryLayout, uniqueVersion ),
+ false );
+ }
+
+ public ArtifactRepository createArtifactRepository( String id, String url, String layoutId,
+ ArtifactRepositoryPolicy snapshots,
+ ArtifactRepositoryPolicy releases )
+ throws UnknownRepositoryLayoutException
+ {
+ return injectSession( factory.createArtifactRepository( id, url, layoutId, snapshots, releases ), true );
+ }
+
+ public ArtifactRepository createArtifactRepository( String id, String url,
+ ArtifactRepositoryLayout repositoryLayout,
+ ArtifactRepositoryPolicy snapshots,
+ ArtifactRepositoryPolicy releases )
+ {
+ return injectSession( factory.createArtifactRepository( id, url, repositoryLayout, snapshots, releases ), true );
+ }
+
+ public void setGlobalUpdatePolicy( String updatePolicy )
+ {
+ factory.setGlobalUpdatePolicy( updatePolicy );
+ }
+
+ public void setGlobalChecksumPolicy( String checksumPolicy )
+ {
+ factory.setGlobalChecksumPolicy( checksumPolicy );
+ }
+
+ private ArtifactRepository injectSession( ArtifactRepository repository, boolean mirrors )
+ {
+ RepositorySystemSession session = legacySupport.getRepositorySession();
+
+ if ( session != null && repository != null && !isLocalRepository( repository ) )
+ {
+ List<ArtifactRepository> repositories = Arrays.asList( repository );
+
+ if ( mirrors )
+ {
+ repositorySystem.injectMirror( session, repositories );
+ }
+
+ repositorySystem.injectProxy( session, repositories );
+
+ repositorySystem.injectAuthentication( session, repositories );
+ }
+
+ return repository;
+ }
+
+ private boolean isLocalRepository( ArtifactRepository repository )
+ {
+ // unfortunately, the API doesn't allow to tell a remote repo and the local repo apart...
+ return "local".equals( repository.getId() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/layout/FlatRepositoryLayout.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/layout/FlatRepositoryLayout.java
new file mode 100644
index 00000000..8553a312
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/layout/FlatRepositoryLayout.java
@@ -0,0 +1,92 @@
+package org.apache.maven.artifact.repository.layout;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * The code in this class is taken from DefaultRepositorylayout, located at:
+ * http://svn.apache.org/viewvc/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java
+ *
+ */
+@Component( role = ArtifactRepositoryLayout.class, hint = "flat" )
+public class FlatRepositoryLayout
+ implements ArtifactRepositoryLayout
+{
+ private static final char ARTIFACT_SEPARATOR = '-';
+
+ private static final char GROUP_SEPARATOR = '.';
+
+ public String getId()
+ {
+ return "flat";
+ }
+
+ public String pathOf( Artifact artifact )
+ {
+ ArtifactHandler artifactHandler = artifact.getArtifactHandler();
+
+ StringBuilder path = new StringBuilder( 128 );
+
+ path.append( artifact.getArtifactId() ).append( ARTIFACT_SEPARATOR ).append( artifact.getVersion() );
+
+ if ( artifact.hasClassifier() )
+ {
+ path.append( ARTIFACT_SEPARATOR ).append( artifact.getClassifier() );
+ }
+
+ if ( artifactHandler.getExtension() != null && artifactHandler.getExtension().length() > 0 )
+ {
+ path.append( GROUP_SEPARATOR ).append( artifactHandler.getExtension() );
+ }
+
+ return path.toString();
+ }
+
+ public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+ {
+ return pathOfRepositoryMetadata( metadata.getLocalFilename( repository ) );
+ }
+
+ private String pathOfRepositoryMetadata( String filename )
+ {
+ StringBuilder path = new StringBuilder( 128 );
+
+ path.append( filename );
+
+ return path.toString();
+ }
+
+ public String pathOfRemoteRepositoryMetadata( ArtifactMetadata metadata )
+ {
+ return pathOfRepositoryMetadata( metadata.getRemoteFilename() );
+ }
+
+ @Override
+ public String toString()
+ {
+ return getId();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
new file mode 100644
index 00000000..e7937134
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
@@ -0,0 +1,558 @@
+package org.apache.maven.artifact.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
+import org.apache.maven.artifact.repository.RepositoryRequest;
+import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
+import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer;
+import org.apache.maven.repository.legacy.UpdateCheckManager;
+import org.apache.maven.repository.legacy.WagonManager;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.WriterFactory;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * @author Jason van Zyl
+ */
+@Component( role = RepositoryMetadataManager.class )
+public class DefaultRepositoryMetadataManager
+ extends AbstractLogEnabled
+ implements RepositoryMetadataManager
+{
+ @Requirement
+ private WagonManager wagonManager;
+
+ @Requirement
+ private UpdateCheckManager updateCheckManager;
+
+ public void resolve( RepositoryMetadata metadata, List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository )
+ throws RepositoryMetadataResolutionException
+ {
+ RepositoryRequest request = new DefaultRepositoryRequest();
+ request.setLocalRepository( localRepository );
+ request.setRemoteRepositories( remoteRepositories );
+ resolve( metadata, request );
+ }
+
+ public void resolve( RepositoryMetadata metadata, RepositoryRequest request )
+ throws RepositoryMetadataResolutionException
+ {
+ ArtifactRepository localRepo = request.getLocalRepository();
+ List<ArtifactRepository> remoteRepositories = request.getRemoteRepositories();
+
+ if ( !request.isOffline() )
+ {
+ Date localCopyLastModified = null;
+ if ( metadata.getBaseVersion() != null )
+ {
+ localCopyLastModified = getLocalCopyLastModified( localRepo, metadata );
+ }
+
+ for ( ArtifactRepository repository : remoteRepositories )
+ {
+ ArtifactRepositoryPolicy policy = metadata.getPolicy( repository );
+
+ File file =
+ new File( localRepo.getBasedir(), localRepo.pathOfLocalRepositoryMetadata( metadata, repository ) );
+ boolean update;
+
+ if ( !policy.isEnabled() )
+ {
+ update = false;
+
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug(
+ "Skipping update check for " + metadata.getKey() + " (" + file
+ + ") from disabled repository " + repository.getId() + " ("
+ + repository.getUrl() + ")" );
+ }
+ }
+ else if ( request.isForceUpdate() )
+ {
+ update = true;
+ }
+ else if ( localCopyLastModified != null && !policy.checkOutOfDate( localCopyLastModified ) )
+ {
+ update = false;
+
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug(
+ "Skipping update check for " + metadata.getKey() + " (" + file
+ + ") from repository " + repository.getId() + " (" + repository.getUrl()
+ + ") in favor of local copy" );
+ }
+ }
+ else
+ {
+ update = updateCheckManager.isUpdateRequired( metadata, repository, file );
+ }
+
+ if ( update )
+ {
+ getLogger().info( metadata.getKey() + ": checking for updates from " + repository.getId() );
+ try
+ {
+ wagonManager.getArtifactMetadata( metadata, repository, file, policy.getChecksumPolicy() );
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ getLogger().debug( metadata + " could not be found on repository: " + repository.getId() );
+
+ // delete the local copy so the old details aren't used.
+ if ( file.exists() )
+ {
+ if ( !file.delete() )
+ {
+ // sleep for 10ms just in case this is windows holding a file lock
+ try
+ {
+ Thread.sleep( 10 );
+ }
+ catch ( InterruptedException ie )
+ {
+ // ignore
+ }
+ file.delete(); // if this fails, forget about it
+ }
+ }
+ }
+ catch ( TransferFailedException e )
+ {
+ getLogger().warn( metadata + " could not be retrieved from repository: " + repository.getId()
+ + " due to an error: " + e.getMessage() );
+ getLogger().debug( "Exception", e );
+ }
+ finally
+ {
+ updateCheckManager.touch( metadata, repository, file );
+ }
+ }
+
+ // TODO: should this be inside the above check?
+ // touch file so that this is not checked again until interval has passed
+ if ( file.exists() )
+ {
+ file.setLastModified( System.currentTimeMillis() );
+ }
+ }
+ }
+
+ try
+ {
+ mergeMetadata( metadata, remoteRepositories, localRepo );
+ }
+ catch ( RepositoryMetadataStoreException e )
+ {
+ throw new RepositoryMetadataResolutionException( "Unable to store local copy of metadata: "
+ + e.getMessage(), e );
+ }
+ }
+
+ private Date getLocalCopyLastModified( ArtifactRepository localRepository, RepositoryMetadata metadata )
+ {
+ String metadataPath = localRepository.pathOfLocalRepositoryMetadata( metadata, localRepository );
+ File metadataFile = new File( localRepository.getBasedir(), metadataPath );
+ return metadataFile.isFile() ? new Date( metadataFile.lastModified() ) : null;
+ }
+
+ private void mergeMetadata( RepositoryMetadata metadata, List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository )
+ throws RepositoryMetadataStoreException
+ {
+ // TODO: currently this is first wins, but really we should take the latest by comparing either the
+ // snapshot timestamp, or some other timestamp later encoded into the metadata.
+ // TODO: this needs to be repeated here so the merging doesn't interfere with the written metadata
+ // - we'd be much better having a pristine input, and an ongoing metadata for merging instead
+
+ Map<ArtifactRepository, Metadata> previousMetadata = new HashMap<ArtifactRepository, Metadata>();
+ ArtifactRepository selected = null;
+ for ( ArtifactRepository repository : remoteRepositories )
+ {
+ ArtifactRepositoryPolicy policy = metadata.getPolicy( repository );
+
+ if ( policy.isEnabled() && loadMetadata( metadata, repository, localRepository, previousMetadata ) )
+ {
+ metadata.setRepository( repository );
+ selected = repository;
+ }
+ }
+ if ( loadMetadata( metadata, localRepository, localRepository, previousMetadata ) )
+ {
+ metadata.setRepository( null );
+ selected = localRepository;
+ }
+
+ updateSnapshotMetadata( metadata, previousMetadata, selected, localRepository );
+ }
+
+ private void updateSnapshotMetadata( RepositoryMetadata metadata,
+ Map<ArtifactRepository, Metadata> previousMetadata,
+ ArtifactRepository selected, ArtifactRepository localRepository )
+ throws RepositoryMetadataStoreException
+ {
+ // TODO: this could be a lot nicer... should really be in the snapshot transformation?
+ if ( metadata.isSnapshot() )
+ {
+ Metadata prevMetadata = metadata.getMetadata();
+
+ for ( ArtifactRepository repository : previousMetadata.keySet() )
+ {
+ Metadata m = previousMetadata.get( repository );
+ if ( repository.equals( selected ) )
+ {
+ if ( m.getVersioning() == null )
+ {
+ m.setVersioning( new Versioning() );
+ }
+
+ if ( m.getVersioning().getSnapshot() == null )
+ {
+ m.getVersioning().setSnapshot( new Snapshot() );
+ }
+ }
+ else
+ {
+ if ( ( m.getVersioning() != null ) && ( m.getVersioning().getSnapshot() != null )
+ && m.getVersioning().getSnapshot().isLocalCopy() )
+ {
+ m.getVersioning().getSnapshot().setLocalCopy( false );
+ metadata.setMetadata( m );
+ metadata.storeInLocalRepository( localRepository, repository );
+ }
+ }
+ }
+
+ metadata.setMetadata( prevMetadata );
+ }
+ }
+
+ private boolean loadMetadata( RepositoryMetadata repoMetadata, ArtifactRepository remoteRepository,
+ ArtifactRepository localRepository, Map<ArtifactRepository,
+ Metadata> previousMetadata )
+ {
+ boolean setRepository = false;
+
+ File metadataFile =
+ new File( localRepository.getBasedir(), localRepository.pathOfLocalRepositoryMetadata( repoMetadata,
+ remoteRepository ) );
+
+ if ( metadataFile.exists() )
+ {
+ Metadata metadata;
+
+ try
+ {
+ metadata = readMetadata( metadataFile );
+ }
+ catch ( RepositoryMetadataReadException e )
+ {
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().warn( e.getMessage(), e );
+ }
+ else
+ {
+ getLogger().warn( e.getMessage() );
+ }
+ return setRepository;
+ }
+
+ if ( repoMetadata.isSnapshot() && ( previousMetadata != null ) )
+ {
+ previousMetadata.put( remoteRepository, metadata );
+ }
+
+ if ( repoMetadata.getMetadata() != null )
+ {
+ setRepository = repoMetadata.getMetadata().merge( metadata );
+ }
+ else
+ {
+ repoMetadata.setMetadata( metadata );
+ setRepository = true;
+ }
+ }
+ return setRepository;
+ }
+
+ /** @todo share with DefaultPluginMappingManager. */
+ protected Metadata readMetadata( File mappingFile )
+ throws RepositoryMetadataReadException
+ {
+ Metadata result;
+
+ Reader reader = null;
+ try
+ {
+ reader = ReaderFactory.newXmlReader( mappingFile );
+
+ MetadataXpp3Reader mappingReader = new MetadataXpp3Reader();
+
+ result = mappingReader.read( reader, false );
+ }
+ catch ( FileNotFoundException e )
+ {
+ throw new RepositoryMetadataReadException( "Cannot read metadata from '" + mappingFile + "'", e );
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryMetadataReadException( "Cannot read metadata from '" + mappingFile + "': "
+ + e.getMessage(), e );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new RepositoryMetadataReadException( "Cannot read metadata from '" + mappingFile + "': "
+ + e.getMessage(), e );
+ }
+ finally
+ {
+ IOUtil.close( reader );
+ }
+
+ return result;
+ }
+
+ /**
+ * Ensures the last updated timestamp of the specified metadata does not refer to the future and fixes the local
+ * metadata if necessary to allow proper merging/updating of metadata during deployment.
+ */
+ private void fixTimestamp( File metadataFile, Metadata metadata, Metadata reference )
+ {
+ boolean changed = false;
+
+ if ( metadata != null && reference != null )
+ {
+ Versioning versioning = metadata.getVersioning();
+ Versioning versioningRef = reference.getVersioning();
+ if ( versioning != null && versioningRef != null )
+ {
+ String lastUpdated = versioning.getLastUpdated();
+ String now = versioningRef.getLastUpdated();
+ if ( lastUpdated != null && now != null && now.compareTo( lastUpdated ) < 0 )
+ {
+ getLogger().warn(
+ "The last updated timestamp in " + metadataFile + " refers to the future (now = "
+ + now + ", lastUpdated = " + lastUpdated
+ + "). Please verify that the clocks of all"
+ + " deploying machines are reasonably synchronized." );
+ versioning.setLastUpdated( now );
+ changed = true;
+ }
+ }
+ }
+
+ if ( changed )
+ {
+ getLogger().debug( "Repairing metadata in " + metadataFile );
+
+ Writer writer = null;
+ try
+ {
+ writer = WriterFactory.newXmlWriter( metadataFile );
+ new MetadataXpp3Writer().write( writer, metadata );
+ }
+ catch ( IOException e )
+ {
+ String msg = "Could not write fixed metadata to " + metadataFile + ": " + e.getMessage();
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().warn( msg, e );
+ }
+ else
+ {
+ getLogger().warn( msg );
+ }
+ }
+ finally
+ {
+ IOUtil.close( writer );
+ }
+ }
+ }
+
+ public void resolveAlways( RepositoryMetadata metadata, ArtifactRepository localRepository,
+ ArtifactRepository remoteRepository )
+ throws RepositoryMetadataResolutionException
+ {
+ File file;
+ try
+ {
+ file = getArtifactMetadataFromDeploymentRepository( metadata, localRepository, remoteRepository );
+ }
+ catch ( TransferFailedException e )
+ {
+ throw new RepositoryMetadataResolutionException( metadata + " could not be retrieved from repository: "
+ + remoteRepository.getId() + " due to an error: " + e.getMessage(), e );
+ }
+
+ try
+ {
+ if ( file.exists() )
+ {
+ Metadata prevMetadata = readMetadata( file );
+ metadata.setMetadata( prevMetadata );
+ }
+ }
+ catch ( RepositoryMetadataReadException e )
+ {
+ throw new RepositoryMetadataResolutionException( e.getMessage(), e );
+ }
+ }
+
+ private File getArtifactMetadataFromDeploymentRepository( ArtifactMetadata metadata,
+ ArtifactRepository localRepo,
+ ArtifactRepository remoteRepository )
+ throws TransferFailedException
+ {
+ File file =
+ new File( localRepo.getBasedir(), localRepo.pathOfLocalRepositoryMetadata( metadata, remoteRepository ) );
+
+ try
+ {
+ wagonManager.getArtifactMetadataFromDeploymentRepository( metadata, remoteRepository, file,
+ ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN );
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ getLogger().info( metadata + " could not be found on repository: " + remoteRepository.getId()
+ + ", so will be created" );
+
+ // delete the local copy so the old details aren't used.
+ if ( file.exists() )
+ {
+ if ( !file.delete() )
+ {
+ // sleep for 10ms just in case this is windows holding a file lock
+ try
+ {
+ Thread.sleep( 10 );
+ }
+ catch ( InterruptedException ie )
+ {
+ // ignore
+ }
+ file.delete(); // if this fails, forget about it
+ }
+ }
+ }
+ finally
+ {
+ if ( metadata instanceof RepositoryMetadata )
+ {
+ updateCheckManager.touch( (RepositoryMetadata) metadata, remoteRepository, file );
+ }
+ }
+ return file;
+ }
+
+ public void deploy( ArtifactMetadata metadata, ArtifactRepository localRepository,
+ ArtifactRepository deploymentRepository )
+ throws RepositoryMetadataDeploymentException
+ {
+ File file;
+ if ( metadata instanceof RepositoryMetadata )
+ {
+ getLogger().info( "Retrieving previous metadata from " + deploymentRepository.getId() );
+ try
+ {
+ file = getArtifactMetadataFromDeploymentRepository( metadata, localRepository, deploymentRepository );
+ }
+ catch ( TransferFailedException e )
+ {
+ throw new RepositoryMetadataDeploymentException( metadata + " could not be retrieved from repository: "
+ + deploymentRepository.getId() + " due to an error: " + e.getMessage(), e );
+ }
+
+ if ( file.isFile() )
+ {
+ try
+ {
+ fixTimestamp( file, readMetadata( file ), ( (RepositoryMetadata) metadata ).getMetadata() );
+ }
+ catch ( RepositoryMetadataReadException e )
+ {
+ // will be reported via storeInlocalRepository
+ }
+ }
+ }
+ else
+ {
+ // It's a POM - we don't need to retrieve it first
+ file =
+ new File( localRepository.getBasedir(),
+ localRepository.pathOfLocalRepositoryMetadata( metadata, deploymentRepository ) );
+ }
+
+ try
+ {
+ metadata.storeInLocalRepository( localRepository, deploymentRepository );
+ }
+ catch ( RepositoryMetadataStoreException e )
+ {
+ throw new RepositoryMetadataDeploymentException( "Error installing metadata: " + e.getMessage(), e );
+ }
+
+ try
+ {
+ wagonManager.putArtifactMetadata( file, metadata, deploymentRepository );
+ }
+ catch ( TransferFailedException e )
+ {
+ throw new RepositoryMetadataDeploymentException( "Error while deploying metadata: " + e.getMessage(), e );
+ }
+ }
+
+ public void install( ArtifactMetadata metadata, ArtifactRepository localRepository )
+ throws RepositoryMetadataInstallationException
+ {
+ try
+ {
+ metadata.storeInLocalRepository( localRepository, localRepository );
+ }
+ catch ( RepositoryMetadataStoreException e )
+ {
+ throw new RepositoryMetadataInstallationException( "Error installing metadata: " + e.getMessage(), e );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/GroupRepositoryMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/GroupRepositoryMetadata.java
new file mode 100644
index 00000000..490b47f3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/GroupRepositoryMetadata.java
@@ -0,0 +1,119 @@
+package org.apache.maven.artifact.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Metadata for the group directory of the repository.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class GroupRepositoryMetadata
+ extends AbstractRepositoryMetadata
+{
+ private final String groupId;
+
+ public GroupRepositoryMetadata( String groupId )
+ {
+ super( new Metadata() );
+ this.groupId = groupId;
+ }
+
+ public boolean storedInGroupDirectory()
+ {
+ return true;
+ }
+
+ public boolean storedInArtifactVersionDirectory()
+ {
+ return false;
+ }
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public String getArtifactId()
+ {
+ return null;
+ }
+
+ public String getBaseVersion()
+ {
+ return null;
+ }
+
+ public void addPluginMapping( String goalPrefix,
+ String artifactId )
+ {
+ addPluginMapping( goalPrefix, artifactId, artifactId );
+ }
+
+ public void addPluginMapping( String goalPrefix,
+ String artifactId,
+ String name )
+ {
+ List plugins = getMetadata().getPlugins();
+ boolean found = false;
+ for ( Iterator i = plugins.iterator(); i.hasNext() && !found; )
+ {
+ Plugin plugin = (Plugin) i.next();
+ if ( plugin.getPrefix().equals( goalPrefix ) )
+ {
+ found = true;
+ }
+ }
+ if ( !found )
+ {
+ Plugin plugin = new Plugin();
+ plugin.setPrefix( goalPrefix );
+ plugin.setArtifactId( artifactId );
+ plugin.setName( name );
+
+
+ getMetadata().addPlugin( plugin );
+ }
+ }
+
+ public Object getKey()
+ {
+ return groupId;
+ }
+
+ public boolean isSnapshot()
+ {
+ return false;
+ }
+
+ public ArtifactRepository getRepository()
+ {
+ return null;
+ }
+
+ public void setRepository( ArtifactRepository remoteRepository )
+ {
+ // intentionally blank
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/MetadataBridge.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/MetadataBridge.java
new file mode 100644
index 00000000..bf199218
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/MetadataBridge.java
@@ -0,0 +1,172 @@
+package org.apache.maven.artifact.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Collections;
+import java.util.Map;
+
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.DefaultArtifactRepository;
+import org.codehaus.plexus.util.FileUtils;
+import org.eclipse.aether.RepositoryException;
+import org.eclipse.aether.metadata.AbstractMetadata;
+import org.eclipse.aether.metadata.MergeableMetadata;
+import org.eclipse.aether.metadata.Metadata;
+
+/**
+ * <strong>Warning:</strong> This is an internal utility class that is only public for technical reasons, it is not part
+ * of the public API. In particular, this class can be changed or deleted without prior notice.
+ *
+ * @author Benjamin Bentmann
+ */
+public final class MetadataBridge
+ extends AbstractMetadata
+ implements MergeableMetadata
+{
+
+ private ArtifactMetadata metadata;
+
+ private boolean merged;
+
+ public MetadataBridge( ArtifactMetadata metadata )
+ {
+ this.metadata = metadata;
+ }
+
+ public void merge( File current, File result )
+ throws RepositoryException
+ {
+ try
+ {
+ if ( current.exists() )
+ {
+ FileUtils.copyFile( current, result );
+ }
+ ArtifactRepository localRepo = new MetadataRepository( result );
+ metadata.storeInLocalRepository( localRepo, localRepo );
+ merged = true;
+ }
+ catch ( Exception e )
+ {
+ throw new RepositoryException( e.getMessage(), e );
+ }
+ }
+
+ public boolean isMerged()
+ {
+ return merged;
+ }
+
+ public String getGroupId()
+ {
+ return emptify( metadata.getGroupId() );
+ }
+
+ public String getArtifactId()
+ {
+ return metadata.storedInGroupDirectory() ? "" : emptify( metadata.getArtifactId() );
+ }
+
+ public String getVersion()
+ {
+ return metadata.storedInArtifactVersionDirectory() ? emptify( metadata.getBaseVersion() ) : "";
+ }
+
+ public String getType()
+ {
+ return metadata.getRemoteFilename();
+ }
+
+ private String emptify( String string )
+ {
+ return ( string != null ) ? string : "";
+ }
+
+ public File getFile()
+ {
+ return null;
+ }
+
+ public MetadataBridge setFile( File file )
+ {
+ return this;
+ }
+
+ public Nature getNature()
+ {
+ if ( metadata instanceof RepositoryMetadata )
+ {
+ switch ( ( (RepositoryMetadata) metadata ).getNature() )
+ {
+ case RepositoryMetadata.RELEASE_OR_SNAPSHOT:
+ return Nature.RELEASE_OR_SNAPSHOT;
+ case RepositoryMetadata.SNAPSHOT:
+ return Nature.SNAPSHOT;
+ default:
+ return Nature.RELEASE;
+ }
+ }
+ else
+ {
+ return Nature.RELEASE;
+ }
+ }
+
+ public Map<String, String> getProperties()
+ {
+ return Collections.emptyMap();
+ }
+
+ @Override
+ public Metadata setProperties( Map<String, String> properties )
+ {
+ return this;
+ }
+
+ @SuppressWarnings( "deprecation" )
+ static class MetadataRepository
+ extends DefaultArtifactRepository
+ {
+
+ private File metadataFile;
+
+ public MetadataRepository( File metadataFile )
+ {
+ super( "local", "", null );
+ this.metadataFile = metadataFile;
+ }
+
+ @Override
+ public String getBasedir()
+ {
+ return metadataFile.getParent();
+ }
+
+ @Override
+ public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+ {
+ return metadataFile.getName();
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/MetadataUtils.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/MetadataUtils.java
new file mode 100644
index 00000000..bdc4a795
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/MetadataUtils.java
@@ -0,0 +1,39 @@
+package org.apache.maven.artifact.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Assists in handling repository metadata.
+ *
+ * @author Benjamin Bentmann
+ */
+class MetadataUtils
+{
+
+ public static Metadata cloneMetadata( Metadata src )
+ {
+ if ( src == null )
+ {
+ return null;
+ }
+ return src.clone();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataReadException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataReadException.java
new file mode 100644
index 00000000..23e59841
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataReadException.java
@@ -0,0 +1,40 @@
+package org.apache.maven.artifact.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Problem storing the repository metadata in the local repository.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class RepositoryMetadataReadException
+ extends Exception
+{
+ public RepositoryMetadataReadException( String message )
+ {
+ super( message );
+ }
+
+ public RepositoryMetadataReadException( String message,
+ Exception e )
+ {
+ super( message, e );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java
new file mode 100644
index 00000000..359ab2ce
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java
@@ -0,0 +1,98 @@
+package org.apache.maven.artifact.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/**
+ * Metadata for the artifact version directory of the repository.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @todo split instantiation (versioning, plugin mappings) from definition
+ */
+public class SnapshotArtifactRepositoryMetadata
+ extends AbstractRepositoryMetadata
+{
+ private Artifact artifact;
+
+ public SnapshotArtifactRepositoryMetadata( Artifact artifact )
+ {
+ super( createMetadata( artifact, null ) );
+ this.artifact = artifact;
+ }
+
+ public SnapshotArtifactRepositoryMetadata( Artifact artifact,
+ Snapshot snapshot )
+ {
+ super( createMetadata( artifact, createVersioning( snapshot ) ) );
+ this.artifact = artifact;
+ }
+
+ public boolean storedInGroupDirectory()
+ {
+ return false;
+ }
+
+ public boolean storedInArtifactVersionDirectory()
+ {
+ return true;
+ }
+
+ public String getGroupId()
+ {
+ return artifact.getGroupId();
+ }
+
+ public String getArtifactId()
+ {
+ return artifact.getArtifactId();
+ }
+
+ public String getBaseVersion()
+ {
+ return artifact.getBaseVersion();
+ }
+
+ public Object getKey()
+ {
+ return "snapshot " + artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + artifact.getBaseVersion();
+ }
+
+ public boolean isSnapshot()
+ {
+ return artifact.isSnapshot();
+ }
+
+ public int getNature()
+ {
+ return isSnapshot() ? SNAPSHOT : RELEASE;
+ }
+
+ public ArtifactRepository getRepository()
+ {
+ return artifact.getRepository();
+ }
+
+ public void setRepository( ArtifactRepository remoteRepository )
+ {
+ artifact.setRepository( remoteRepository );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java
new file mode 100644
index 00000000..5ef86022
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java
@@ -0,0 +1,42 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+
+@Deprecated
+public interface ArtifactCollector
+ extends org.apache.maven.repository.legacy.resolver.LegacyArtifactCollector
+{
+
+ @Deprecated
+ ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact,
+ ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ List<ResolutionListener> listeners )
+ throws ArtifactResolutionException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java
new file mode 100644
index 00000000..0ca940a1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java
@@ -0,0 +1,108 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.wagon.events.TransferListener;
+
+/**
+ * @author Jason van Zyl
+ */
+// Just hide the one method we want behind the RepositorySystem interface.
+public interface ArtifactResolver
+{
+
+ ArtifactResolutionResult resolve( ArtifactResolutionRequest request );
+
+ // The rest is deprecated
+
+ // USED BY MAVEN ASSEMBLY PLUGIN 2.2-beta-2
+ @Deprecated
+ String ROLE = ArtifactResolver.class.getName();
+
+ // USED BY SUREFIRE, DEPENDENCY PLUGIN
+ @Deprecated
+ ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts, Artifact originatingArtifact,
+ ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+ // USED BY MAVEN ASSEMBLY PLUGIN
+ @Deprecated
+ ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts, Artifact originatingArtifact,
+ Map managedVersions, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+ // USED BY MAVEN ASSEMBLY PLUGIN
+ @Deprecated
+ ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts, Artifact originatingArtifact,
+ Map managedVersions, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+ @Deprecated
+ ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts, Artifact originatingArtifact,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository, ArtifactMetadataSource source )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+ @Deprecated
+ ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts, Artifact originatingArtifact,
+ Map managedVersions, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ List<ResolutionListener> listeners )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+ @Deprecated
+ ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts, Artifact originatingArtifact,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository, ArtifactMetadataSource source,
+ List<ResolutionListener> listeners )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+ // USED BY REMOTE RESOURCES PLUGIN, DEPENDENCY PLUGIN
+ @Deprecated
+ void resolve( Artifact artifact, List<ArtifactRepository> remoteRepositories, ArtifactRepository localRepository )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+ // USED BY REMOTE RESOURCES PLUGIN
+ @Deprecated
+ void resolve( Artifact artifact, List<ArtifactRepository> remoteRepositories, ArtifactRepository localRepository,
+ TransferListener downloadMonitor )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+ // USED BY DEPENDENCY PLUGIN, ARCHETYPE DOWNLOADER
+ @Deprecated
+ void resolveAlways( Artifact artifact, List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java
new file mode 100644
index 00000000..b066e4c0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java
@@ -0,0 +1,167 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.codehaus.plexus.logging.Logger;
+
+/**
+ * Send resolution events to the debug log.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class DebugResolutionListener
+ implements ResolutionListener, ResolutionListenerForDepMgmt
+{
+ private Logger logger;
+
+ private String indent = "";
+
+ private static Set<Artifact> ignoredArtifacts = new HashSet<Artifact>();
+
+ public DebugResolutionListener( Logger logger )
+ {
+ this.logger = logger;
+ }
+
+ public void testArtifact( Artifact node )
+ {
+ }
+
+ public void startProcessChildren( Artifact artifact )
+ {
+ indent += " ";
+ }
+
+ public void endProcessChildren( Artifact artifact )
+ {
+ indent = indent.substring( 2 );
+ }
+
+ public void includeArtifact( Artifact artifact )
+ {
+ logger.debug( indent + artifact + " (selected for " + artifact.getScope() + ")" );
+ }
+
+ public void omitForNearer( Artifact omitted, Artifact kept )
+ {
+ String omittedVersion = omitted.getVersion();
+ String keptVersion = kept.getVersion();
+
+ if ( omittedVersion != null ? !omittedVersion.equals( keptVersion ) : keptVersion != null )
+ {
+ logger.debug( indent + omitted + " (removed - nearer found: " + kept.getVersion() + ")" );
+ }
+ }
+
+ public void omitForCycle( Artifact omitted )
+ {
+ logger.debug( indent + omitted + " (removed - causes a cycle in the graph)" );
+ }
+
+ public void updateScopeCurrentPom( Artifact artifact, String ignoredScope )
+ {
+ logger.debug( indent + artifact + " (not setting artifactScope to: " + ignoredScope + "; local artifactScope "
+ + artifact.getScope() + " wins)" );
+
+ // TODO: better way than static? this might hide messages in a reactor
+ if ( !ignoredArtifacts.contains( artifact ) )
+ {
+ logger.warn( "\n\tArtifact " + artifact + " retains local artifactScope '" + artifact.getScope()
+ + "' overriding broader artifactScope '" + ignoredScope + "'\n"
+ + "\tgiven by a dependency. If this is not intended, modify or remove the local artifactScope.\n" );
+ ignoredArtifacts.add( artifact );
+ }
+ }
+
+ public void updateScope( Artifact artifact, String scope )
+ {
+ logger.debug( indent + artifact + " (setting artifactScope to: " + scope + ")" );
+ }
+
+ public void selectVersionFromRange( Artifact artifact )
+ {
+ logger.debug( indent + artifact + " (setting version to: " + artifact.getVersion() + " from range: "
+ + artifact.getVersionRange() + ")" );
+ }
+
+ public void restrictRange( Artifact artifact, Artifact replacement, VersionRange newRange )
+ {
+ logger.debug( indent + artifact + " (range restricted from: " + artifact.getVersionRange() + " and: "
+ + replacement.getVersionRange() + " to: " + newRange + " )" );
+ }
+
+ /**
+ * The logic used here used to be a copy of the logic used in the DefaultArtifactCollector, and this method was
+ * called right before the actual version/artifactScope changes were done. However, a different set of conditionals (and
+ * more information) is needed to be able to determine when and if the version and/or artifactScope changes. See the two
+ * added methods, manageArtifactVersion and manageArtifactScope.
+ */
+ public void manageArtifact( Artifact artifact, Artifact replacement )
+ {
+ String msg = indent + artifact;
+ msg += " (";
+ if ( replacement.getVersion() != null )
+ {
+ msg += "applying version: " + replacement.getVersion() + ";";
+ }
+ if ( replacement.getScope() != null )
+ {
+ msg += "applying artifactScope: " + replacement.getScope();
+ }
+ msg += ")";
+ logger.debug( msg );
+ }
+
+ public void manageArtifactVersion( Artifact artifact, Artifact replacement )
+ {
+ // only show msg if a change is actually taking place
+ if ( !replacement.getVersion().equals( artifact.getVersion() ) )
+ {
+ String msg = indent + artifact + " (applying version: " + replacement.getVersion() + ")";
+ logger.debug( msg );
+ }
+ }
+
+ public void manageArtifactScope( Artifact artifact, Artifact replacement )
+ {
+ // only show msg if a change is actually taking place
+ if ( !replacement.getScope().equals( artifact.getScope() ) )
+ {
+ String msg = indent + artifact + " (applying artifactScope: " + replacement.getScope() + ")";
+ logger.debug( msg );
+ }
+ }
+
+ public void manageArtifactSystemPath( Artifact artifact, Artifact replacement )
+ {
+ // only show msg if a change is actually taking place
+ if ( !replacement.getScope().equals( artifact.getScope() ) )
+ {
+ String msg = indent + artifact + " (applying system path: " + replacement.getFile() + ")";
+ logger.debug( msg );
+ }
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
new file mode 100644
index 00000000..cefb9e28
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
@@ -0,0 +1,30 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.codehaus.plexus.component.annotations.Component;
+
+@Deprecated
+@Component( role = ArtifactCollector.class )
+public class DefaultArtifactCollector
+ extends org.apache.maven.repository.legacy.resolver.DefaultLegacyArtifactCollector
+ implements ArtifactCollector
+{
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
new file mode 100644
index 00000000..1631a013
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
@@ -0,0 +1,643 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.regex.Matcher;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.metadata.ResolutionGroup;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.LegacyLocalRepositoryManager;
+import org.apache.maven.artifact.repository.RepositoryRequest;
+import org.apache.maven.artifact.repository.metadata.Snapshot;
+import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.repository.legacy.metadata.DefaultMetadataResolutionRequest;
+import org.apache.maven.repository.legacy.metadata.MetadataResolutionRequest;
+import org.apache.maven.repository.legacy.resolver.conflict.ConflictResolver;
+import org.apache.maven.wagon.events.TransferListener;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Disposable;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.LocalRepositoryManager;
+import org.eclipse.aether.resolution.ArtifactRequest;
+import org.eclipse.aether.resolution.ArtifactResult;
+
+/**
+ * @author Jason van Zyl
+ */
+@Component( role = ArtifactResolver.class )
+public class DefaultArtifactResolver
+ implements ArtifactResolver, Disposable
+{
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ protected ArtifactFactory artifactFactory;
+
+ @Requirement
+ private ArtifactCollector artifactCollector;
+
+ @Requirement
+ private ResolutionErrorHandler resolutionErrorHandler;
+
+ @Requirement
+ private ArtifactMetadataSource source;
+
+ @Requirement
+ private PlexusContainer container;
+
+ @Requirement
+ private LegacySupport legacySupport;
+
+ @Requirement
+ private RepositorySystem repoSystem;
+
+ private final Executor executor;
+
+ public DefaultArtifactResolver()
+ {
+ int threads = Integer.getInteger( "maven.artifact.threads", 5 );
+ if ( threads <= 1 )
+ {
+ executor = new Executor()
+ {
+ public void execute( Runnable command )
+ {
+ command.run();
+ }
+ };
+ }
+ else
+ {
+ executor =
+ new ThreadPoolExecutor( threads, threads, 3, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(),
+ new DaemonThreadCreator() );
+ }
+ }
+
+ private RepositorySystemSession getSession( ArtifactRepository localRepository )
+ {
+ return LegacyLocalRepositoryManager.overlay( localRepository, legacySupport.getRepositorySession(), repoSystem );
+ }
+
+ private void injectSession1( RepositoryRequest request, MavenSession session )
+ {
+ if ( session != null )
+ {
+ request.setOffline( session.isOffline() );
+ request.setForceUpdate( session.getRequest().isUpdateSnapshots() );
+ }
+ }
+
+ private void injectSession2( ArtifactResolutionRequest request, MavenSession session )
+ {
+ injectSession1( request, session );
+
+ if ( session != null )
+ {
+ request.setServers( session.getRequest().getServers() );
+ request.setMirrors( session.getRequest().getMirrors() );
+ request.setProxies( session.getRequest().getProxies() );
+ }
+ }
+
+ public void resolve( Artifact artifact, List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository, TransferListener resolutionListener )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ resolve( artifact, remoteRepositories, getSession( localRepository ) );
+ }
+
+ public void resolveAlways( Artifact artifact, List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ resolve( artifact, remoteRepositories, getSession( localRepository ) );
+ }
+
+ private void resolve( Artifact artifact, List<ArtifactRepository> remoteRepositories,
+ RepositorySystemSession session )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ if ( artifact == null )
+ {
+ return;
+ }
+
+ if ( Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) )
+ {
+ File systemFile = artifact.getFile();
+
+ if ( systemFile == null )
+ {
+ throw new ArtifactNotFoundException( "System artifact: " + artifact + " has no file attached", artifact );
+ }
+
+ if ( !systemFile.exists() )
+ {
+ throw new ArtifactNotFoundException( "System artifact: " + artifact + " not found in path: " + systemFile, artifact );
+ }
+
+ if ( !systemFile.isFile() )
+ {
+ throw new ArtifactNotFoundException( "System artifact: " + artifact + " is not a file: " + systemFile, artifact );
+ }
+
+ artifact.setResolved( true );
+
+ return;
+ }
+
+ if ( !artifact.isResolved() )
+ {
+ ArtifactResult result;
+
+ try
+ {
+ ArtifactRequest artifactRequest = new ArtifactRequest();
+ artifactRequest.setArtifact( RepositoryUtils.toArtifact( artifact ) );
+ artifactRequest.setRepositories( RepositoryUtils.toRepos( remoteRepositories ) );
+
+ // Maven 2.x quirk: an artifact always points at the local repo, regardless whether resolved or not
+ LocalRepositoryManager lrm = session.getLocalRepositoryManager();
+ String path = lrm.getPathForLocalArtifact( artifactRequest.getArtifact() );
+ artifact.setFile( new File( lrm.getRepository().getBasedir(), path ) );
+
+ result = repoSystem.resolveArtifact( session, artifactRequest );
+ }
+ catch ( org.eclipse.aether.resolution.ArtifactResolutionException e )
+ {
+ if ( e.getCause() instanceof org.eclipse.aether.transfer.ArtifactNotFoundException )
+ {
+ throw new ArtifactNotFoundException( e.getMessage(), artifact, remoteRepositories, e );
+ }
+ else
+ {
+ throw new ArtifactResolutionException( e.getMessage(), artifact, remoteRepositories, e );
+ }
+ }
+
+ artifact.selectVersion( result.getArtifact().getVersion() );
+ artifact.setFile( result.getArtifact().getFile() );
+ artifact.setResolved( true );
+
+ if ( artifact.isSnapshot() )
+ {
+ Matcher matcher = Artifact.VERSION_FILE_PATTERN.matcher( artifact.getVersion() );
+ if ( matcher.matches() )
+ {
+ Snapshot snapshot = new Snapshot();
+ snapshot.setTimestamp( matcher.group( 2 ) );
+ try
+ {
+ snapshot.setBuildNumber( Integer.parseInt( matcher.group( 3 ) ) );
+ artifact.addMetadata( new SnapshotArtifactRepositoryMetadata( artifact, snapshot ) );
+ }
+ catch ( NumberFormatException e )
+ {
+ logger.warn( "Invalid artifact version " + artifact.getVersion() + ": " + e.getMessage() );
+ }
+ }
+ }
+ }
+ }
+
+ public ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts, Artifact originatingArtifact,
+ ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ return resolveTransitively( artifacts, originatingArtifact, Collections.EMPTY_MAP, localRepository,
+ remoteRepositories, source, filter );
+
+ }
+
+ public ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts, Artifact originatingArtifact,
+ Map managedVersions, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ return resolveTransitively( artifacts, originatingArtifact, managedVersions, localRepository,
+ remoteRepositories, source, null );
+ }
+
+ public ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts, Artifact originatingArtifact,
+ Map managedVersions, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ return resolveTransitively( artifacts, originatingArtifact, managedVersions, localRepository,
+ remoteRepositories, source, filter, null );
+ }
+
+ public ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts, Artifact originatingArtifact,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository,
+ ArtifactMetadataSource source )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ return resolveTransitively( artifacts, originatingArtifact, localRepository, remoteRepositories, source, null );
+ }
+
+ public ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts, Artifact originatingArtifact,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository,
+ ArtifactMetadataSource source,
+ List<ResolutionListener> listeners )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ return resolveTransitively( artifacts, originatingArtifact, Collections.EMPTY_MAP, localRepository,
+ remoteRepositories, source, null, listeners );
+ }
+
+ public ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts, Artifact originatingArtifact,
+ Map managedVersions, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ List<ResolutionListener> listeners )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ return resolveTransitively( artifacts, originatingArtifact, managedVersions, localRepository,
+ remoteRepositories, source, filter, listeners, null );
+ }
+
+ public ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts, Artifact originatingArtifact,
+ Map managedVersions, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ List<ResolutionListener> listeners,
+ List<ConflictResolver> conflictResolvers )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ ArtifactResolutionRequest request = new ArtifactResolutionRequest()
+ .setArtifact( originatingArtifact )
+ .setResolveRoot( false )
+ // This is required by the surefire plugin
+ .setArtifactDependencies( artifacts )
+ .setManagedVersionMap( managedVersions )
+ .setLocalRepository( localRepository )
+ .setRemoteRepositories( remoteRepositories )
+ .setCollectionFilter( filter )
+ .setListeners( listeners );
+
+ injectSession2( request, legacySupport.getSession() );
+
+ return resolveWithExceptions( request );
+ }
+
+ public ArtifactResolutionResult resolveWithExceptions( ArtifactResolutionRequest request )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ ArtifactResolutionResult result = resolve( request );
+
+ // We have collected all the problems so let's mimic the way the old code worked and just blow up right here.
+ // That's right lets just let it rip right here and send a big incomprehensible blob of text at unsuspecting
+ // users. Bad dog!
+
+ resolutionErrorHandler.throwErrors( request, result );
+
+ return result;
+ }
+
+ // ------------------------------------------------------------------------
+ //
+ // ------------------------------------------------------------------------
+
+ public ArtifactResolutionResult resolve( ArtifactResolutionRequest request )
+ {
+ Artifact rootArtifact = request.getArtifact();
+ Set<Artifact> artifacts = request.getArtifactDependencies();
+ Map<String, Artifact> managedVersions = request.getManagedVersionMap();
+ List<ResolutionListener> listeners = request.getListeners();
+ ArtifactFilter collectionFilter = request.getCollectionFilter();
+ ArtifactFilter resolutionFilter = request.getResolutionFilter();
+ RepositorySystemSession session = getSession( request.getLocalRepository() );
+
+ //TODO: hack because metadata isn't generated in m2e correctly and i want to run the maven i have in the workspace
+ if ( source == null )
+ {
+ try
+ {
+ source = container.lookup( ArtifactMetadataSource.class );
+ }
+ catch ( ComponentLookupException e )
+ {
+ // won't happen
+ }
+ }
+
+ if ( listeners == null )
+ {
+ listeners = new ArrayList<ResolutionListener>();
+
+ if ( logger.isDebugEnabled() )
+ {
+ listeners.add( new DebugResolutionListener( logger ) );
+ }
+
+ listeners.add( new WarningResolutionListener( logger ) );
+ }
+
+ ArtifactResolutionResult result = new ArtifactResolutionResult();
+
+ // The root artifact may, or may not be resolved so we need to check before we attempt to resolve.
+ // This is often an artifact like a POM that is taken from disk and we already have hold of the
+ // file reference. But this may be a Maven Plugin that we need to resolve from a remote repository
+ // as well as its dependencies.
+
+ if ( request.isResolveRoot() /* && rootArtifact.getFile() == null */ )
+ {
+ try
+ {
+ resolve( rootArtifact, request.getRemoteRepositories(), session );
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ result.addErrorArtifactException( e );
+ return result;
+ }
+ catch ( ArtifactNotFoundException e )
+ {
+ result.addMissingArtifact( request.getArtifact() );
+ return result;
+ }
+ }
+
+ ArtifactResolutionRequest collectionRequest = request;
+
+ if ( request.isResolveTransitively() )
+ {
+ MetadataResolutionRequest metadataRequest = new DefaultMetadataResolutionRequest( request );
+
+ metadataRequest.setArtifact( rootArtifact );
+ metadataRequest.setResolveManagedVersions( managedVersions == null );
+
+ try
+ {
+ ResolutionGroup resolutionGroup = source.retrieve( metadataRequest );
+
+ if ( managedVersions == null )
+ {
+ managedVersions = resolutionGroup.getManagedVersions();
+ }
+
+ Set<Artifact> directArtifacts = resolutionGroup.getArtifacts();
+
+ if ( artifacts == null || artifacts.isEmpty() )
+ {
+ artifacts = directArtifacts;
+ }
+ else
+ {
+ List<Artifact> allArtifacts = new ArrayList<Artifact>();
+ allArtifacts.addAll( artifacts );
+ allArtifacts.addAll( directArtifacts );
+
+ Map<String, Artifact> mergedArtifacts = new LinkedHashMap<String, Artifact>();
+ for ( Artifact artifact : allArtifacts )
+ {
+ String conflictId = artifact.getDependencyConflictId();
+ if ( !mergedArtifacts.containsKey( conflictId ) )
+ {
+ mergedArtifacts.put( conflictId, artifact );
+ }
+ }
+
+ artifacts = new LinkedHashSet<Artifact>( mergedArtifacts.values() );
+ }
+
+ collectionRequest = new ArtifactResolutionRequest( request );
+ collectionRequest.setServers( request.getServers() );
+ collectionRequest.setMirrors( request.getMirrors() );
+ collectionRequest.setProxies( request.getProxies() );
+ collectionRequest.setRemoteRepositories( resolutionGroup.getResolutionRepositories() );
+ }
+ catch ( ArtifactMetadataRetrievalException e )
+ {
+ ArtifactResolutionException are =
+ new ArtifactResolutionException( "Unable to get dependency information for " + rootArtifact.getId()
+ + ": " + e.getMessage(), rootArtifact, metadataRequest.getRemoteRepositories(), e );
+ result.addMetadataResolutionException( are );
+ return result;
+ }
+ }
+
+ if ( artifacts == null || artifacts.isEmpty() )
+ {
+ if ( request.isResolveRoot() )
+ {
+ result.addArtifact( rootArtifact );
+ }
+ return result;
+ }
+
+ // After the collection we will have the artifact object in the result but they will not be resolved yet.
+ result =
+ artifactCollector.collect( artifacts, rootArtifact, managedVersions, collectionRequest, source,
+ collectionFilter, listeners, null );
+
+ // We have metadata retrieval problems, or there are cycles that have been detected
+ // so we give this back to the calling code and let them deal with this information
+ // appropriately.
+
+ if ( result.hasMetadataResolutionExceptions() || result.hasVersionRangeViolations() || result.hasCircularDependencyExceptions() )
+ {
+ return result;
+ }
+
+ if ( result.getArtifactResolutionNodes() != null )
+ {
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+
+ CountDownLatch latch = new CountDownLatch( result.getArtifactResolutionNodes().size() );
+
+ for ( ResolutionNode node : result.getArtifactResolutionNodes() )
+ {
+ Artifact artifact = node.getArtifact();
+
+ if ( resolutionFilter == null || resolutionFilter.include( artifact ) )
+ {
+ executor.execute( new ResolveTask( classLoader, latch, artifact, session,
+ node.getRemoteRepositories(), result ) );
+ }
+ else
+ {
+ latch.countDown();
+ }
+ }
+ try
+ {
+ latch.await();
+ }
+ catch ( InterruptedException e )
+ {
+ result.addErrorArtifactException( new ArtifactResolutionException( "Resolution interrupted",
+ rootArtifact, e ) );
+ }
+ }
+
+ // We want to send the root artifact back in the result but we need to do this after the other dependencies
+ // have been resolved.
+ if ( request.isResolveRoot() )
+ {
+ // Add the root artifact (as the first artifact to retain logical order of class path!)
+ Set<Artifact> allArtifacts = new LinkedHashSet<Artifact>();
+ allArtifacts.add( rootArtifact );
+ allArtifacts.addAll( result.getArtifacts() );
+ result.setArtifacts( allArtifacts );
+ }
+
+ return result;
+ }
+
+ public void resolve( Artifact artifact, List<ArtifactRepository> remoteRepositories, ArtifactRepository localRepository )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ resolve( artifact, remoteRepositories, localRepository, null );
+ }
+
+ /**
+ * ThreadCreator for creating daemon threads with fixed ThreadGroup-name.
+ */
+ static final class DaemonThreadCreator
+ implements ThreadFactory
+ {
+ static final String THREADGROUP_NAME = "org.apache.maven.artifact.resolver.DefaultArtifactResolver";
+
+ static final ThreadGroup GROUP = new ThreadGroup( THREADGROUP_NAME );
+
+ static final AtomicInteger THREAD_NUMBER = new AtomicInteger( 1 );
+
+ public Thread newThread( Runnable r )
+ {
+ Thread newThread = new Thread( GROUP, r, "resolver-" + THREAD_NUMBER.getAndIncrement() );
+ newThread.setDaemon( true );
+ newThread.setContextClassLoader( null );
+ return newThread;
+ }
+ }
+
+ private class ResolveTask
+ implements Runnable
+ {
+
+ private final ClassLoader classLoader;
+
+ private final CountDownLatch latch;
+
+ private final Artifact artifact;
+
+ private final RepositorySystemSession session;
+
+ private final List<ArtifactRepository> remoteRepositories;
+
+ private final ArtifactResolutionResult result;
+
+ public ResolveTask( ClassLoader classLoader, CountDownLatch latch, Artifact artifact, RepositorySystemSession session,
+ List<ArtifactRepository> remoteRepositories, ArtifactResolutionResult result )
+ {
+ this.classLoader = classLoader;
+ this.latch = latch;
+ this.artifact = artifact;
+ this.session = session;
+ this.remoteRepositories = remoteRepositories;
+ this.result = result;
+ }
+
+ public void run()
+ {
+ ClassLoader old = Thread.currentThread().getContextClassLoader();
+ try
+ {
+ Thread.currentThread().setContextClassLoader( classLoader );
+ resolve( artifact, remoteRepositories, session );
+ }
+ catch ( ArtifactNotFoundException anfe )
+ {
+ // These are cases where the artifact just isn't present in any of the remote repositories
+ // because it wasn't deployed, or it was deployed in the wrong place.
+
+ synchronized ( result )
+ {
+ result.addMissingArtifact( artifact );
+ }
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ // This is really a wagon TransferFailedException so something went wrong after we successfully
+ // retrieved the metadata.
+
+ synchronized ( result )
+ {
+ result.addErrorArtifactException( e );
+ }
+ }
+ finally
+ {
+ latch.countDown();
+ Thread.currentThread().setContextClassLoader( old );
+
+ }
+ }
+
+ }
+
+ @Override
+ public void dispose()
+ {
+ if ( executor instanceof ExecutorService )
+ {
+ ( (ExecutorService) executor ).shutdownNow();
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ResolutionListenerForDepMgmt.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ResolutionListenerForDepMgmt.java
new file mode 100644
index 00000000..06da7e3e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ResolutionListenerForDepMgmt.java
@@ -0,0 +1,43 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * Do not use!
+ * <p/>
+ * Should only be implmemented by DebugResolutionListener. Remove this
+ * when the ResolutionListener interface deprecation of the manageArtifact
+ * method (and the [yet to be done] addition of these methods to that
+ * interface) has had a chance to propagate to all interested plugins.
+ */
+@Deprecated
+public interface ResolutionListenerForDepMgmt
+{
+ void manageArtifactVersion( Artifact artifact,
+ Artifact replacement );
+
+ void manageArtifactScope( Artifact artifact,
+ Artifact replacement );
+
+ void manageArtifactSystemPath( Artifact artifact,
+ Artifact replacement );
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/UnresolvedArtifacts.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/UnresolvedArtifacts.java
new file mode 100644
index 00000000..b9ccf706
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/UnresolvedArtifacts.java
@@ -0,0 +1,66 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/**
+ * A simple recording of the Artifacts that could not be resolved for a given resolution request, along with
+ * the remote repositories where attempts were made to resolve the artifacts.
+ *
+ * @author Jason van Zyl
+ */
+public class UnresolvedArtifacts
+{
+ private Artifact originatingArtifact;
+
+ private List<Artifact> artifacts;
+
+ private List<ArtifactRepository> remoteRepositories;
+
+ public UnresolvedArtifacts( Artifact originatingArtifact,
+ List<Artifact> artifacts,
+ List<ArtifactRepository> remoteRepositories )
+ {
+ this.originatingArtifact = originatingArtifact;
+
+ this.artifacts = artifacts;
+
+ this.remoteRepositories = remoteRepositories;
+ }
+
+ public Artifact getOriginatingArtifact()
+ {
+ return originatingArtifact;
+ }
+
+ public List<Artifact> getArtifacts()
+ {
+ return artifacts;
+ }
+
+ public List<ArtifactRepository> getRemoteRepositories()
+ {
+ return remoteRepositories;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/WarningResolutionListener.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/WarningResolutionListener.java
new file mode 100644
index 00000000..825d595a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/WarningResolutionListener.java
@@ -0,0 +1,90 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.codehaus.plexus.logging.Logger;
+
+/**
+ * Send resolution warning events to the warning log.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class WarningResolutionListener
+ implements ResolutionListener
+{
+ private Logger logger;
+
+ public WarningResolutionListener( Logger logger )
+ {
+ this.logger = logger;
+ }
+
+ public void testArtifact( Artifact node )
+ {
+ }
+
+ public void startProcessChildren( Artifact artifact )
+ {
+ }
+
+ public void endProcessChildren( Artifact artifact )
+ {
+ }
+
+ public void includeArtifact( Artifact artifact )
+ {
+ }
+
+ public void omitForNearer( Artifact omitted,
+ Artifact kept )
+ {
+ }
+
+ public void omitForCycle( Artifact omitted )
+ {
+ }
+
+ public void updateScopeCurrentPom( Artifact artifact,
+ String scope )
+ {
+ }
+
+ public void updateScope( Artifact artifact,
+ String scope )
+ {
+ }
+
+ public void manageArtifact( Artifact artifact,
+ Artifact replacement )
+ {
+ }
+
+ public void selectVersionFromRange( Artifact artifact )
+ {
+ }
+
+ public void restrictRange( Artifact artifact,
+ Artifact replacement,
+ VersionRange newRange )
+ {
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/InversionArtifactFilter.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/InversionArtifactFilter.java
new file mode 100644
index 00000000..0499db51
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/InversionArtifactFilter.java
@@ -0,0 +1,65 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+public class InversionArtifactFilter
+ implements ArtifactFilter
+{
+ private final ArtifactFilter toInvert;
+
+ public InversionArtifactFilter( ArtifactFilter toInvert )
+ {
+ this.toInvert = toInvert;
+ }
+
+ public boolean include( Artifact artifact )
+ {
+ return !toInvert.include( artifact );
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int hash = 17;
+ hash = hash * 31 + toInvert.hashCode();
+ return hash;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ if ( !( obj instanceof InversionArtifactFilter ) )
+ {
+ return false;
+ }
+
+ InversionArtifactFilter other = (InversionArtifactFilter) obj;
+
+ return toInvert.equals( other.toInvert );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java
new file mode 100644
index 00000000..8cd02ccf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java
@@ -0,0 +1,93 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * Apply multiple filters, accepting an artifact if at least one of the filters accepts it.
+ *
+ * @author Benjamin Bentmann
+ */
+public class OrArtifactFilter
+ implements ArtifactFilter
+{
+
+ private Set<ArtifactFilter> filters;
+
+ public OrArtifactFilter()
+ {
+ this.filters = new LinkedHashSet<ArtifactFilter>();
+ }
+
+ public OrArtifactFilter( Collection<ArtifactFilter> filters )
+ {
+ this.filters = new LinkedHashSet<ArtifactFilter>( filters );
+ }
+
+ public boolean include( Artifact artifact )
+ {
+ for ( ArtifactFilter filter : filters )
+ {
+ if ( filter.include( artifact ) )
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public void add( ArtifactFilter artifactFilter )
+ {
+ filters.add( artifactFilter );
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int hash = 17;
+ hash = hash * 31 + filters.hashCode();
+ return hash;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ if ( !( obj instanceof OrArtifactFilter ) )
+ {
+ return false;
+ }
+
+ OrArtifactFilter other = (OrArtifactFilter) obj;
+
+ return filters.equals( other.filters );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/TypeArtifactFilter.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/TypeArtifactFilter.java
new file mode 100644
index 00000000..76c39ec3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/TypeArtifactFilter.java
@@ -0,0 +1,66 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+/** Artifact Filter which filters on artifact type */
+public class TypeArtifactFilter
+ implements ArtifactFilter
+{
+ private String type = "jar";
+
+ public TypeArtifactFilter( String type )
+ {
+ this.type = type;
+ }
+
+ public boolean include( Artifact artifact )
+ {
+ return type.equals( artifact.getType() );
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int hash = 17;
+ hash = hash * 31 + type.hashCode();
+ return hash;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ if ( !( obj instanceof TypeArtifactFilter ) )
+ {
+ return false;
+ }
+
+ TypeArtifactFilter other = (TypeArtifactFilter) obj;
+
+ return type.equals( other.type );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/versioning/ManagedVersionMap.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/versioning/ManagedVersionMap.java
new file mode 100644
index 00000000..86b49499
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/versioning/ManagedVersionMap.java
@@ -0,0 +1,56 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.maven.artifact.Artifact;
+
+@Deprecated
+public class ManagedVersionMap
+ extends HashMap<String, Artifact>
+{
+ public ManagedVersionMap( Map<String, Artifact> map )
+ {
+ super();
+ if ( map != null )
+ {
+ putAll( map );
+ }
+ }
+
+ public String toString()
+ {
+ StringBuilder buffer = new StringBuilder( "ManagedVersionMap (" + size() + " entries)\n" );
+ Iterator<String> iter = keySet().iterator();
+ while ( iter.hasNext() )
+ {
+ String key = iter.next();
+ buffer.append( key ).append( "=" ).append( get( key ) );
+ if ( iter.hasNext() )
+ {
+ buffer.append( "\n" );
+ }
+ }
+ return buffer.toString();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/execution/DefaultRuntimeInformation.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/execution/DefaultRuntimeInformation.java
new file mode 100644
index 00000000..7767aff1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/execution/DefaultRuntimeInformation.java
@@ -0,0 +1,64 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * Describes runtime information about the application.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+@Deprecated
+@Component( role = RuntimeInformation.class )
+public class DefaultRuntimeInformation
+ implements RuntimeInformation, Initializable
+{
+
+ @Requirement
+ private org.apache.maven.rtinfo.RuntimeInformation rtInfo;
+
+ private ArtifactVersion applicationVersion;
+
+ public ArtifactVersion getApplicationVersion()
+ {
+ return applicationVersion;
+ }
+
+ public void initialize()
+ throws InitializationException
+ {
+ String mavenVersion = rtInfo.getMavenVersion();
+
+ if ( StringUtils.isEmpty( mavenVersion ) )
+ {
+ throw new InitializationException( "Unable to read Maven version from maven-core" );
+ }
+
+ applicationVersion = new DefaultArtifactVersion( mavenVersion );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/execution/RuntimeInformation.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/execution/RuntimeInformation.java
new file mode 100644
index 00000000..22e522d2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/execution/RuntimeInformation.java
@@ -0,0 +1,34 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+
+/**
+ * Describes runtime information about the application.
+ *
+ * @deprecated Use {@link org.apache.maven.rtinfo.RuntimeInformation} instead.
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+@Deprecated
+public interface RuntimeInformation
+{
+ ArtifactVersion getApplicationVersion();
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/DefaultMavenProfilesBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/DefaultMavenProfilesBuilder.java
new file mode 100644
index 00000000..4745749b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/DefaultMavenProfilesBuilder.java
@@ -0,0 +1,93 @@
+package org.apache.maven.profiles;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.profiles.io.xpp3.ProfilesXpp3Reader;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.interpolation.EnvarBasedValueSource;
+import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+
+@Deprecated
+@Component( role = MavenProfilesBuilder.class )
+public class DefaultMavenProfilesBuilder
+ extends AbstractLogEnabled
+ implements MavenProfilesBuilder
+{
+ private static final String PROFILES_XML_FILE = "profiles.xml";
+
+ public ProfilesRoot buildProfiles( File basedir )
+ throws IOException, XmlPullParserException
+ {
+ File profilesXml = new File( basedir, PROFILES_XML_FILE );
+
+ ProfilesRoot profilesRoot = null;
+
+ if ( profilesXml.exists() )
+ {
+ ProfilesXpp3Reader reader = new ProfilesXpp3Reader();
+ Reader profileReader = null;
+ try
+ {
+ profileReader = ReaderFactory.newXmlReader( profilesXml );
+
+ StringWriter sWriter = new StringWriter();
+
+ IOUtil.copy( profileReader, sWriter );
+
+ String rawInput = sWriter.toString();
+
+ try
+ {
+ RegexBasedInterpolator interpolator = new RegexBasedInterpolator();
+ interpolator.addValueSource( new EnvarBasedValueSource() );
+
+ rawInput = interpolator.interpolate( rawInput, "settings" );
+ }
+ catch ( Exception e )
+ {
+ getLogger().warn( "Failed to initialize environment variable resolver. Skipping environment "
+ + "substitution in " + PROFILES_XML_FILE + "." );
+ getLogger().debug( "Failed to initialize envar resolver. Skipping resolution.", e );
+ }
+
+ StringReader sReader = new StringReader( rawInput );
+
+ profilesRoot = reader.read( sReader );
+ }
+ finally
+ {
+ IOUtil.close( profileReader );
+ }
+ }
+
+ return profilesRoot;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java
new file mode 100644
index 00000000..3b99e9e2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java
@@ -0,0 +1,248 @@
+package org.apache.maven.profiles;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.building.ModelProblem;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.profile.DefaultProfileActivationContext;
+import org.apache.maven.model.profile.ProfileSelector;
+import org.apache.maven.profiles.activation.ProfileActivationException;
+import org.codehaus.plexus.MutablePlexusContainer;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.logging.Logger;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import org.apache.maven.model.building.ModelProblemCollectorRequest;
+
+@Deprecated
+public class DefaultProfileManager
+ implements ProfileManager
+{
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private ProfileSelector profileSelector;
+
+ private List activatedIds = new ArrayList();
+
+ private List deactivatedIds = new ArrayList();
+
+ private List defaultIds = new ArrayList();
+
+ private Map profilesById = new LinkedHashMap();
+
+ private Properties requestProperties;
+
+ /**
+ * @deprecated without passing in the system properties, the SystemPropertiesProfileActivator will not work
+ * correctly in embedded envirnments.
+ */
+ public DefaultProfileManager( PlexusContainer container )
+ {
+ this( container, null );
+ }
+
+ /**
+ * the properties passed to the profile manager are the props that
+ * are passed to maven, possibly containing profile activator properties
+ *
+ */
+ public DefaultProfileManager( PlexusContainer container, Properties props )
+ {
+ try
+ {
+ this.profileSelector = container.lookup( ProfileSelector.class );
+ this.logger = ( (MutablePlexusContainer) container ).getLogger();
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new IllegalStateException( e );
+ }
+ this.requestProperties = props;
+ }
+
+ public Properties getRequestProperties()
+ {
+ return requestProperties;
+ }
+
+ public Map getProfilesById()
+ {
+ return profilesById;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.profiles.ProfileManager#addProfile(org.apache.maven.model.Profile)
+ */
+ public void addProfile( Profile profile )
+ {
+ String profileId = profile.getId();
+
+ Profile existing = (Profile) profilesById.get( profileId );
+ if ( existing != null )
+ {
+ logger.warn( "Overriding profile: \'" + profileId + "\' (source: " + existing.getSource()
+ + ") with new instance from source: " + profile.getSource() );
+ }
+
+ profilesById.put( profile.getId(), profile );
+
+ Activation activation = profile.getActivation();
+
+ if ( activation != null && activation.isActiveByDefault() )
+ {
+ activateAsDefault( profileId );
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.profiles.ProfileManager#explicitlyActivate(java.lang.String)
+ */
+ public void explicitlyActivate( String profileId )
+ {
+ if ( !activatedIds.contains( profileId ) )
+ {
+ logger.debug( "Profile with id: \'" + profileId + "\' has been explicitly activated." );
+
+ activatedIds.add( profileId );
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.profiles.ProfileManager#explicitlyActivate(java.util.List)
+ */
+ public void explicitlyActivate( List profileIds )
+ {
+ for ( Object profileId1 : profileIds )
+ {
+ String profileId = (String) profileId1;
+
+ explicitlyActivate( profileId );
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.profiles.ProfileManager#explicitlyDeactivate(java.lang.String)
+ */
+ public void explicitlyDeactivate( String profileId )
+ {
+ if ( !deactivatedIds.contains( profileId ) )
+ {
+ logger.debug( "Profile with id: \'" + profileId + "\' has been explicitly deactivated." );
+
+ deactivatedIds.add( profileId );
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.profiles.ProfileManager#explicitlyDeactivate(java.util.List)
+ */
+ public void explicitlyDeactivate( List profileIds )
+ {
+ for ( Object profileId1 : profileIds )
+ {
+ String profileId = (String) profileId1;
+
+ explicitlyDeactivate( profileId );
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.profiles.ProfileManager#getActiveProfiles()
+ */
+ public List getActiveProfiles()
+ throws ProfileActivationException
+ {
+ DefaultProfileActivationContext context = new DefaultProfileActivationContext();
+ context.setActiveProfileIds( activatedIds );
+ context.setInactiveProfileIds( deactivatedIds );
+ context.setSystemProperties( System.getProperties() );
+ context.setUserProperties( requestProperties );
+
+ final List<ProfileActivationException> errors = new ArrayList<ProfileActivationException>();
+
+ List<Profile> profiles =
+ profileSelector.getActiveProfiles( profilesById.values(), context, new ModelProblemCollector()
+ {
+
+ public void add( ModelProblemCollectorRequest req )
+ {
+ if ( !ModelProblem.Severity.WARNING.equals( req.getSeverity() ) )
+ {
+ errors.add( new ProfileActivationException( req.getMessage(), req.getException() ) );
+ }
+ }
+ } );
+
+ if ( !errors.isEmpty() )
+ {
+ throw errors.get( 0 );
+ }
+
+ return profiles;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.profiles.ProfileManager#addProfiles(java.util.List)
+ */
+ public void addProfiles( List profiles )
+ {
+ for ( Object profile1 : profiles )
+ {
+ Profile profile = (Profile) profile1;
+
+ addProfile( profile );
+ }
+ }
+
+ public void activateAsDefault( String profileId )
+ {
+ if ( !defaultIds.contains( profileId ) )
+ {
+ defaultIds.add( profileId );
+ }
+ }
+
+ public List getExplicitlyActivatedIds()
+ {
+ return activatedIds;
+ }
+
+ public List getExplicitlyDeactivatedIds()
+ {
+ return deactivatedIds;
+ }
+
+ public List getIdsActivatedByDefault()
+ {
+ return defaultIds;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/MavenProfilesBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/MavenProfilesBuilder.java
new file mode 100644
index 00000000..32fb6aaa
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/MavenProfilesBuilder.java
@@ -0,0 +1,37 @@
+package org.apache.maven.profiles;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * @author jdcasey
+ */
+@Deprecated
+public interface MavenProfilesBuilder
+{
+ String ROLE = MavenProfilesBuilder.class.getName();
+
+ ProfilesRoot buildProfiles( File basedir )
+ throws IOException, XmlPullParserException;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/ProfileManager.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/ProfileManager.java
new file mode 100644
index 00000000..ddda3d7f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/ProfileManager.java
@@ -0,0 +1,58 @@
+package org.apache.maven.profiles;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Profile;
+import org.apache.maven.profiles.activation.ProfileActivationException;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+@Deprecated
+public interface ProfileManager
+{
+
+ void addProfile( Profile profile );
+
+ void explicitlyActivate( String profileId );
+
+ void explicitlyActivate( List profileIds );
+
+ void explicitlyDeactivate( String profileId );
+
+ void explicitlyDeactivate( List profileIds );
+
+ List getActiveProfiles()
+ throws ProfileActivationException;
+
+ void addProfiles( List profiles );
+
+ Map getProfilesById();
+
+ List getExplicitlyActivatedIds();
+
+ List getExplicitlyDeactivatedIds();
+
+ List getIdsActivatedByDefault();
+
+ Properties getRequestProperties();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/ProfilesConversionUtils.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/ProfilesConversionUtils.java
new file mode 100644
index 00000000..72527b09
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/ProfilesConversionUtils.java
@@ -0,0 +1,151 @@
+package org.apache.maven.profiles;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.ActivationFile;
+import org.apache.maven.model.ActivationProperty;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.Repository;
+
+import java.util.List;
+
+@Deprecated
+public class ProfilesConversionUtils
+{
+ private ProfilesConversionUtils()
+ {
+ }
+
+ public static Profile convertFromProfileXmlProfile( org.apache.maven.profiles.Profile profileXmlProfile )
+ {
+ Profile profile = new Profile();
+
+ profile.setId( profileXmlProfile.getId() );
+
+ profile.setSource( "profiles.xml" );
+
+ org.apache.maven.profiles.Activation profileActivation = profileXmlProfile.getActivation();
+
+ if ( profileActivation != null )
+ {
+ Activation activation = new Activation();
+
+ activation.setActiveByDefault( profileActivation.isActiveByDefault() );
+
+ activation.setJdk( profileActivation.getJdk() );
+
+ org.apache.maven.profiles.ActivationProperty profileProp = profileActivation.getProperty();
+
+ if ( profileProp != null )
+ {
+ ActivationProperty prop = new ActivationProperty();
+
+ prop.setName( profileProp.getName() );
+ prop.setValue( profileProp.getValue() );
+
+ activation.setProperty( prop );
+ }
+
+
+ ActivationOS profileOs = profileActivation.getOs();
+
+ if ( profileOs != null )
+ {
+ org.apache.maven.model.ActivationOS os = new org.apache.maven.model.ActivationOS();
+
+ os.setArch( profileOs.getArch() );
+ os.setFamily( profileOs.getFamily() );
+ os.setName( profileOs.getName() );
+ os.setVersion( profileOs.getVersion() );
+
+ activation.setOs( os );
+ }
+
+ org.apache.maven.profiles.ActivationFile profileFile = profileActivation.getFile();
+
+ if ( profileFile != null )
+ {
+ ActivationFile file = new ActivationFile();
+
+ file.setExists( profileFile.getExists() );
+ file.setMissing( profileFile.getMissing() );
+
+ activation.setFile( file );
+ }
+
+ profile.setActivation( activation );
+ }
+
+ profile.setProperties( profileXmlProfile.getProperties() );
+
+ List repos = profileXmlProfile.getRepositories();
+ if ( repos != null )
+ {
+ for ( Object repo : repos )
+ {
+ profile.addRepository( convertFromProfileXmlRepository( (org.apache.maven.profiles.Repository) repo ) );
+ }
+ }
+
+ List pluginRepos = profileXmlProfile.getPluginRepositories();
+ if ( pluginRepos != null )
+ {
+ for ( Object pluginRepo : pluginRepos )
+ {
+ profile.addPluginRepository(
+ convertFromProfileXmlRepository( (org.apache.maven.profiles.Repository) pluginRepo ) );
+ }
+ }
+
+ return profile;
+ }
+
+ private static Repository convertFromProfileXmlRepository( org.apache.maven.profiles.Repository profileXmlRepo )
+ {
+ Repository repo = new Repository();
+
+ repo.setId( profileXmlRepo.getId() );
+ repo.setLayout( profileXmlRepo.getLayout() );
+ repo.setName( profileXmlRepo.getName() );
+ repo.setUrl( profileXmlRepo.getUrl() );
+
+ if ( profileXmlRepo.getSnapshots() != null )
+ {
+ repo.setSnapshots( convertRepositoryPolicy( profileXmlRepo.getSnapshots() ) );
+ }
+ if ( profileXmlRepo.getReleases() != null )
+ {
+ repo.setReleases( convertRepositoryPolicy( profileXmlRepo.getReleases() ) );
+ }
+
+ return repo;
+ }
+
+ private static org.apache.maven.model.RepositoryPolicy convertRepositoryPolicy( RepositoryPolicy profileXmlRepo )
+ {
+ org.apache.maven.model.RepositoryPolicy policy = new org.apache.maven.model.RepositoryPolicy();
+ policy.setEnabled( profileXmlRepo.isEnabled() );
+ policy.setUpdatePolicy( profileXmlRepo.getUpdatePolicy() );
+ policy.setChecksumPolicy( profileXmlRepo.getChecksumPolicy() );
+ return policy;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/DetectedProfileActivator.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/DetectedProfileActivator.java
new file mode 100644
index 00000000..5d6a8bf6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/DetectedProfileActivator.java
@@ -0,0 +1,35 @@
+package org.apache.maven.profiles.activation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Profile;
+
+@Deprecated
+public abstract class DetectedProfileActivator
+ implements ProfileActivator
+{
+ public boolean canDetermineActivation( Profile profile )
+ {
+ return canDetectActivation( profile );
+ }
+
+ protected abstract boolean canDetectActivation( Profile profile );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/FileProfileActivator.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/FileProfileActivator.java
new file mode 100644
index 00000000..de4ba2ed
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/FileProfileActivator.java
@@ -0,0 +1,109 @@
+package org.apache.maven.profiles.activation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.ActivationFile;
+import org.apache.maven.model.Profile;
+import org.codehaus.plexus.interpolation.EnvarBasedValueSource;
+import org.codehaus.plexus.interpolation.InterpolationException;
+import org.codehaus.plexus.interpolation.MapBasedValueSource;
+import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
+import org.codehaus.plexus.logging.LogEnabled;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.StringUtils;
+
+@Deprecated
+public class FileProfileActivator
+ extends DetectedProfileActivator
+ implements LogEnabled
+{
+ private Logger logger;
+
+ protected boolean canDetectActivation( Profile profile )
+ {
+ return profile.getActivation() != null && profile.getActivation().getFile() != null;
+ }
+
+ public boolean isActive( Profile profile )
+ {
+ Activation activation = profile.getActivation();
+
+ ActivationFile actFile = activation.getFile();
+
+ if ( actFile != null )
+ {
+ // check if the file exists, if it does then the profile will be active
+ String fileString = actFile.getExists();
+
+ RegexBasedInterpolator interpolator = new RegexBasedInterpolator();
+ try
+ {
+ interpolator.addValueSource( new EnvarBasedValueSource() );
+ }
+ catch ( IOException e )
+ {
+ // ignored
+ }
+ interpolator.addValueSource( new MapBasedValueSource( System.getProperties() ) );
+
+ try
+ {
+ if ( StringUtils.isNotEmpty( fileString ) )
+ {
+ fileString = StringUtils.replace( interpolator.interpolate( fileString, "" ), "\\", "/" );
+ return FileUtils.fileExists( fileString );
+ }
+
+ // check if the file is missing, if it is then the profile will be active
+ fileString = actFile.getMissing();
+
+ if ( StringUtils.isNotEmpty( fileString ) )
+ {
+ fileString = StringUtils.replace( interpolator.interpolate( fileString, "" ), "\\", "/" );
+ return !FileUtils.fileExists( fileString );
+ }
+ }
+ catch ( InterpolationException e )
+ {
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Failed to interpolate missing file location for profile activator: " + fileString,
+ e );
+ }
+ else
+ {
+ logger.warn( "Failed to interpolate missing file location for profile activator: " + fileString
+ + ". Run in debug mode (-X) for more information." );
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public void enableLogging( Logger logger )
+ {
+ this.logger = logger;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/JdkPrefixProfileActivator.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/JdkPrefixProfileActivator.java
new file mode 100644
index 00000000..dfae95f6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/JdkPrefixProfileActivator.java
@@ -0,0 +1,97 @@
+package org.apache.maven.profiles.activation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.Profile;
+import org.codehaus.plexus.util.StringUtils;
+
+@Deprecated
+public class JdkPrefixProfileActivator
+ extends DetectedProfileActivator
+{
+ private static final String JDK_VERSION = System.getProperty( "java.version" );
+
+ public boolean isActive( Profile profile )
+ throws ProfileActivationException
+ {
+ Activation activation = profile.getActivation();
+
+ String jdk = activation.getJdk();
+
+ // null case is covered by canDetermineActivation(), so we can do a straight startsWith() here.
+ if ( jdk.startsWith( "[" ) || jdk.startsWith( "(" ) )
+ {
+ try
+ {
+ return matchJdkVersionRange( jdk );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ throw new ProfileActivationException( "Invalid JDK version in profile '" + profile.getId() + "': "
+ + e.getMessage() );
+ }
+ }
+
+ boolean reverse = false;
+
+ if ( jdk.startsWith( "!" ) )
+ {
+ reverse = true;
+ jdk = jdk.substring( 1 );
+ }
+
+ if ( getJdkVersion().startsWith( jdk ) )
+ {
+ return !reverse;
+ }
+ else
+ {
+ return reverse;
+ }
+ }
+
+ private boolean matchJdkVersionRange( String jdk )
+ throws InvalidVersionSpecificationException
+ {
+ VersionRange jdkVersionRange = VersionRange.createFromVersionSpec( convertJdkToMavenVersion( jdk ) );
+ DefaultArtifactVersion jdkVersion = new DefaultArtifactVersion( convertJdkToMavenVersion( getJdkVersion() ) );
+ return jdkVersionRange.containsVersion( jdkVersion );
+ }
+
+ private String convertJdkToMavenVersion( String jdk )
+ {
+ return jdk.replaceAll( "_", "-" );
+ }
+
+ protected String getJdkVersion()
+ {
+ return JDK_VERSION;
+ }
+
+ protected boolean canDetectActivation( Profile profile )
+ {
+ return profile.getActivation() != null && StringUtils.isNotEmpty( profile.getActivation().getJdk() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/OperatingSystemProfileActivator.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/OperatingSystemProfileActivator.java
new file mode 100644
index 00000000..7464a303
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/OperatingSystemProfileActivator.java
@@ -0,0 +1,161 @@
+package org.apache.maven.profiles.activation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.ActivationOS;
+import org.apache.maven.model.Profile;
+import org.codehaus.plexus.util.Os;
+
+@Deprecated
+public class OperatingSystemProfileActivator
+ implements ProfileActivator
+{
+
+ public boolean canDetermineActivation( Profile profile )
+ {
+ Activation activation = profile.getActivation();
+ return activation != null && activation.getOs() != null;
+ }
+
+ public boolean isActive( Profile profile )
+ {
+ Activation activation = profile.getActivation();
+ ActivationOS os = activation.getOs();
+
+ boolean result = ensureAtLeastOneNonNull( os );
+
+ if ( result && os.getFamily() != null )
+ {
+ result = determineFamilyMatch( os.getFamily() );
+ }
+ if ( result && os.getName() != null )
+ {
+ result = determineNameMatch( os.getName() );
+ }
+ if ( result && os.getArch() != null )
+ {
+ result = determineArchMatch( os.getArch() );
+ }
+ if ( result && os.getVersion() != null )
+ {
+ result = determineVersionMatch( os.getVersion() );
+ }
+ return result;
+ }
+
+ private boolean ensureAtLeastOneNonNull( ActivationOS os )
+ {
+ return os.getArch() != null || os.getFamily() != null || os.getName() != null || os.getVersion() != null;
+ }
+
+ private boolean determineVersionMatch( String version )
+ {
+ String test = version;
+ boolean reverse = false;
+
+ if ( test.startsWith( "!" ) )
+ {
+ reverse = true;
+ test = test.substring( 1 );
+ }
+
+ boolean result = Os.isVersion( test );
+
+ if ( reverse )
+ {
+ return !result;
+ }
+ else
+ {
+ return result;
+ }
+ }
+
+ private boolean determineArchMatch( String arch )
+ {
+ String test = arch;
+ boolean reverse = false;
+
+ if ( test.startsWith( "!" ) )
+ {
+ reverse = true;
+ test = test.substring( 1 );
+ }
+
+ boolean result = Os.isArch( test );
+
+ if ( reverse )
+ {
+ return !result;
+ }
+ else
+ {
+ return result;
+ }
+ }
+
+ private boolean determineNameMatch( String name )
+ {
+ String test = name;
+ boolean reverse = false;
+
+ if ( test.startsWith( "!" ) )
+ {
+ reverse = true;
+ test = test.substring( 1 );
+ }
+
+ boolean result = Os.isName( test );
+
+ if ( reverse )
+ {
+ return !result;
+ }
+ else
+ {
+ return result;
+ }
+ }
+
+ private boolean determineFamilyMatch( String family )
+ {
+ String test = family;
+ boolean reverse = false;
+
+ if ( test.startsWith( "!" ) )
+ {
+ reverse = true;
+ test = test.substring( 1 );
+ }
+
+ boolean result = Os.isFamily( test );
+
+ if ( reverse )
+ {
+ return !result;
+ }
+ else
+ {
+ return result;
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/ProfileActivationException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/ProfileActivationException.java
new file mode 100644
index 00000000..7fc372cb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/ProfileActivationException.java
@@ -0,0 +1,39 @@
+package org.apache.maven.profiles.activation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+@Deprecated
+public class ProfileActivationException
+ extends Exception
+{
+
+ private static final long serialVersionUID = -90820222109103638L;
+
+ public ProfileActivationException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ public ProfileActivationException( String message )
+ {
+ super( message );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/ProfileActivator.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/ProfileActivator.java
new file mode 100644
index 00000000..d0a9ecb5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/ProfileActivator.java
@@ -0,0 +1,33 @@
+package org.apache.maven.profiles.activation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Profile;
+
+@Deprecated
+public interface ProfileActivator
+{
+ final String ROLE = ProfileActivator.class.getName();
+
+ boolean canDetermineActivation( Profile profile );
+
+ boolean isActive( Profile profile )
+ throws ProfileActivationException;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/SystemPropertyProfileActivator.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/SystemPropertyProfileActivator.java
new file mode 100644
index 00000000..a03267dc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/SystemPropertyProfileActivator.java
@@ -0,0 +1,114 @@
+package org.apache.maven.profiles.activation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Properties;
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.ActivationProperty;
+import org.apache.maven.model.Profile;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
+import org.codehaus.plexus.util.StringUtils;
+
+@Deprecated
+public class SystemPropertyProfileActivator
+ extends DetectedProfileActivator implements Contextualizable
+{
+ private Properties properties;
+
+ public void contextualize( Context context )
+ throws ContextException
+ {
+ properties = (Properties) context.get( "SystemProperties" );
+ }
+
+ protected boolean canDetectActivation( Profile profile )
+ {
+ return profile.getActivation() != null && profile.getActivation().getProperty() != null;
+ }
+
+ public boolean isActive( Profile profile )
+ throws ProfileActivationException
+ {
+ Activation activation = profile.getActivation();
+
+ ActivationProperty property = activation.getProperty();
+
+ if ( property != null )
+ {
+ String name = property.getName();
+ boolean reverseName = false;
+
+ if ( name == null )
+ {
+ throw new ProfileActivationException( "The property name is required to activate the profile '"
+ + profile.getId() + "'" );
+ }
+
+ if ( name.startsWith( "!" ) )
+ {
+ reverseName = true;
+ name = name.substring( 1 );
+ }
+
+ String sysValue = properties.getProperty( name );
+
+ String propValue = property.getValue();
+ if ( StringUtils.isNotEmpty( propValue ) )
+ {
+ boolean reverseValue = false;
+ if ( propValue.startsWith( "!" ) )
+ {
+ reverseValue = true;
+ propValue = propValue.substring( 1 );
+ }
+
+ // we have a value, so it has to match the system value...
+ boolean result = propValue.equals( sysValue );
+
+ if ( reverseValue )
+ {
+ return !result;
+ }
+ else
+ {
+ return result;
+ }
+ }
+ else
+ {
+ boolean result = StringUtils.isNotEmpty( sysValue );
+
+ if ( reverseName )
+ {
+ return !result;
+ }
+ else
+ {
+ return result;
+ }
+ }
+ }
+
+ return false;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
new file mode 100644
index 00000000..fff2de10
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
@@ -0,0 +1,324 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.building.ModelBuildingException;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelSource;
+import org.apache.maven.model.building.UrlModelSource;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.profiles.ProfileManager;
+import org.apache.maven.properties.internal.EnvironmentUtils;
+import org.apache.maven.repository.RepositorySystem;
+import org.apache.maven.wagon.events.TransferListener;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+/**
+ */
+@Component( role = MavenProjectBuilder.class )
+@Deprecated
+public class DefaultMavenProjectBuilder
+ implements MavenProjectBuilder
+{
+
+ @Requirement
+ private ProjectBuilder projectBuilder;
+
+ @Requirement
+ private RepositorySystem repositorySystem;
+
+ @Requirement
+ private LegacySupport legacySupport;
+
+ // ----------------------------------------------------------------------
+ // MavenProjectBuilder Implementation
+ // ----------------------------------------------------------------------
+
+ private ProjectBuildingRequest toRequest( ProjectBuilderConfiguration configuration )
+ {
+ DefaultProjectBuildingRequest request = new DefaultProjectBuildingRequest();
+
+ request.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 );
+ request.setResolveDependencies( false );
+
+ request.setLocalRepository( configuration.getLocalRepository() );
+ request.setBuildStartTime( configuration.getBuildStartTime() );
+ request.setUserProperties( configuration.getUserProperties() );
+ request.setSystemProperties( configuration.getExecutionProperties() );
+
+ ProfileManager profileManager = configuration.getGlobalProfileManager();
+ if ( profileManager != null )
+ {
+ request.setActiveProfileIds( profileManager.getExplicitlyActivatedIds() );
+ request.setInactiveProfileIds( profileManager.getExplicitlyDeactivatedIds() );
+ }
+ else
+ {
+ /*
+ * MNG-4900: Hack to workaround deficiency of legacy API which makes it impossible for plugins to access the
+ * global profile manager which is required to build a POM like a CLI invocation does. Failure to consider
+ * the activated profiles can cause repo declarations to be lost which in turn will result in artifact
+ * resolution failures, in particular when using the enhanced local repo which guards access to local files
+ * based on the configured remote repos.
+ */
+ MavenSession session = legacySupport.getSession();
+ if ( session != null )
+ {
+ MavenExecutionRequest req = session.getRequest();
+ if ( req != null )
+ {
+ request.setActiveProfileIds( req.getActiveProfiles() );
+ request.setInactiveProfileIds( req.getInactiveProfiles() );
+ }
+ }
+ }
+
+ return request;
+ }
+
+ private ProjectBuildingRequest injectSession( ProjectBuildingRequest request )
+ {
+ MavenSession session = legacySupport.getSession();
+ if ( session != null )
+ {
+ request.setRepositorySession( session.getRepositorySession() );
+ request.setSystemProperties( session.getSystemProperties() );
+ if ( request.getUserProperties().isEmpty() )
+ {
+ request.setUserProperties( session.getUserProperties() );
+ }
+
+ MavenExecutionRequest req = session.getRequest();
+ if ( req != null )
+ {
+ request.setRemoteRepositories( req.getRemoteRepositories() );
+ }
+ }
+ else
+ {
+ Properties props = new Properties();
+ EnvironmentUtils.addEnvVars( props );
+ props.putAll( System.getProperties() );
+ request.setSystemProperties( props );
+ }
+
+ return request;
+ }
+
+ @SuppressWarnings( "unchecked" )
+ private List<ArtifactRepository> normalizeToArtifactRepositories( List<?> repositories,
+ ProjectBuildingRequest request )
+ throws ProjectBuildingException
+ {
+ /*
+ * This provides backward-compat with 2.x that allowed plugins like the maven-remote-resources-plugin:1.0 to
+ * populate the builder configuration with model repositories instead of artifact repositories.
+ */
+
+ if ( repositories != null )
+ {
+ boolean normalized = false;
+
+ List<ArtifactRepository> repos = new ArrayList<ArtifactRepository>( repositories.size() );
+
+ for ( Object repository : repositories )
+ {
+ if ( repository instanceof Repository )
+ {
+ try
+ {
+ ArtifactRepository repo = repositorySystem.buildArtifactRepository( (Repository) repository );
+ repositorySystem.injectMirror( request.getRepositorySession(), Arrays.asList( repo ) );
+ repositorySystem.injectProxy( request.getRepositorySession(), Arrays.asList( repo ) );
+ repositorySystem.injectAuthentication( request.getRepositorySession(), Arrays.asList( repo ) );
+ repos.add( repo );
+ }
+ catch ( InvalidRepositoryException e )
+ {
+ throw new ProjectBuildingException( "", "Invalid remote repository " + repository, e );
+ }
+ normalized = true;
+ }
+ else
+ {
+ repos.add( (ArtifactRepository) repository );
+ }
+ }
+
+ if ( normalized )
+ {
+ return repos;
+ }
+ }
+
+ return (List<ArtifactRepository>) repositories;
+ }
+
+ private ProjectBuildingException transformError( ProjectBuildingException e )
+ {
+ if ( e.getCause() instanceof ModelBuildingException )
+ {
+ return new InvalidProjectModelException( e.getProjectId(), e.getMessage(), e.getPomFile() );
+ }
+
+ return e;
+ }
+
+ public MavenProject build( File pom, ProjectBuilderConfiguration configuration )
+ throws ProjectBuildingException
+ {
+ ProjectBuildingRequest request = injectSession( toRequest( configuration ) );
+
+ try
+ {
+ return projectBuilder.build( pom, request ).getProject();
+ }
+ catch ( ProjectBuildingException e )
+ {
+ throw transformError( e );
+ }
+ }
+
+ // This is used by the SITE plugin.
+ public MavenProject build( File pom, ArtifactRepository localRepository, ProfileManager profileManager )
+ throws ProjectBuildingException
+ {
+ ProjectBuilderConfiguration configuration = new DefaultProjectBuilderConfiguration();
+ configuration.setLocalRepository( localRepository );
+ configuration.setGlobalProfileManager( profileManager );
+
+ return build( pom, configuration );
+ }
+
+ public MavenProject buildFromRepository( Artifact artifact, List<ArtifactRepository> remoteRepositories,
+ ProjectBuilderConfiguration configuration, boolean allowStubModel )
+ throws ProjectBuildingException
+ {
+ ProjectBuildingRequest request = injectSession( toRequest( configuration ) );
+ request.setRemoteRepositories( normalizeToArtifactRepositories( remoteRepositories, request ) );
+ request.setProcessPlugins( false );
+ request.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL );
+
+ try
+ {
+ return projectBuilder.build( artifact, allowStubModel, request ).getProject();
+ }
+ catch ( ProjectBuildingException e )
+ {
+ throw transformError( e );
+ }
+ }
+
+ public MavenProject buildFromRepository( Artifact artifact, List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository, boolean allowStubModel )
+ throws ProjectBuildingException
+ {
+ ProjectBuilderConfiguration configuration = new DefaultProjectBuilderConfiguration();
+ configuration.setLocalRepository( localRepository );
+
+ return buildFromRepository( artifact, remoteRepositories, configuration, allowStubModel );
+ }
+
+ public MavenProject buildFromRepository( Artifact artifact, List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository )
+ throws ProjectBuildingException
+ {
+ return buildFromRepository( artifact, remoteRepositories, localRepository, true );
+ }
+
+ /**
+ * This is used for pom-less execution like running archetype:generate. I am taking out the profile handling and the
+ * interpolation of the base directory until we spec this out properly.
+ */
+ public MavenProject buildStandaloneSuperProject( ProjectBuilderConfiguration configuration )
+ throws ProjectBuildingException
+ {
+ ProjectBuildingRequest request = injectSession( toRequest( configuration ) );
+ request.setProcessPlugins( false );
+ request.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL );
+
+ ModelSource modelSource = new UrlModelSource( getClass().getResource( "standalone.xml" ) );
+
+ MavenProject project = projectBuilder.build( modelSource, request ).getProject();
+ project.setExecutionRoot( true );
+ return project;
+ }
+
+ public MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository )
+ throws ProjectBuildingException
+ {
+ return buildStandaloneSuperProject( localRepository, null );
+ }
+
+ public MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository, ProfileManager profileManager )
+ throws ProjectBuildingException
+ {
+ ProjectBuilderConfiguration configuration = new DefaultProjectBuilderConfiguration();
+ configuration.setLocalRepository( localRepository );
+ configuration.setGlobalProfileManager( profileManager );
+
+ return buildStandaloneSuperProject( configuration );
+ }
+
+ public MavenProject buildWithDependencies( File pom, ArtifactRepository localRepository,
+ ProfileManager profileManager, TransferListener transferListener )
+ throws ProjectBuildingException, ArtifactResolutionException, ArtifactNotFoundException
+ {
+ ProjectBuilderConfiguration configuration = new DefaultProjectBuilderConfiguration();
+ configuration.setLocalRepository( localRepository );
+ configuration.setGlobalProfileManager( profileManager );
+
+ ProjectBuildingRequest request = injectSession( toRequest( configuration ) );
+
+ request.setResolveDependencies( true );
+
+ try
+ {
+ return projectBuilder.build( pom, request ).getProject();
+ }
+ catch ( ProjectBuildingException e )
+ {
+ throw transformError( e );
+ }
+ }
+
+ public MavenProject buildWithDependencies( File pom, ArtifactRepository localRepository,
+ ProfileManager profileManager )
+ throws ProjectBuildingException, ArtifactResolutionException, ArtifactNotFoundException
+ {
+ return buildWithDependencies( pom, localRepository, profileManager, null );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java
new file mode 100644
index 00000000..d08f18e0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java
@@ -0,0 +1,107 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Date;
+import java.util.Properties;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.profiles.ProfileManager;
+
+@Deprecated
+public class DefaultProjectBuilderConfiguration
+ implements ProjectBuilderConfiguration
+{
+
+ private ProfileManager globalProfileManager;
+
+ private ArtifactRepository localRepository;
+
+ private Properties userProperties;
+
+ private Properties executionProperties = System.getProperties();
+
+ private Date buildStartTime;
+
+ public DefaultProjectBuilderConfiguration()
+ {
+ }
+
+ public ProjectBuilderConfiguration setGlobalProfileManager( ProfileManager globalProfileManager )
+ {
+ this.globalProfileManager = globalProfileManager;
+ return this;
+ }
+
+ public ProfileManager getGlobalProfileManager()
+ {
+ return globalProfileManager;
+ }
+
+ public ProjectBuilderConfiguration setLocalRepository( ArtifactRepository localRepository )
+ {
+ this.localRepository = localRepository;
+ return this;
+ }
+
+ public ArtifactRepository getLocalRepository()
+ {
+ return localRepository;
+ }
+
+ public ProjectBuilderConfiguration setUserProperties( Properties userProperties )
+ {
+ this.userProperties = userProperties;
+ return this;
+ }
+
+ public Properties getUserProperties()
+ {
+ if ( userProperties == null )
+ {
+ userProperties = new Properties();
+ }
+
+ return userProperties;
+ }
+
+ public Properties getExecutionProperties()
+ {
+ return executionProperties;
+ }
+
+ public ProjectBuilderConfiguration setExecutionProperties( Properties executionProperties )
+ {
+ this.executionProperties = executionProperties;
+ return this;
+ }
+
+ public Date getBuildStartTime()
+ {
+ return buildStartTime;
+ }
+
+ public ProjectBuilderConfiguration setBuildStartTime( Date buildStartTime )
+ {
+ this.buildStartTime = buildStartTime;
+ return this;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/InvalidProjectModelException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/InvalidProjectModelException.java
new file mode 100644
index 00000000..cf85aa9e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/InvalidProjectModelException.java
@@ -0,0 +1,74 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.project.validation.ModelValidationResult;
+
+@Deprecated
+public class InvalidProjectModelException
+ extends ProjectBuildingException
+{
+ private ModelValidationResult validationResult;
+
+ public InvalidProjectModelException( String projectId, String message, File pomLocation )
+ {
+ super( projectId, message, pomLocation );
+ }
+
+ /**
+ * @param projectId
+ * @param pomLocation absolute path of the pom file
+ * @param message
+ * @param validationResult
+ * @deprecated use {@link File} constructor for pomLocation
+ */
+ public InvalidProjectModelException( String projectId, String pomLocation, String message,
+ ModelValidationResult validationResult )
+ {
+ this( projectId, message, new File( pomLocation ), validationResult );
+ }
+
+ public InvalidProjectModelException( String projectId, String message, File pomFile,
+ ModelValidationResult validationResult )
+ {
+ super( projectId, message, pomFile );
+
+ this.validationResult = validationResult;
+ }
+
+ /**
+ * @param projectId
+ * @param pomLocation absolute path of the pom file
+ * @param message
+ * @deprecated use {@link File} constructor for pomLocation
+ */
+ public InvalidProjectModelException( String projectId, String pomLocation, String message )
+ {
+ this( projectId, message, new File( pomLocation ) );
+ }
+
+ public final ModelValidationResult getValidationResult()
+ {
+ return validationResult;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/MavenProjectBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
new file mode 100644
index 00000000..c44d8dbc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
@@ -0,0 +1,76 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.profiles.ProfileManager;
+import org.apache.maven.wagon.events.TransferListener;
+
+/**
+ * @deprecated use {@link ProjectBuilder} instead
+ */
+@Deprecated
+public interface MavenProjectBuilder
+{
+
+ MavenProject build( File pom, ProjectBuilderConfiguration configuration )
+ throws ProjectBuildingException;
+
+ //TODO maven-site-plugin -- Vincent, Dennis and Lukas are checking but this doesn't appear to be required anymore.
+ MavenProject build( File pom, ArtifactRepository localRepository, ProfileManager profileManager )
+ throws ProjectBuildingException;
+
+ //TODO remote-resources-plugin
+ MavenProject buildFromRepository( Artifact artifact, List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository )
+ throws ProjectBuildingException;
+
+ //TODO remote-resources-plugin
+ MavenProject buildFromRepository( Artifact artifact, List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository, boolean allowStubModel )
+ throws ProjectBuildingException;
+
+ // TODO: this is only to provide a project for plugins that don't need a project to execute but need some
+ // of the values from a MavenProject. Ideally this should be something internal and nothing outside Maven
+ // would ever need this so it should not be exposed in a public API
+ MavenProject buildStandaloneSuperProject( ProjectBuilderConfiguration configuration )
+ throws ProjectBuildingException;
+
+ MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository )
+ throws ProjectBuildingException;
+
+ MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository, ProfileManager profileManager )
+ throws ProjectBuildingException;
+
+ MavenProject buildWithDependencies( File pom, ArtifactRepository localRepository,
+ ProfileManager globalProfileManager, TransferListener transferListener )
+ throws ProjectBuildingException, ArtifactResolutionException, ArtifactNotFoundException;
+
+ MavenProject buildWithDependencies( File pom, ArtifactRepository localRepository,
+ ProfileManager globalProfileManager )
+ throws ProjectBuildingException, ArtifactResolutionException, ArtifactNotFoundException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/MissingRepositoryElementException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/MissingRepositoryElementException.java
new file mode 100644
index 00000000..17c267e3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/MissingRepositoryElementException.java
@@ -0,0 +1,38 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.InvalidRepositoryException;
+
+public class MissingRepositoryElementException
+ extends InvalidRepositoryException
+{
+
+ public MissingRepositoryElementException( String message, String repositoryId )
+ {
+ super( message, repositoryId );
+ }
+
+ public MissingRepositoryElementException( String message )
+ {
+ super( message, "-unknown-" );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/ModelUtils.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/ModelUtils.java
new file mode 100644
index 00000000..1af061d3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/ModelUtils.java
@@ -0,0 +1,367 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginContainer;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.model.Repository;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/** @deprecated */
+@Deprecated
+public final class ModelUtils
+{
+
+ /**
+ * This should be the resulting ordering of plugins after merging:
+ * <p/>
+ * Given:
+ * <p/>
+ * parent: X -> A -> B -> D -> E
+ * child: Y -> A -> C -> D -> F
+ * <p/>
+ * Result:
+ * <p/>
+ * X -> Y -> A -> B -> C -> D -> E -> F
+ */
+ public static void mergePluginLists( PluginContainer childContainer, PluginContainer parentContainer,
+ boolean handleAsInheritance )
+ {
+ if ( ( childContainer == null ) || ( parentContainer == null ) )
+ {
+ // nothing to do.
+ return;
+ }
+
+ List<Plugin> parentPlugins = parentContainer.getPlugins();
+
+ if ( ( parentPlugins != null ) && !parentPlugins.isEmpty() )
+ {
+ parentPlugins = new ArrayList<Plugin>( parentPlugins );
+
+ // If we're processing this merge as an inheritance, we have to build up a list of
+ // plugins that were considered for inheritance.
+ if ( handleAsInheritance )
+ {
+ for ( Iterator<Plugin> it = parentPlugins.iterator(); it.hasNext(); )
+ {
+ Plugin plugin = it.next();
+
+ String inherited = plugin.getInherited();
+
+ if ( ( inherited != null ) && !Boolean.valueOf( inherited ) )
+ {
+ it.remove();
+ }
+ }
+ }
+
+ List<Plugin> assembledPlugins = new ArrayList<Plugin>();
+
+ Map<String, Plugin> childPlugins = childContainer.getPluginsAsMap();
+
+ for ( Plugin parentPlugin : parentPlugins )
+ {
+ String parentInherited = parentPlugin.getInherited();
+
+ // only merge plugin definition from the parent if at least one
+ // of these is true:
+ // 1. we're not processing the plugins in an inheritance-based merge
+ // 2. the parent's <inherited/> flag is not set
+ // 3. the parent's <inherited/> flag is set to true
+ if ( !handleAsInheritance || ( parentInherited == null )
+ || Boolean.valueOf( parentInherited ) )
+ {
+ Plugin childPlugin = childPlugins.get( parentPlugin.getKey() );
+
+ if ( ( childPlugin != null ) && !assembledPlugins.contains( childPlugin ) )
+ {
+ Plugin assembledPlugin = childPlugin;
+
+ mergePluginDefinitions( childPlugin, parentPlugin, handleAsInheritance );
+
+ // fix for MNG-2221 (assembly cache was not being populated for later reference):
+ assembledPlugins.add( assembledPlugin );
+ }
+
+ // if we're processing this as an inheritance-based merge, and
+ // the parent's <inherited/> flag is not set, then we need to
+ // clear the inherited flag in the merge result.
+ if ( handleAsInheritance && ( parentInherited == null ) )
+ {
+ parentPlugin.unsetInheritanceApplied();
+ }
+ }
+
+ // very important to use the parentPlugins List, rather than parentContainer.getPlugins()
+ // since this list is a local one, and may have been modified during processing.
+ List<Plugin> results =
+ ModelUtils.orderAfterMerge( assembledPlugins, parentPlugins, childContainer.getPlugins() );
+
+ childContainer.setPlugins( results );
+
+ childContainer.flushPluginMap();
+ }
+ }
+ }
+
+ public static List<Plugin> orderAfterMerge( List<Plugin> merged, List<Plugin> highPrioritySource,
+ List<Plugin> lowPrioritySource )
+ {
+ List<Plugin> results = new ArrayList<Plugin>();
+
+ if ( !merged.isEmpty() )
+ {
+ results.addAll( merged );
+ }
+
+ List<Plugin> missingFromResults = new ArrayList<Plugin>();
+
+ List<List<Plugin>> sources = new ArrayList<List<Plugin>>();
+
+ sources.add( highPrioritySource );
+ sources.add( lowPrioritySource );
+
+ for ( List<Plugin> source : sources )
+ {
+ for ( Plugin item : source )
+ {
+ if ( results.contains( item ) )
+ {
+ if ( !missingFromResults.isEmpty() )
+ {
+ int idx = results.indexOf( item );
+
+ if ( idx < 0 )
+ {
+ idx = 0;
+ }
+
+ results.addAll( idx, missingFromResults );
+
+ missingFromResults.clear();
+ }
+ }
+ else
+ {
+ missingFromResults.add( item );
+ }
+ }
+
+ if ( !missingFromResults.isEmpty() )
+ {
+ results.addAll( missingFromResults );
+
+ missingFromResults.clear();
+ }
+ }
+
+ return results;
+ }
+
+
+ public static void mergePluginDefinitions( Plugin child, Plugin parent, boolean handleAsInheritance )
+ {
+ if ( ( child == null ) || ( parent == null ) )
+ {
+ // nothing to do.
+ return;
+ }
+
+ if ( parent.isExtensions() )
+ {
+ child.setExtensions( true );
+ }
+
+ if ( ( child.getVersion() == null ) && ( parent.getVersion() != null ) )
+ {
+ child.setVersion( parent.getVersion() );
+ }
+
+ Xpp3Dom childConfiguration = (Xpp3Dom) child.getConfiguration();
+ Xpp3Dom parentConfiguration = (Xpp3Dom) parent.getConfiguration();
+
+ childConfiguration = Xpp3Dom.mergeXpp3Dom( childConfiguration, parentConfiguration );
+
+ child.setConfiguration( childConfiguration );
+
+ child.setDependencies( mergeDependencyList( child.getDependencies(), parent.getDependencies() ) );
+
+ // from here to the end of the method is dealing with merging of the <executions/> section.
+ String parentInherited = parent.getInherited();
+
+ boolean parentIsInherited = ( parentInherited == null ) || Boolean.valueOf( parentInherited );
+
+ List<PluginExecution> parentExecutions = parent.getExecutions();
+
+ if ( ( parentExecutions != null ) && !parentExecutions.isEmpty() )
+ {
+ List<PluginExecution> mergedExecutions = new ArrayList<PluginExecution>();
+
+ Map<String, PluginExecution> assembledExecutions = new TreeMap<String, PluginExecution>();
+
+ Map<String, PluginExecution> childExecutions = child.getExecutionsAsMap();
+
+ for ( PluginExecution parentExecution : parentExecutions )
+ {
+ String inherited = parentExecution.getInherited();
+
+ boolean parentExecInherited =
+ parentIsInherited && ( ( inherited == null ) || Boolean.valueOf( inherited ) );
+
+ if ( !handleAsInheritance || parentExecInherited )
+ {
+ PluginExecution assembled = parentExecution;
+
+ PluginExecution childExecution = childExecutions.get( parentExecution.getId() );
+
+ if ( childExecution != null )
+ {
+ mergePluginExecutionDefinitions( childExecution, parentExecution );
+
+ assembled = childExecution;
+ }
+ else if ( handleAsInheritance && ( parentInherited == null ) )
+ {
+ parentExecution.unsetInheritanceApplied();
+ }
+
+ assembledExecutions.put( assembled.getId(), assembled );
+ mergedExecutions.add( assembled );
+ }
+ }
+
+ for ( PluginExecution childExecution : child.getExecutions() )
+ {
+ if ( !assembledExecutions.containsKey( childExecution.getId() ) )
+ {
+ mergedExecutions.add( childExecution );
+ }
+ }
+
+ child.setExecutions( mergedExecutions );
+
+ child.flushExecutionMap();
+ }
+
+ }
+
+ private static void mergePluginExecutionDefinitions( PluginExecution child, PluginExecution parent )
+ {
+ if ( child.getPhase() == null )
+ {
+ child.setPhase( parent.getPhase() );
+ }
+
+ List<String> parentGoals = parent.getGoals();
+ List<String> childGoals = child.getGoals();
+
+ List<String> goals = new ArrayList<String>();
+
+ if ( ( childGoals != null ) && !childGoals.isEmpty() )
+ {
+ goals.addAll( childGoals );
+ }
+
+ if ( parentGoals != null )
+ {
+ for ( String goal : parentGoals )
+ {
+ if ( !goals.contains( goal ) )
+ {
+ goals.add( goal );
+ }
+ }
+ }
+
+ child.setGoals( goals );
+
+ Xpp3Dom childConfiguration = (Xpp3Dom) child.getConfiguration();
+ Xpp3Dom parentConfiguration = (Xpp3Dom) parent.getConfiguration();
+
+ childConfiguration = Xpp3Dom.mergeXpp3Dom( childConfiguration, parentConfiguration );
+
+ child.setConfiguration( childConfiguration );
+ }
+
+ public static List<Repository> mergeRepositoryLists( List<Repository> dominant, List<Repository> recessive )
+ {
+ List<Repository> repositories = new ArrayList<Repository>();
+
+ for ( Repository repository : dominant )
+ {
+ repositories.add( repository );
+ }
+
+ for ( Repository repository : recessive )
+ {
+ if ( !repositories.contains( repository ) )
+ {
+ repositories.add( repository );
+ }
+ }
+
+ return repositories;
+ }
+
+ public static void mergeFilterLists( List<String> childFilters, List<String> parentFilters )
+ {
+ for ( String f : parentFilters )
+ {
+ if ( !childFilters.contains( f ) )
+ {
+ childFilters.add( f );
+ }
+ }
+ }
+
+ private static List<Dependency> mergeDependencyList( List<Dependency> child, List<Dependency> parent )
+ {
+ Map<String, Dependency> depsMap = new LinkedHashMap<String, Dependency>();
+
+ if ( parent != null )
+ {
+ for ( Dependency dependency : parent )
+ {
+ depsMap.put( dependency.getManagementKey(), dependency );
+ }
+ }
+
+ if ( child != null )
+ {
+ for ( Dependency dependency : child )
+ {
+ depsMap.put( dependency.getManagementKey(), dependency );
+ }
+ }
+
+ return new ArrayList<Dependency>( depsMap.values() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
new file mode 100644
index 00000000..ddfad3cb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
@@ -0,0 +1,55 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Date;
+import java.util.Properties;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.profiles.ProfileManager;
+
+/**
+ * @deprecated use {@link ProjectBuildingRequest} instead
+ */
+@Deprecated
+public interface ProjectBuilderConfiguration
+{
+
+ ArtifactRepository getLocalRepository();
+
+ ProfileManager getGlobalProfileManager();
+
+ Properties getUserProperties();
+
+ Properties getExecutionProperties();
+
+ ProjectBuilderConfiguration setGlobalProfileManager( ProfileManager globalProfileManager );
+
+ ProjectBuilderConfiguration setLocalRepository( ArtifactRepository localRepository );
+
+ ProjectBuilderConfiguration setUserProperties( Properties userProperties );
+
+ ProjectBuilderConfiguration setExecutionProperties( Properties executionProperties );
+
+ Date getBuildStartTime();
+
+ ProjectBuilderConfiguration setBuildStartTime( Date buildStartTime );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/ProjectUtils.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/ProjectUtils.java
new file mode 100644
index 00000000..b70d3cff
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/ProjectUtils.java
@@ -0,0 +1,118 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.model.DeploymentRepository;
+import org.apache.maven.model.Repository;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.repository.RepositorySystem;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.eclipse.aether.RepositorySystemSession;
+
+// This class needs to stick around because it was exposed the the remote resources plugin started using it instead of
+// getting the repositories from the project.
+
+@Deprecated
+public final class ProjectUtils
+{
+
+ private ProjectUtils()
+ {
+ }
+
+ public static List<ArtifactRepository> buildArtifactRepositories( List<Repository> repositories,
+ ArtifactRepositoryFactory artifactRepositoryFactory,
+ PlexusContainer c )
+ throws InvalidRepositoryException
+ {
+
+ List<ArtifactRepository> remoteRepositories = new ArrayList<ArtifactRepository>();
+
+ for ( Repository r : repositories )
+ {
+ remoteRepositories.add( buildArtifactRepository( r, artifactRepositoryFactory, c ) );
+ }
+
+ return remoteRepositories;
+ }
+
+ public static ArtifactRepository buildDeploymentArtifactRepository( DeploymentRepository repo,
+ ArtifactRepositoryFactory artifactRepositoryFactory,
+ PlexusContainer c )
+ throws InvalidRepositoryException
+ {
+ return buildArtifactRepository( repo, artifactRepositoryFactory, c );
+ }
+
+ public static ArtifactRepository buildArtifactRepository( Repository repo,
+ ArtifactRepositoryFactory artifactRepositoryFactory,
+ PlexusContainer c )
+ throws InvalidRepositoryException
+ {
+ RepositorySystem repositorySystem = rs( c );
+ RepositorySystemSession session = rss( c );
+
+ ArtifactRepository repository = repositorySystem.buildArtifactRepository( repo );
+
+ if ( session != null )
+ {
+ repositorySystem.injectMirror( session, Arrays.asList( repository ) );
+ repositorySystem.injectProxy( session, Arrays.asList( repository ) );
+ repositorySystem.injectAuthentication( session, Arrays.asList( repository ) );
+ }
+
+ return repository;
+ }
+
+ private static RepositorySystem rs( PlexusContainer c )
+ {
+ try
+ {
+ return c.lookup( RepositorySystem.class );
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new IllegalStateException( e );
+ }
+ }
+
+ private static RepositorySystemSession rss( PlexusContainer c )
+ {
+ try
+ {
+ LegacySupport legacySupport = c.lookup( LegacySupport.class );
+
+ return legacySupport.getRepositorySession();
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new IllegalStateException( e );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
new file mode 100644
index 00000000..4b08eb96
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
@@ -0,0 +1,752 @@
+package org.apache.maven.project.inheritance;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.StringTokenizer;
+import java.util.TreeMap;
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.DeploymentRepository;
+import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.model.Extension;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.PluginManagement;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.ReportSet;
+import org.apache.maven.model.Reporting;
+import org.apache.maven.model.Resource;
+import org.apache.maven.model.Scm;
+import org.apache.maven.model.Site;
+import org.apache.maven.project.ModelUtils;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+@Component( role = ModelInheritanceAssembler.class )
+public class DefaultModelInheritanceAssembler
+ implements ModelInheritanceAssembler
+{
+ // TODO: Remove this!
+ @SuppressWarnings( "unchecked" )
+ public void assembleBuildInheritance( Build childBuild, Build parentBuild, boolean handleAsInheritance )
+ {
+ // The build has been set but we want to step in here and fill in
+ // values that have not been set by the child.
+
+ if ( childBuild.getSourceDirectory() == null )
+ {
+ childBuild.setSourceDirectory( parentBuild.getSourceDirectory() );
+ }
+
+ if ( childBuild.getScriptSourceDirectory() == null )
+ {
+ childBuild.setScriptSourceDirectory( parentBuild.getScriptSourceDirectory() );
+ }
+
+ if ( childBuild.getTestSourceDirectory() == null )
+ {
+ childBuild.setTestSourceDirectory( parentBuild.getTestSourceDirectory() );
+ }
+
+ if ( childBuild.getOutputDirectory() == null )
+ {
+ childBuild.setOutputDirectory( parentBuild.getOutputDirectory() );
+ }
+
+ if ( childBuild.getTestOutputDirectory() == null )
+ {
+ childBuild.setTestOutputDirectory( parentBuild.getTestOutputDirectory() );
+ }
+
+ // Extensions are accumulated
+ mergeExtensionLists( childBuild, parentBuild );
+
+ if ( childBuild.getDirectory() == null )
+ {
+ childBuild.setDirectory( parentBuild.getDirectory() );
+ }
+
+ if ( childBuild.getDefaultGoal() == null )
+ {
+ childBuild.setDefaultGoal( parentBuild.getDefaultGoal() );
+ }
+
+ if ( childBuild.getFinalName() == null )
+ {
+ childBuild.setFinalName( parentBuild.getFinalName() );
+ }
+
+ ModelUtils.mergeFilterLists( childBuild.getFilters(), parentBuild.getFilters() );
+
+ List<Resource> resources = childBuild.getResources();
+ if ( ( resources == null ) || resources.isEmpty() )
+ {
+ childBuild.setResources( parentBuild.getResources() );
+ }
+
+ resources = childBuild.getTestResources();
+ if ( ( resources == null ) || resources.isEmpty() )
+ {
+ childBuild.setTestResources( parentBuild.getTestResources() );
+ }
+
+ // Plugins are aggregated if Plugin.inherit != false
+ ModelUtils.mergePluginLists( childBuild, parentBuild, handleAsInheritance );
+
+ // Plugin management :: aggregate
+ PluginManagement dominantPM = childBuild.getPluginManagement();
+ PluginManagement recessivePM = parentBuild.getPluginManagement();
+
+ if ( ( dominantPM == null ) && ( recessivePM != null ) )
+ {
+ // FIXME: Filter out the inherited == false stuff!
+ childBuild.setPluginManagement( recessivePM );
+ }
+ else
+ {
+ ModelUtils.mergePluginLists( childBuild.getPluginManagement(), parentBuild.getPluginManagement(), false );
+ }
+ }
+
+ private void assembleScmInheritance( Model child, Model parent, String childPathAdjustment, boolean appendPaths )
+ {
+ if ( parent.getScm() != null )
+ {
+ Scm parentScm = parent.getScm();
+
+ Scm childScm = child.getScm();
+
+ if ( childScm == null )
+ {
+ childScm = new Scm();
+
+ child.setScm( childScm );
+ }
+
+ if ( StringUtils.isEmpty( childScm.getConnection() ) && !StringUtils.isEmpty( parentScm.getConnection() ) )
+ {
+ childScm.setConnection(
+ appendPath( parentScm.getConnection(), child.getArtifactId(), childPathAdjustment, appendPaths ) );
+ }
+
+ if ( StringUtils.isEmpty( childScm.getDeveloperConnection() )
+ && !StringUtils.isEmpty( parentScm.getDeveloperConnection() ) )
+ {
+ childScm
+ .setDeveloperConnection( appendPath( parentScm.getDeveloperConnection(), child.getArtifactId(),
+ childPathAdjustment, appendPaths ) );
+ }
+
+ if ( StringUtils.isEmpty( childScm.getUrl() ) && !StringUtils.isEmpty( parentScm.getUrl() ) )
+ {
+ childScm.setUrl(
+ appendPath( parentScm.getUrl(), child.getArtifactId(), childPathAdjustment, appendPaths ) );
+ }
+ }
+ }
+
+ public void copyModel( Model dest, Model source )
+ {
+ assembleModelInheritance( dest, source, null, false );
+ }
+
+ public void assembleModelInheritance( Model child, Model parent, String childPathAdjustment )
+ {
+ assembleModelInheritance( child, parent, childPathAdjustment, true );
+ }
+
+ public void assembleModelInheritance( Model child, Model parent )
+ {
+ assembleModelInheritance( child, parent, null, true );
+ }
+
+ private void assembleModelInheritance( Model child, Model parent, String childPathAdjustment, boolean appendPaths )
+ {
+ // cannot inherit from null parent.
+ if ( parent == null )
+ {
+ return;
+ }
+
+ // Group id
+ if ( child.getGroupId() == null )
+ {
+ child.setGroupId( parent.getGroupId() );
+ }
+
+ // version
+ if ( child.getVersion() == null )
+ {
+ // The parent version may have resolved to something different, so we take what we asked for...
+ // instead of - child.setVersion( parent.getVersion() );
+
+ if ( child.getParent() != null )
+ {
+ child.setVersion( child.getParent().getVersion() );
+ }
+ }
+
+ // inceptionYear
+ if ( child.getInceptionYear() == null )
+ {
+ child.setInceptionYear( parent.getInceptionYear() );
+ }
+
+ // url
+ if ( child.getUrl() == null )
+ {
+ if ( parent.getUrl() != null )
+ {
+ child.setUrl( appendPath( parent.getUrl(), child.getArtifactId(), childPathAdjustment, appendPaths ) );
+ }
+ else
+ {
+ child.setUrl( parent.getUrl() );
+ }
+ }
+
+ assembleDistributionInheritence( child, parent, childPathAdjustment, appendPaths );
+
+ // issueManagement
+ if ( child.getIssueManagement() == null )
+ {
+ child.setIssueManagement( parent.getIssueManagement() );
+ }
+
+ // description
+ if ( child.getDescription() == null )
+ {
+ child.setDescription( parent.getDescription() );
+ }
+
+ // Organization
+ if ( child.getOrganization() == null )
+ {
+ child.setOrganization( parent.getOrganization() );
+ }
+
+ // Scm
+ assembleScmInheritance( child, parent, childPathAdjustment, appendPaths );
+
+ // ciManagement
+ if ( child.getCiManagement() == null )
+ {
+ child.setCiManagement( parent.getCiManagement() );
+ }
+
+ // developers
+ if ( child.getDevelopers().size() == 0 )
+ {
+ child.setDevelopers( parent.getDevelopers() );
+ }
+
+ // licenses
+ if ( child.getLicenses().size() == 0 )
+ {
+ child.setLicenses( parent.getLicenses() );
+ }
+
+ // developers
+ if ( child.getContributors().size() == 0 )
+ {
+ child.setContributors( parent.getContributors() );
+ }
+
+ // mailingLists
+ if ( child.getMailingLists().size() == 0 )
+ {
+ child.setMailingLists( parent.getMailingLists() );
+ }
+
+ // Build
+ assembleBuildInheritance( child, parent );
+
+ assembleDependencyInheritance( child, parent );
+
+ child.setRepositories( ModelUtils.mergeRepositoryLists( child.getRepositories(), parent.getRepositories() ) );
+// child.setPluginRepositories(
+// ModelUtils.mergeRepositoryLists( child.getPluginRepositories(), parent.getPluginRepositories() ) );
+
+ assembleReportingInheritance( child, parent );
+
+ assembleDependencyManagementInheritance( child, parent );
+
+ Properties props = new Properties();
+ props.putAll( parent.getProperties() );
+ props.putAll( child.getProperties() );
+
+ child.setProperties( props );
+ }
+
+ // TODO: Remove this!
+ @SuppressWarnings( "unchecked" )
+ private void assembleDependencyManagementInheritance( Model child, Model parent )
+ {
+ DependencyManagement parentDepMgmt = parent.getDependencyManagement();
+
+ DependencyManagement childDepMgmt = child.getDependencyManagement();
+
+ if ( parentDepMgmt != null )
+ {
+ if ( childDepMgmt == null )
+ {
+ child.setDependencyManagement( parentDepMgmt );
+ }
+ else
+ {
+ List<Dependency> childDeps = childDepMgmt.getDependencies();
+
+ Map<String, Dependency> mappedChildDeps = new TreeMap<String, Dependency>();
+ for ( Dependency dep : childDeps )
+ {
+ mappedChildDeps.put( dep.getManagementKey(), dep );
+ }
+
+ for ( Dependency dep : parentDepMgmt.getDependencies() )
+ {
+ if ( !mappedChildDeps.containsKey( dep.getManagementKey() ) )
+ {
+ childDepMgmt.addDependency( dep );
+ }
+ }
+ }
+ }
+ }
+
+ private void assembleReportingInheritance( Model child, Model parent )
+ {
+ // Reports :: aggregate
+ Reporting childReporting = child.getReporting();
+ Reporting parentReporting = parent.getReporting();
+
+ if ( parentReporting != null )
+ {
+ if ( childReporting == null )
+ {
+ childReporting = new Reporting();
+ child.setReporting( childReporting );
+ }
+
+ childReporting.setExcludeDefaults( parentReporting.isExcludeDefaults() );
+
+ if ( StringUtils.isEmpty( childReporting.getOutputDirectory() ) )
+ {
+ childReporting.setOutputDirectory( parentReporting.getOutputDirectory() );
+ }
+
+ mergeReportPluginLists( childReporting, parentReporting, true );
+ }
+ }
+
+ private static void mergeReportPluginLists( Reporting child, Reporting parent, boolean handleAsInheritance )
+ {
+ if ( ( child == null ) || ( parent == null ) )
+ {
+ // nothing to do.
+ return;
+ }
+
+ List<ReportPlugin> parentPlugins = parent.getPlugins();
+
+ if ( ( parentPlugins != null ) && !parentPlugins.isEmpty() )
+ {
+ Map<String, ReportPlugin> assembledPlugins = new TreeMap<String, ReportPlugin>();
+
+ Map<String, ReportPlugin> childPlugins = child.getReportPluginsAsMap();
+
+ for ( ReportPlugin parentPlugin : parentPlugins )
+ {
+ String parentInherited = parentPlugin.getInherited();
+
+ if ( !handleAsInheritance || ( parentInherited == null ) || Boolean.valueOf( parentInherited ) )
+ {
+
+ ReportPlugin assembledPlugin = parentPlugin;
+
+ ReportPlugin childPlugin = childPlugins.get( parentPlugin.getKey() );
+
+ if ( childPlugin != null )
+ {
+ assembledPlugin = childPlugin;
+
+ mergeReportPluginDefinitions( childPlugin, parentPlugin, handleAsInheritance );
+ }
+
+ if ( handleAsInheritance && ( parentInherited == null ) )
+ {
+ assembledPlugin.unsetInheritanceApplied();
+ }
+
+ assembledPlugins.put( assembledPlugin.getKey(), assembledPlugin );
+ }
+ }
+
+ for ( ReportPlugin childPlugin : childPlugins.values() )
+ {
+ if ( !assembledPlugins.containsKey( childPlugin.getKey() ) )
+ {
+ assembledPlugins.put( childPlugin.getKey(), childPlugin );
+ }
+ }
+
+ child.setPlugins( new ArrayList<ReportPlugin>( assembledPlugins.values() ) );
+
+ child.flushReportPluginMap();
+ }
+ }
+
+ private static void mergeReportSetDefinitions( ReportSet child, ReportSet parent )
+ {
+ List<String> parentReports = parent.getReports();
+ List<String> childReports = child.getReports();
+
+ List<String> reports = new ArrayList<String>();
+
+ if ( ( childReports != null ) && !childReports.isEmpty() )
+ {
+ reports.addAll( childReports );
+ }
+
+ if ( parentReports != null )
+ {
+ for ( String report : parentReports )
+ {
+ if ( !reports.contains( report ) )
+ {
+ reports.add( report );
+ }
+ }
+ }
+
+ child.setReports( reports );
+
+ Xpp3Dom childConfiguration = (Xpp3Dom) child.getConfiguration();
+ Xpp3Dom parentConfiguration = (Xpp3Dom) parent.getConfiguration();
+
+ childConfiguration = Xpp3Dom.mergeXpp3Dom( childConfiguration, parentConfiguration );
+
+ child.setConfiguration( childConfiguration );
+ }
+
+
+ public static void mergeReportPluginDefinitions( ReportPlugin child, ReportPlugin parent,
+ boolean handleAsInheritance )
+ {
+ if ( ( child == null ) || ( parent == null ) )
+ {
+ // nothing to do.
+ return;
+ }
+
+ if ( ( child.getVersion() == null ) && ( parent.getVersion() != null ) )
+ {
+ child.setVersion( parent.getVersion() );
+ }
+
+ // from here to the end of the method is dealing with merging of the <executions/> section.
+ String parentInherited = parent.getInherited();
+
+ boolean parentIsInherited = ( parentInherited == null ) || Boolean.valueOf( parentInherited );
+
+ List<ReportSet> parentReportSets = parent.getReportSets();
+
+ if ( ( parentReportSets != null ) && !parentReportSets.isEmpty() )
+ {
+ Map<String, ReportSet> assembledReportSets = new TreeMap<String, ReportSet>();
+
+ Map<String, ReportSet> childReportSets = child.getReportSetsAsMap();
+
+ for ( Object parentReportSet1 : parentReportSets )
+ {
+ ReportSet parentReportSet = (ReportSet) parentReportSet1;
+
+ if ( !handleAsInheritance || parentIsInherited )
+ {
+ ReportSet assembledReportSet = parentReportSet;
+
+ ReportSet childReportSet = childReportSets.get( parentReportSet.getId() );
+
+ if ( childReportSet != null )
+ {
+ mergeReportSetDefinitions( childReportSet, parentReportSet );
+
+ assembledReportSet = childReportSet;
+ }
+ else if ( handleAsInheritance && ( parentInherited == null ) )
+ {
+ parentReportSet.unsetInheritanceApplied();
+ }
+
+ assembledReportSets.put( assembledReportSet.getId(), assembledReportSet );
+ }
+ }
+
+ for ( Map.Entry<String, ReportSet> entry : childReportSets.entrySet() )
+ {
+ String id = entry.getKey();
+
+ if ( !assembledReportSets.containsKey( id ) )
+ {
+ assembledReportSets.put( id, entry.getValue() );
+ }
+ }
+
+ child.setReportSets( new ArrayList<ReportSet>( assembledReportSets.values() ) );
+
+ child.flushReportSetMap();
+ }
+
+ }
+
+ // TODO: Remove this!
+ @SuppressWarnings( "unchecked" )
+ private void assembleDependencyInheritance( Model child, Model parent )
+ {
+ Map<String, Dependency> depsMap = new LinkedHashMap<String, Dependency>();
+
+ List<Dependency> deps = parent.getDependencies();
+
+ if ( deps != null )
+ {
+ for ( Dependency dependency : deps )
+ {
+ depsMap.put( dependency.getManagementKey(), dependency );
+ }
+ }
+
+ deps = child.getDependencies();
+
+ if ( deps != null )
+ {
+ for ( Dependency dependency : deps )
+ {
+ depsMap.put( dependency.getManagementKey(), dependency );
+ }
+ }
+
+ child.setDependencies( new ArrayList<Dependency>( depsMap.values() ) );
+ }
+
+ private void assembleBuildInheritance( Model child, Model parent )
+ {
+ Build childBuild = child.getBuild();
+ Build parentBuild = parent.getBuild();
+
+ if ( parentBuild != null )
+ {
+ if ( childBuild == null )
+ {
+ childBuild = new Build();
+ child.setBuild( childBuild );
+ }
+
+ assembleBuildInheritance( childBuild, parentBuild, true );
+ }
+ }
+
+ private void assembleDistributionInheritence( Model child, Model parent, String childPathAdjustment,
+ boolean appendPaths )
+ {
+ if ( parent.getDistributionManagement() != null )
+ {
+ DistributionManagement parentDistMgmt = parent.getDistributionManagement();
+
+ DistributionManagement childDistMgmt = child.getDistributionManagement();
+
+ if ( childDistMgmt == null )
+ {
+ childDistMgmt = new DistributionManagement();
+
+ child.setDistributionManagement( childDistMgmt );
+ }
+
+ if ( childDistMgmt.getSite() == null )
+ {
+ if ( parentDistMgmt.getSite() != null )
+ {
+ Site site = new Site();
+
+ childDistMgmt.setSite( site );
+
+ site.setId( parentDistMgmt.getSite().getId() );
+
+ site.setName( parentDistMgmt.getSite().getName() );
+
+ site.setUrl( parentDistMgmt.getSite().getUrl() );
+
+ if ( site.getUrl() != null )
+ {
+ site.setUrl(
+ appendPath( site.getUrl(), child.getArtifactId(), childPathAdjustment, appendPaths ) );
+ }
+ }
+ }
+
+ if ( childDistMgmt.getRepository() == null )
+ {
+ if ( parentDistMgmt.getRepository() != null )
+ {
+ DeploymentRepository repository = copyDistributionRepository( parentDistMgmt.getRepository() );
+ childDistMgmt.setRepository( repository );
+ }
+ }
+
+ if ( childDistMgmt.getSnapshotRepository() == null )
+ {
+ if ( parentDistMgmt.getSnapshotRepository() != null )
+ {
+ DeploymentRepository repository =
+ copyDistributionRepository( parentDistMgmt.getSnapshotRepository() );
+ childDistMgmt.setSnapshotRepository( repository );
+ }
+ }
+
+ if ( StringUtils.isEmpty( childDistMgmt.getDownloadUrl() ) )
+ {
+ childDistMgmt.setDownloadUrl( parentDistMgmt.getDownloadUrl() );
+ }
+
+ // NOTE: We SHOULD NOT be inheriting status, since this is an assessment of the POM quality.
+ // NOTE: We SHOULD NOT be inheriting relocation, since this relates to a single POM
+ }
+ }
+
+ private static DeploymentRepository copyDistributionRepository( DeploymentRepository parentRepository )
+ {
+ DeploymentRepository repository = new DeploymentRepository();
+
+ repository.setId( parentRepository.getId() );
+
+ repository.setName( parentRepository.getName() );
+
+ repository.setUrl( parentRepository.getUrl() );
+
+ repository.setLayout( parentRepository.getLayout() );
+
+ repository.setUniqueVersion( parentRepository.isUniqueVersion() );
+
+ return repository;
+ }
+
+ // TODO: This should eventually be migrated to DefaultPathTranslator.
+ protected String appendPath( String parentPath, String childPath, String pathAdjustment, boolean appendPaths )
+ {
+ String uncleanPath = parentPath;
+
+ if ( appendPaths )
+ {
+ if ( pathAdjustment != null )
+ {
+ uncleanPath += "/" + pathAdjustment;
+ }
+
+ if ( childPath != null )
+ {
+ uncleanPath += "/" + childPath;
+ }
+ }
+
+ String cleanedPath = "";
+
+ int protocolIdx = uncleanPath.indexOf( "://" );
+
+ if ( protocolIdx > -1 )
+ {
+ cleanedPath = uncleanPath.substring( 0, protocolIdx + 3 );
+ uncleanPath = uncleanPath.substring( protocolIdx + 3 );
+ }
+
+ if ( uncleanPath.startsWith( "/" ) )
+ {
+ cleanedPath += "/";
+ }
+
+ return cleanedPath + resolvePath( uncleanPath );
+ }
+
+ // TODO: Move this to plexus-utils' PathTool.
+ private static String resolvePath( String uncleanPath )
+ {
+ LinkedList<String> pathElements = new LinkedList<String>();
+
+ StringTokenizer tokenizer = new StringTokenizer( uncleanPath, "/" );
+
+ while ( tokenizer.hasMoreTokens() )
+ {
+ String token = tokenizer.nextToken();
+
+ if ( token.equals( "" ) )
+ {
+ // Empty path entry ("...//.."), remove.
+ }
+ else if ( token.equals( ".." ) )
+ {
+ if ( pathElements.isEmpty() )
+ {
+ // FIXME: somehow report to the user
+ // that there are too many '..' elements.
+ // For now, ignore the extra '..'.
+ }
+ else
+ {
+ pathElements.removeLast();
+ }
+ }
+ else
+ {
+ pathElements.addLast( token );
+ }
+ }
+
+ StringBuilder cleanedPath = new StringBuilder();
+
+ while ( !pathElements.isEmpty() )
+ {
+ cleanedPath.append( pathElements.removeFirst() );
+ if ( !pathElements.isEmpty() )
+ {
+ cleanedPath.append( '/' );
+ }
+ }
+
+ return cleanedPath.toString();
+ }
+
+ private static void mergeExtensionLists( Build childBuild, Build parentBuild )
+ {
+ for ( Extension e : parentBuild.getExtensions() )
+ {
+ if ( !childBuild.getExtensions().contains( e ) )
+ {
+ childBuild.addExtension( e );
+ }
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java
new file mode 100644
index 00000000..ef4edca5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java
@@ -0,0 +1,41 @@
+package org.apache.maven.project.inheritance;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Model;
+
+/**
+ * @author Jason van Zyl
+ * @deprecated
+ */
+@Deprecated
+public interface ModelInheritanceAssembler
+{
+ String ROLE = ModelInheritanceAssembler.class.getName();
+
+ void assembleModelInheritance( Model child, Model parent, String childPathAdjustment );
+
+ void assembleModelInheritance( Model child, Model parent );
+
+ void assembleBuildInheritance( Build childBuild, Build parentBuild, boolean handleAsInheriance );
+
+ void copyModel( Model dest, Model source );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/AbstractStringBasedModelInterpolator.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/AbstractStringBasedModelInterpolator.java
new file mode 100644
index 00000000..dfc3deec
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/AbstractStringBasedModelInterpolator.java
@@ -0,0 +1,407 @@
+package org.apache.maven.project.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.apache.maven.project.DefaultProjectBuilderConfiguration;
+import org.apache.maven.project.ProjectBuilderConfiguration;
+import org.apache.maven.project.path.PathTranslator;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.interpolation.AbstractValueSource;
+import org.codehaus.plexus.interpolation.InterpolationException;
+import org.codehaus.plexus.interpolation.InterpolationPostProcessor;
+import org.codehaus.plexus.interpolation.Interpolator;
+import org.codehaus.plexus.interpolation.MapBasedValueSource;
+import org.codehaus.plexus.interpolation.ObjectBasedValueSource;
+import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor;
+import org.codehaus.plexus.interpolation.PrefixedObjectValueSource;
+import org.codehaus.plexus.interpolation.PrefixedValueSourceWrapper;
+import org.codehaus.plexus.interpolation.RecursionInterceptor;
+import org.codehaus.plexus.interpolation.ValueSource;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * Use a regular expression search to find and resolve expressions within the POM.
+ *
+ * @author jdcasey Created on Feb 3, 2005
+ * @todo Consolidate this logic with the PluginParameterExpressionEvaluator, minus deprecations/bans.
+ */
+@Deprecated
+public abstract class AbstractStringBasedModelInterpolator
+ extends AbstractLogEnabled
+ implements ModelInterpolator, Initializable
+{
+ private static final List<String> PROJECT_PREFIXES = Arrays.asList( "pom.", "project." );
+
+ private static final List<String> TRANSLATED_PATH_EXPRESSIONS;
+
+ static
+ {
+ List<String> translatedPrefixes = new ArrayList<String>();
+
+ // MNG-1927, MNG-2124, MNG-3355:
+ // If the build section is present and the project directory is non-null, we should make
+ // sure interpolation of the directories below uses translated paths.
+ // Afterward, we'll double back and translate any paths that weren't covered during interpolation via the
+ // code below...
+ translatedPrefixes.add( "build.directory" );
+ translatedPrefixes.add( "build.outputDirectory" );
+ translatedPrefixes.add( "build.testOutputDirectory" );
+ translatedPrefixes.add( "build.sourceDirectory" );
+ translatedPrefixes.add( "build.testSourceDirectory" );
+ translatedPrefixes.add( "build.scriptSourceDirectory" );
+ translatedPrefixes.add( "reporting.outputDirectory" );
+
+ TRANSLATED_PATH_EXPRESSIONS = translatedPrefixes;
+ }
+
+ @Requirement
+ private PathTranslator pathTranslator;
+
+ private Interpolator interpolator;
+
+ private RecursionInterceptor recursionInterceptor;
+
+ // for testing.
+ protected AbstractStringBasedModelInterpolator( PathTranslator pathTranslator )
+ {
+ this.pathTranslator = pathTranslator;
+ }
+
+ /**
+ * @todo: Remove the throws clause.
+ * @throws IOException This exception is not thrown any more, and needs to be removed.
+ */
+ protected AbstractStringBasedModelInterpolator()
+ {
+ }
+
+ public Model interpolate( Model model, Map<String, ?> context )
+ throws ModelInterpolationException
+ {
+ return interpolate( model, context, true );
+ }
+
+ /**
+ * Serialize the inbound Model instance to a StringWriter, perform the regex replacement to resolve
+ * POM expressions, then re-parse into the resolved Model instance.
+ * <br/>
+ * <b>NOTE:</b> This will result in a different instance of Model being returned!!!
+ *
+ * @param model The inbound Model instance, to serialize and reference for expression resolution
+ * @param context The other context map to be used during resolution
+ * @return The resolved instance of the inbound Model. This is a different instance!
+ *
+ * @deprecated Use {@link ModelInterpolator#interpolate(Model, File, ProjectBuilderConfiguration, boolean)} instead.
+ */
+ public Model interpolate( Model model, Map<String, ?> context, boolean strict )
+ throws ModelInterpolationException
+ {
+ Properties props = new Properties();
+ props.putAll( context );
+
+ return interpolate( model,
+ null,
+ new DefaultProjectBuilderConfiguration().setExecutionProperties( props ),
+ true );
+ }
+
+ public Model interpolate( Model model,
+ File projectDir,
+ ProjectBuilderConfiguration config,
+ boolean debugEnabled )
+ throws ModelInterpolationException
+ {
+ StringWriter sWriter = new StringWriter( 1024 );
+
+ MavenXpp3Writer writer = new MavenXpp3Writer();
+ try
+ {
+ writer.write( sWriter, model );
+ }
+ catch ( IOException e )
+ {
+ throw new ModelInterpolationException( "Cannot serialize project model for interpolation.", e );
+ }
+
+ String serializedModel = sWriter.toString();
+ serializedModel = interpolate( serializedModel, model, projectDir, config, debugEnabled );
+
+ StringReader sReader = new StringReader( serializedModel );
+
+ MavenXpp3Reader modelReader = new MavenXpp3Reader();
+ try
+ {
+ model = modelReader.read( sReader );
+ }
+ catch ( IOException e )
+ {
+ throw new ModelInterpolationException(
+ "Cannot read project model from interpolating filter of serialized version.", e );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new ModelInterpolationException(
+ "Cannot read project model from interpolating filter of serialized version.", e );
+ }
+
+ return model;
+ }
+
+ /**
+ * Interpolates all expressions in the src parameter.
+ * <p>
+ * The algorithm used for each expression is:
+ * <ul>
+ * <li>If it starts with either "pom." or "project.", the expression is evaluated against the model.</li>
+ * <li>If the value is null, get the value from the context.</li>
+ * <li>If the value is null, but the context contains the expression, don't replace the expression string
+ * with the value, and continue to find other expressions.</li>
+ * <li>If the value is null, get it from the model properties.</li>
+ * <li>
+ * @param overrideContext
+ * @param outputDebugMessages
+ */
+ public String interpolate( String src,
+ Model model,
+ final File projectDir,
+ ProjectBuilderConfiguration config,
+ boolean debug )
+ throws ModelInterpolationException
+ {
+ try
+ {
+ List<ValueSource> valueSources = createValueSources( model, projectDir, config );
+ List<InterpolationPostProcessor> postProcessors = createPostProcessors( model, projectDir, config );
+
+ return interpolateInternal( src, valueSources, postProcessors, debug );
+ }
+ finally
+ {
+ interpolator.clearAnswers();
+ }
+ }
+
+ protected List<ValueSource> createValueSources( final Model model, final File projectDir,
+ final ProjectBuilderConfiguration config )
+ {
+ String timestampFormat = DEFAULT_BUILD_TIMESTAMP_FORMAT;
+
+ Properties modelProperties = model.getProperties();
+ if ( modelProperties != null )
+ {
+ timestampFormat = modelProperties.getProperty( BUILD_TIMESTAMP_FORMAT_PROPERTY, timestampFormat );
+ }
+
+ ValueSource modelValueSource1 = new PrefixedObjectValueSource( PROJECT_PREFIXES, model, false );
+ ValueSource modelValueSource2 = new ObjectBasedValueSource( model );
+
+ ValueSource basedirValueSource = new PrefixedValueSourceWrapper( new AbstractValueSource( false )
+ {
+ public Object getValue( String expression )
+ {
+ if ( projectDir != null && "basedir".equals( expression ) )
+ {
+ return projectDir.getAbsolutePath();
+ }
+ return null;
+ }
+ }, PROJECT_PREFIXES, true );
+ ValueSource baseUriValueSource = new PrefixedValueSourceWrapper( new AbstractValueSource( false )
+ {
+ public Object getValue( String expression )
+ {
+ if ( projectDir != null && "baseUri".equals( expression ) )
+ {
+ return projectDir.getAbsoluteFile().toURI().toString();
+ }
+ return null;
+ }
+ }, PROJECT_PREFIXES, false );
+
+ List<ValueSource> valueSources = new ArrayList<ValueSource>( 9 );
+
+ // NOTE: Order counts here!
+ valueSources.add( basedirValueSource );
+ valueSources.add( baseUriValueSource );
+ valueSources.add( new BuildTimestampValueSource( config.getBuildStartTime(), timestampFormat ) );
+ valueSources.add( modelValueSource1 );
+ valueSources.add( new MapBasedValueSource( config.getUserProperties() ) );
+ valueSources.add( new MapBasedValueSource( modelProperties ) );
+ valueSources.add( new MapBasedValueSource( config.getExecutionProperties() ) );
+ valueSources.add( new AbstractValueSource( false )
+ {
+ public Object getValue( String expression )
+ {
+ return config.getExecutionProperties().getProperty( "env." + expression );
+ }
+ } );
+ valueSources.add( modelValueSource2 );
+
+ return valueSources;
+ }
+
+ protected List<InterpolationPostProcessor> createPostProcessors( final Model model, final File projectDir,
+ final ProjectBuilderConfiguration config )
+ {
+ return Collections.singletonList( (InterpolationPostProcessor) new PathTranslatingPostProcessor(
+ PROJECT_PREFIXES,
+ TRANSLATED_PATH_EXPRESSIONS,
+ projectDir,
+ pathTranslator ) );
+ }
+
+ @SuppressWarnings( "unchecked" )
+ protected String interpolateInternal( String src, List<ValueSource> valueSources,
+ List<InterpolationPostProcessor> postProcessors, boolean debug )
+ throws ModelInterpolationException
+ {
+ if ( !src.contains( "${" ) )
+ {
+ return src;
+ }
+
+ Logger logger = getLogger();
+
+ String result = src;
+ synchronized ( this )
+ {
+
+ for ( ValueSource vs : valueSources )
+ {
+ interpolator.addValueSource( vs );
+ }
+
+ for ( InterpolationPostProcessor postProcessor : postProcessors )
+ {
+ interpolator.addPostProcessor( postProcessor );
+ }
+
+ try
+ {
+ try
+ {
+ result = interpolator.interpolate( result, recursionInterceptor );
+ }
+ catch ( InterpolationException e )
+ {
+ throw new ModelInterpolationException( e.getMessage(), e );
+ }
+
+ if ( debug )
+ {
+ List<Object> feedback = interpolator.getFeedback();
+ if ( feedback != null && !feedback.isEmpty() )
+ {
+ logger.debug( "Maven encountered the following problems during initial POM interpolation:" );
+
+ Object last = null;
+ for ( Object next : feedback )
+ {
+ if ( next instanceof Throwable )
+ {
+ if ( last == null )
+ {
+ logger.debug( "", ( (Throwable) next ) );
+ }
+ else
+ {
+ logger.debug( String.valueOf( last ), ( (Throwable) next ) );
+ }
+ }
+ else
+ {
+ if ( last != null )
+ {
+ logger.debug( String.valueOf( last ) );
+ }
+
+ last = next;
+ }
+ }
+
+ if ( last != null )
+ {
+ logger.debug( String.valueOf( last ) );
+ }
+ }
+ }
+
+ interpolator.clearFeedback();
+ }
+ finally
+ {
+ for ( ValueSource vs : valueSources )
+ {
+ interpolator.removeValuesSource( vs );
+ }
+
+ for ( InterpolationPostProcessor postProcessor : postProcessors )
+ {
+ interpolator.removePostProcessor( postProcessor );
+ }
+ }
+ }
+
+ return result;
+ }
+
+ protected RecursionInterceptor getRecursionInterceptor()
+ {
+ return recursionInterceptor;
+ }
+
+ protected void setRecursionInterceptor( RecursionInterceptor recursionInterceptor )
+ {
+ this.recursionInterceptor = recursionInterceptor;
+ }
+
+ protected abstract Interpolator createInterpolator();
+
+ public void initialize()
+ throws InitializationException
+ {
+ interpolator = createInterpolator();
+ recursionInterceptor = new PrefixAwareRecursionInterceptor( PROJECT_PREFIXES );
+ }
+
+ protected final Interpolator getInterpolator()
+ {
+ return interpolator;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/BuildTimestampValueSource.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/BuildTimestampValueSource.java
new file mode 100644
index 00000000..f6319fa6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/BuildTimestampValueSource.java
@@ -0,0 +1,63 @@
+package org.apache.maven.project.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.codehaus.plexus.interpolation.AbstractValueSource;
+
+/**
+ *
+ */
+@Deprecated
+public class BuildTimestampValueSource
+ extends AbstractValueSource
+{
+
+ private final Date startTime;
+
+ private final String format;
+
+ private String formattedDate;
+
+ public BuildTimestampValueSource( Date startTime, String format )
+ {
+ super( false );
+ this.startTime = startTime;
+ this.format = format;
+ }
+
+ public Object getValue( String expression )
+ {
+ if ( "build.timestamp".equals( expression ) || "maven.build.timestamp".equals( expression ) )
+ {
+ if ( formattedDate == null && startTime != null )
+ {
+ formattedDate = new SimpleDateFormat( format ).format( startTime );
+ }
+
+ return formattedDate;
+ }
+
+ return null;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolationException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolationException.java
new file mode 100644
index 00000000..5b02880b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolationException.java
@@ -0,0 +1,72 @@
+package org.apache.maven.project.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author jdcasey
+ * <p/>
+ * Created on Feb 2, 2005
+ */
+@SuppressWarnings( "serial" )
+@Deprecated
+public class ModelInterpolationException
+ extends Exception
+{
+ private String expression;
+
+ private String originalMessage;
+
+ public ModelInterpolationException( String message )
+ {
+ super( message );
+ }
+
+ public ModelInterpolationException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ public ModelInterpolationException( String expression, String message, Throwable cause )
+ {
+ super( "The POM expression: " + expression + " could not be evaluated. Reason: " + message, cause );
+
+ this.expression = expression;
+ this.originalMessage = message;
+ }
+
+ public ModelInterpolationException( String expression, String message )
+ {
+ super( "The POM expression: " + expression + " could not be evaluated. Reason: " + message );
+
+ this.expression = expression;
+ this.originalMessage = message;
+ }
+
+ public String getExpression()
+ {
+ return expression;
+ }
+
+ public String getOriginalMessage()
+ {
+ return originalMessage;
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java
new file mode 100644
index 00000000..e1556eaf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java
@@ -0,0 +1,66 @@
+package org.apache.maven.project.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.project.ProjectBuilderConfiguration;
+
+import java.io.File;
+import java.util.Map;
+
+/**
+ * @author jdcasey
+ * <p/>
+ * Created on Feb 2, 2005
+ */
+@Deprecated
+public interface ModelInterpolator
+{
+ String DEFAULT_BUILD_TIMESTAMP_FORMAT = "yyyyMMdd-HHmm";
+
+ String BUILD_TIMESTAMP_FORMAT_PROPERTY = "maven.build.timestamp.format";
+
+ String ROLE = ModelInterpolator.class.getName();
+
+ /**
+ * @deprecated Use {@link ModelInterpolator#interpolate(Model, File, ProjectBuilderConfiguration, boolean)} instead.
+ */
+ Model interpolate( Model project, Map<String, ?> context )
+ throws ModelInterpolationException;
+
+ /**
+ * @deprecated Use {@link ModelInterpolator#interpolate(Model, File, ProjectBuilderConfiguration, boolean)} instead.
+ */
+ Model interpolate( Model model, Map<String, ?> context, boolean strict )
+ throws ModelInterpolationException;
+
+ Model interpolate( Model model,
+ File projectDir,
+ ProjectBuilderConfiguration config,
+ boolean debugEnabled )
+ throws ModelInterpolationException;
+
+ String interpolate( String src,
+ Model model,
+ File projectDir,
+ ProjectBuilderConfiguration config,
+ boolean debugEnabled )
+ throws ModelInterpolationException;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/PathTranslatingPostProcessor.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/PathTranslatingPostProcessor.java
new file mode 100644
index 00000000..da2ba056
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/PathTranslatingPostProcessor.java
@@ -0,0 +1,64 @@
+package org.apache.maven.project.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.project.path.PathTranslator;
+import org.codehaus.plexus.interpolation.InterpolationPostProcessor;
+import org.codehaus.plexus.interpolation.util.ValueSourceUtils;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ *
+ */
+@Deprecated
+public class PathTranslatingPostProcessor
+ implements InterpolationPostProcessor
+{
+
+ private final List<String> unprefixedPathKeys;
+ private final File projectDir;
+ private final PathTranslator pathTranslator;
+ private final List<String> expressionPrefixes;
+
+ public PathTranslatingPostProcessor( List<String> expressionPrefixes, List<String> unprefixedPathKeys,
+ File projectDir, PathTranslator pathTranslator )
+ {
+ this.expressionPrefixes = expressionPrefixes;
+ this.unprefixedPathKeys = unprefixedPathKeys;
+ this.projectDir = projectDir;
+ this.pathTranslator = pathTranslator;
+ }
+
+ public Object execute( String expression,
+ Object value )
+ {
+ expression = ValueSourceUtils.trimPrefix( expression, expressionPrefixes, true );
+
+ if ( projectDir != null && value != null && unprefixedPathKeys.contains( expression ) )
+ {
+ return pathTranslator.alignToBaseDirectory( String.valueOf( value ), projectDir );
+ }
+
+ return value;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java
new file mode 100644
index 00000000..4e251aee
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java
@@ -0,0 +1,58 @@
+package org.apache.maven.project.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.util.Properties;
+
+import org.apache.maven.project.path.PathTranslator;
+import org.codehaus.plexus.interpolation.Interpolator;
+import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
+
+/**
+ * Use a regular expression search to find and resolve expressions within the POM.
+ *
+ * @author jdcasey Created on Feb 3, 2005
+ * @todo Consolidate this logic with the PluginParameterExpressionEvaluator, minus deprecations/bans.
+ */
+@Deprecated
+public class RegexBasedModelInterpolator
+ extends AbstractStringBasedModelInterpolator
+{
+
+ public RegexBasedModelInterpolator()
+ throws IOException
+ {
+ }
+
+ public RegexBasedModelInterpolator( PathTranslator pathTranslator )
+ {
+ super( pathTranslator );
+ }
+
+ public RegexBasedModelInterpolator( Properties envars )
+ {
+ }
+
+ protected Interpolator createInterpolator()
+ {
+ return new RegexBasedInterpolator( true );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/StringSearchModelInterpolator.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/StringSearchModelInterpolator.java
new file mode 100644
index 00000000..864f57f0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/StringSearchModelInterpolator.java
@@ -0,0 +1,410 @@
+package org.apache.maven.project.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.project.ProjectBuilderConfiguration;
+import org.apache.maven.project.path.PathTranslator;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.interpolation.InterpolationPostProcessor;
+import org.codehaus.plexus.interpolation.Interpolator;
+import org.codehaus.plexus.interpolation.StringSearchInterpolator;
+import org.codehaus.plexus.interpolation.ValueSource;
+import org.codehaus.plexus.logging.Logger;
+
+import java.io.File;
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+@Deprecated
+@Component( role = ModelInterpolator.class )
+public class StringSearchModelInterpolator
+ extends AbstractStringBasedModelInterpolator
+{
+
+ private static final Map<Class<?>, Field[]> fieldsByClass = new WeakHashMap<Class<?>, Field[]>();
+ private static final Map<Class<?>, Boolean> fieldIsPrimitiveByClass = new WeakHashMap<Class<?>, Boolean>();
+
+ public StringSearchModelInterpolator()
+ {
+ }
+
+ public StringSearchModelInterpolator( PathTranslator pathTranslator )
+ {
+ super( pathTranslator );
+ }
+
+ public Model interpolate( Model model, File projectDir, ProjectBuilderConfiguration config, boolean debugEnabled )
+ throws ModelInterpolationException
+ {
+ interpolateObject( model, model, projectDir, config, debugEnabled );
+
+ return model;
+ }
+
+ protected void interpolateObject( Object obj, Model model, File projectDir, ProjectBuilderConfiguration config,
+ boolean debugEnabled )
+ throws ModelInterpolationException
+ {
+ try
+ {
+ List<ValueSource> valueSources = createValueSources( model, projectDir, config );
+ List<InterpolationPostProcessor> postProcessors = createPostProcessors( model, projectDir, config );
+
+ InterpolateObjectAction action =
+ new InterpolateObjectAction( obj, valueSources, postProcessors, debugEnabled,
+ this, getLogger() );
+
+ ModelInterpolationException error = AccessController.doPrivileged( action );
+
+ if ( error != null )
+ {
+ throw error;
+ }
+ }
+ finally
+ {
+ getInterpolator().clearAnswers();
+ }
+ }
+
+ protected Interpolator createInterpolator()
+ {
+ StringSearchInterpolator interpolator = new StringSearchInterpolator();
+ interpolator.setCacheAnswers( true );
+
+ return interpolator;
+ }
+
+ private static final class InterpolateObjectAction implements PrivilegedAction<ModelInterpolationException>
+ {
+
+ private final boolean debugEnabled;
+ private final LinkedList<Object> interpolationTargets;
+ private final StringSearchModelInterpolator modelInterpolator;
+ private final Logger logger;
+ private final List<ValueSource> valueSources;
+ private final List<InterpolationPostProcessor> postProcessors;
+
+ public InterpolateObjectAction( Object target, List<ValueSource> valueSources,
+ List<InterpolationPostProcessor> postProcessors, boolean debugEnabled,
+ StringSearchModelInterpolator modelInterpolator, Logger logger )
+ {
+ this.valueSources = valueSources;
+ this.postProcessors = postProcessors;
+ this.debugEnabled = debugEnabled;
+
+ this.interpolationTargets = new LinkedList<Object>();
+ interpolationTargets.add( target );
+
+ this.modelInterpolator = modelInterpolator;
+ this.logger = logger;
+ }
+
+ public ModelInterpolationException run()
+ {
+ while ( !interpolationTargets.isEmpty() )
+ {
+ Object obj = interpolationTargets.removeFirst();
+
+ try
+ {
+ traverseObjectWithParents( obj.getClass(), obj );
+ }
+ catch ( ModelInterpolationException e )
+ {
+ return e;
+ }
+ }
+
+ return null;
+ }
+
+ @SuppressWarnings( "unchecked" )
+ private void traverseObjectWithParents( Class<?> cls, Object target )
+ throws ModelInterpolationException
+ {
+ if ( cls == null )
+ {
+ return;
+ }
+
+
+ if ( cls.isArray() )
+ {
+ evaluateArray( target );
+ }
+ else if ( isQualifiedForInterpolation( cls ) )
+ {
+ Field[] fields = fieldsByClass.get( cls );
+ if ( fields == null )
+ {
+ fields = cls.getDeclaredFields();
+ fieldsByClass.put( cls, fields );
+ }
+
+ for ( Field field : fields )
+ {
+ Class<?> type = field.getType();
+ if ( isQualifiedForInterpolation( field, type ) )
+ {
+ boolean isAccessible = field.isAccessible();
+ field.setAccessible( true );
+ try
+ {
+ try
+ {
+ if ( String.class == type )
+ {
+ String value = (String) field.get( target );
+ if ( value != null )
+ {
+ String interpolated =
+ modelInterpolator.interpolateInternal( value, valueSources, postProcessors,
+ debugEnabled );
+
+ if ( !interpolated.equals( value ) )
+ {
+ field.set( target, interpolated );
+ }
+ }
+ }
+ else if ( Collection.class.isAssignableFrom( type ) )
+ {
+ Collection<Object> c = (Collection<Object>) field.get( target );
+ if ( c != null && !c.isEmpty() )
+ {
+ List<Object> originalValues = new ArrayList<Object>( c );
+ try
+ {
+ c.clear();
+ }
+ catch ( UnsupportedOperationException e )
+ {
+ if ( debugEnabled && logger != null )
+ {
+ logger.debug( "Skipping interpolation of field: " + field + " in: "
+ + cls.getName()
+ + "; it is an unmodifiable collection." );
+ }
+ continue;
+ }
+
+ for ( Object value : originalValues )
+ {
+ if ( value != null )
+ {
+ if ( String.class == value.getClass() )
+ {
+ String interpolated =
+ modelInterpolator.interpolateInternal( (String) value,
+ valueSources,
+ postProcessors,
+ debugEnabled );
+
+ if ( !interpolated.equals( value ) )
+ {
+ c.add( interpolated );
+ }
+ else
+ {
+ c.add( value );
+ }
+ }
+ else
+ {
+ c.add( value );
+ if ( value.getClass().isArray() )
+ {
+ evaluateArray( value );
+ }
+ else
+ {
+ interpolationTargets.add( value );
+ }
+ }
+ }
+ else
+ {
+ // add the null back in...not sure what else to do...
+ c.add( value );
+ }
+ }
+ }
+ }
+ else if ( Map.class.isAssignableFrom( type ) )
+ {
+ Map<Object, Object> m = (Map<Object, Object>) field.get( target );
+ if ( m != null && !m.isEmpty() )
+ {
+ for ( Map.Entry<Object, Object> entry : m.entrySet() )
+ {
+ Object value = entry.getValue();
+
+ if ( value != null )
+ {
+ if ( String.class == value.getClass() )
+ {
+ String interpolated =
+ modelInterpolator.interpolateInternal( (String) value,
+ valueSources,
+ postProcessors,
+ debugEnabled );
+
+ if ( !interpolated.equals( value ) )
+ {
+ try
+ {
+ entry.setValue( interpolated );
+ }
+ catch ( UnsupportedOperationException e )
+ {
+ if ( debugEnabled && logger != null )
+ {
+ logger.debug(
+ "Skipping interpolation of field: " + field
+ + " (key: " + entry.getKey() + ") in: "
+ + cls.getName()
+ + "; it is an unmodifiable collection." );
+ }
+ }
+ }
+ }
+ else
+ {
+ if ( value.getClass().isArray() )
+ {
+ evaluateArray( value );
+ }
+ else
+ {
+ interpolationTargets.add( value );
+ }
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ Object value = field.get( target );
+ if ( value != null )
+ {
+ if ( field.getType().isArray() )
+ {
+ evaluateArray( value );
+ }
+ else
+ {
+ interpolationTargets.add( value );
+ }
+ }
+ }
+ }
+ catch ( IllegalArgumentException e )
+ {
+ throw new ModelInterpolationException(
+ "Failed to interpolate field: " + field + " on class: " + cls.getName(), e );
+ }
+ catch ( IllegalAccessException e )
+ {
+ throw new ModelInterpolationException(
+ "Failed to interpolate field: " + field + " on class: " + cls.getName(), e );
+ }
+ }
+ finally
+ {
+ field.setAccessible( isAccessible );
+ }
+ }
+ }
+
+ traverseObjectWithParents( cls.getSuperclass(), target );
+ }
+ }
+
+ private boolean isQualifiedForInterpolation( Class<?> cls )
+ {
+ return !cls.getPackage().getName().startsWith( "java" );
+ }
+
+ private boolean isQualifiedForInterpolation( Field field, Class<?> fieldType )
+ {
+ if ( !fieldIsPrimitiveByClass.containsKey( fieldType ) )
+ {
+ fieldIsPrimitiveByClass.put( fieldType, fieldType.isPrimitive() );
+ }
+
+ if ( fieldIsPrimitiveByClass.get( fieldType ) )
+ {
+ return false;
+ }
+
+// if ( fieldType.isPrimitive() )
+// {
+// return false;
+// }
+
+ if ( "parent".equals( field.getName() ) )
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ private void evaluateArray( Object target )
+ throws ModelInterpolationException
+ {
+ int len = Array.getLength( target );
+ for ( int i = 0; i < len; i++ )
+ {
+ Object value = Array.get( target, i );
+ if ( value != null )
+ {
+ if ( String.class == value.getClass() )
+ {
+ String interpolated =
+ modelInterpolator.interpolateInternal( (String) value, valueSources, postProcessors,
+ debugEnabled );
+
+ if ( !interpolated.equals( value ) )
+ {
+ Array.set( target, i, interpolated );
+ }
+ }
+ else
+ {
+ interpolationTargets.add( value );
+ }
+ }
+ }
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/path/DefaultPathTranslator.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/path/DefaultPathTranslator.java
new file mode 100644
index 00000000..ece7c397
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/path/DefaultPathTranslator.java
@@ -0,0 +1,261 @@
+package org.apache.maven.project.path;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Reporting;
+import org.apache.maven.model.Resource;
+import org.codehaus.plexus.component.annotations.Component;
+
+@Deprecated
+@Component( role = PathTranslator.class )
+public class DefaultPathTranslator
+ implements PathTranslator
+{
+ private static final String[] BASEDIR_EXPRESSIONS = {"${basedir}", "${pom.basedir}", "${project.basedir}"};
+
+ public void alignToBaseDirectory( Model model, File basedir )
+ {
+ if ( basedir == null )
+ {
+ return;
+ }
+
+ Build build = model.getBuild();
+
+ if ( build != null )
+ {
+ build.setDirectory( alignToBaseDirectory( build.getDirectory(), basedir ) );
+
+ build.setSourceDirectory( alignToBaseDirectory( build.getSourceDirectory(), basedir ) );
+
+ build.setTestSourceDirectory( alignToBaseDirectory( build.getTestSourceDirectory(), basedir ) );
+
+ for ( Resource resource : build.getResources() )
+ {
+ resource.setDirectory( alignToBaseDirectory( resource.getDirectory(), basedir ) );
+ }
+
+ for ( Resource resource : build.getTestResources() )
+ {
+ resource.setDirectory( alignToBaseDirectory( resource.getDirectory(), basedir ) );
+ }
+
+ if ( build.getFilters() != null )
+ {
+ List<String> filters = new ArrayList<String>();
+ for ( String filter : build.getFilters() )
+ {
+ filters.add( alignToBaseDirectory( filter, basedir ) );
+ }
+ build.setFilters( filters );
+ }
+
+ build.setOutputDirectory( alignToBaseDirectory( build.getOutputDirectory(), basedir ) );
+
+ build.setTestOutputDirectory( alignToBaseDirectory( build.getTestOutputDirectory(), basedir ) );
+ }
+
+ Reporting reporting = model.getReporting();
+
+ if ( reporting != null )
+ {
+ reporting.setOutputDirectory( alignToBaseDirectory( reporting.getOutputDirectory(), basedir ) );
+ }
+ }
+
+ public String alignToBaseDirectory( String path, File basedir )
+ {
+ if ( basedir == null )
+ {
+ return path;
+ }
+
+ if ( path == null )
+ {
+ return null;
+ }
+
+ String s = stripBasedirToken( path );
+
+ File file = new File( s );
+ if ( file.isAbsolute() )
+ {
+ // path was already absolute, just normalize file separator and we're done
+ s = file.getPath();
+ }
+ else if ( file.getPath().startsWith( File.separator ) )
+ {
+ // drive-relative Windows path, don't align with project directory but with drive root
+ s = file.getAbsolutePath();
+ }
+ else
+ {
+ // an ordinary relative path, align with project directory
+ s = new File( new File( basedir, s ).toURI().normalize() ).getAbsolutePath();
+ }
+
+ return s;
+ }
+
+ private String stripBasedirToken( String s )
+ {
+ if ( s != null )
+ {
+ String basedirExpr = null;
+ for ( String BASEDIR_EXPRESSION : BASEDIR_EXPRESSIONS )
+ {
+ basedirExpr = BASEDIR_EXPRESSION;
+ if ( s.startsWith( basedirExpr ) )
+ {
+ break;
+ }
+ else
+ {
+ basedirExpr = null;
+ }
+ }
+
+ if ( basedirExpr != null )
+ {
+ if ( s.length() > basedirExpr.length() )
+ {
+ // Take out basedir expression and the leading slash
+ s = chopLeadingFileSeparator( s.substring( basedirExpr.length() ) );
+ }
+ else
+ {
+ s = ".";
+ }
+ }
+ }
+
+ return s;
+ }
+
+ /**
+ * Removes the leading directory separator from the specified filesystem path (if any). For platform-independent
+ * behavior, this method accepts both the forward slash and the backward slash as separator.
+ *
+ * @param path The filesystem path, may be <code>null</code>.
+ * @return The altered filesystem path or <code>null</code> if the input path was <code>null</code>.
+ */
+ private String chopLeadingFileSeparator( String path )
+ {
+ if ( path != null )
+ {
+ if ( path.startsWith( "/" ) || path.startsWith( "\\" ) )
+ {
+ path = path.substring( 1 );
+ }
+ }
+ return path;
+ }
+
+ public void unalignFromBaseDirectory( Model model, File basedir )
+ {
+ if ( basedir == null )
+ {
+ return;
+ }
+
+ Build build = model.getBuild();
+
+ if ( build != null )
+ {
+ build.setDirectory( unalignFromBaseDirectory( build.getDirectory(), basedir ) );
+
+ build.setSourceDirectory( unalignFromBaseDirectory( build.getSourceDirectory(), basedir ) );
+
+ build.setTestSourceDirectory( unalignFromBaseDirectory( build.getTestSourceDirectory(), basedir ) );
+
+ for ( Resource resource : build.getResources() )
+ {
+ resource.setDirectory( unalignFromBaseDirectory( resource.getDirectory(), basedir ) );
+ }
+
+ for ( Resource resource : build.getTestResources() )
+ {
+ resource.setDirectory( unalignFromBaseDirectory( resource.getDirectory(), basedir ) );
+ }
+
+ if ( build.getFilters() != null )
+ {
+ List<String> filters = new ArrayList<String>();
+ for ( String filter : build.getFilters() )
+ {
+ filters.add( unalignFromBaseDirectory( filter, basedir ) );
+ }
+ build.setFilters( filters );
+ }
+
+ build.setOutputDirectory( unalignFromBaseDirectory( build.getOutputDirectory(), basedir ) );
+
+ build.setTestOutputDirectory( unalignFromBaseDirectory( build.getTestOutputDirectory(), basedir ) );
+ }
+
+ Reporting reporting = model.getReporting();
+
+ if ( reporting != null )
+ {
+ reporting.setOutputDirectory( unalignFromBaseDirectory( reporting.getOutputDirectory(), basedir ) );
+ }
+ }
+
+ public String unalignFromBaseDirectory( String path, File basedir )
+ {
+ if ( basedir == null )
+ {
+ return path;
+ }
+
+ if ( path == null )
+ {
+ return null;
+ }
+
+ path = path.trim();
+
+ String base = basedir.getAbsolutePath();
+ if ( path.startsWith( base ) )
+ {
+ path = chopLeadingFileSeparator( path.substring( base.length() ) );
+ }
+
+ if ( path.length() <= 0 )
+ {
+ path = ".";
+ }
+
+ if ( !new File( path ).isAbsolute() )
+ {
+ path = path.replace( '\\', '/' );
+ }
+
+ return path;
+ }
+
+}
+
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java
new file mode 100644
index 00000000..0095f803
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java
@@ -0,0 +1,76 @@
+package org.apache.maven.project.validation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.DefaultModelBuildingRequest;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblem;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.building.ModelProblemCollectorRequest;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+/**
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
+ */
+@Component( role = ModelValidator.class )
+@Deprecated
+public class DefaultModelValidator
+ implements ModelValidator
+{
+
+ @Requirement
+ private org.apache.maven.model.validation.ModelValidator modelValidator;
+
+ public ModelValidationResult validate( Model model )
+ {
+ ModelValidationResult result = new ModelValidationResult();
+
+ ModelBuildingRequest request =
+ new DefaultModelBuildingRequest().setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 );
+
+ SimpleModelProblemCollector problems = new SimpleModelProblemCollector( result );
+
+ modelValidator.validateEffectiveModel( model, request, problems );
+
+ return result;
+ }
+
+ private static class SimpleModelProblemCollector
+ implements ModelProblemCollector
+ {
+
+ ModelValidationResult result;
+
+ public SimpleModelProblemCollector( ModelValidationResult result )
+ {
+ this.result = result;
+ }
+
+ public void add( ModelProblemCollectorRequest req )
+ {
+ if ( !ModelProblem.Severity.WARNING.equals( req.getSeverity() ) )
+ {
+ result.addMessage( req.getMessage() );
+ }
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/validation/ModelValidationResult.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/validation/ModelValidationResult.java
new file mode 100644
index 00000000..cb8c6012
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/validation/ModelValidationResult.java
@@ -0,0 +1,95 @@
+package org.apache.maven.project.validation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
+ */
+public class ModelValidationResult
+{
+
+ /** */
+ private static final String NEWLINE = System.getProperty( "line.separator" );
+
+ /** */
+ private List<String> messages;
+
+ public ModelValidationResult()
+ {
+ messages = new ArrayList<String>();
+ }
+
+ public int getMessageCount()
+ {
+ return messages.size();
+ }
+
+ public String getMessage( int i )
+ {
+ return messages.get( i );
+ }
+
+ public List<String> getMessages()
+ {
+ return Collections.unmodifiableList( messages );
+ }
+
+ public void addMessage( String message )
+ {
+ messages.add( message );
+ }
+
+ public String toString()
+ {
+ return render( "" );
+ }
+
+ public String render( String indentation )
+ {
+ if ( messages.size() == 0 )
+ {
+ return indentation + "There were no validation errors.";
+ }
+
+ StringBuilder message = new StringBuilder();
+
+// if ( messages.size() == 1 )
+// {
+// message.append( "There was 1 validation error: " );
+// }
+// else
+// {
+// message.append( "There was " + messages.size() + " validation errors: " + NEWLINE );
+// }
+//
+ for ( int i = 0; i < messages.size(); i++ )
+ {
+ message.append( indentation ).append( "[" ).append( i ).append( "] " ).append( messages.get( i ) ).append(
+ NEWLINE );
+ }
+
+ return message.toString();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/validation/ModelValidator.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/validation/ModelValidator.java
new file mode 100644
index 00000000..54fd04ca
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/validation/ModelValidator.java
@@ -0,0 +1,37 @@
+package org.apache.maven.project.validation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+
+/**
+ * Checks the model for missing or invalid values.
+ *
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
+ */
+@Deprecated
+public interface ModelValidator
+{
+
+ String ROLE = ModelValidator.class.getName();
+
+ ModelValidationResult validate( Model model );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/reporting/MavenReportException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/reporting/MavenReportException.java
new file mode 100644
index 00000000..af27a840
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/reporting/MavenReportException.java
@@ -0,0 +1,39 @@
+package org.apache.maven.reporting;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * An exception occurring during the execution of a Maven report.
+ *
+ * @author Brett Porter
+ * @author <a href="evenisse@apache.org">Emmanuel Venisse</a>
+ */
+public class MavenReportException extends Exception
+{
+ public MavenReportException( String msg )
+ {
+ super( msg );
+ }
+
+ public MavenReportException( String msg, Exception e )
+ {
+ super( msg, e );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorSelector.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorSelector.java
new file mode 100644
index 00000000..53e7bd4a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorSelector.java
@@ -0,0 +1,205 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.settings.Mirror;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.StringUtils;
+
+@Component( role = MirrorSelector.class )
+public class DefaultMirrorSelector
+ implements MirrorSelector
+{
+
+ private static final String WILDCARD = "*";
+
+ private static final String EXTERNAL_WILDCARD = "external:*";
+
+ public Mirror getMirror( ArtifactRepository repository, List<Mirror> mirrors )
+ {
+ String repoId = repository.getId();
+
+ if ( repoId != null && mirrors != null )
+ {
+ for ( Mirror mirror : mirrors )
+ {
+ if ( repoId.equals( mirror.getMirrorOf() ) && matchesLayout( repository, mirror ) )
+ {
+ return mirror;
+ }
+ }
+
+ for ( Mirror mirror : mirrors )
+ {
+ if ( matchPattern( repository, mirror.getMirrorOf() ) && matchesLayout( repository, mirror ) )
+ {
+ return mirror;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * This method checks if the pattern matches the originalRepository. Valid patterns: * =
+ * everything external:* = everything not on the localhost and not file based. repo,repo1 = repo
+ * or repo1 *,!repo1 = everything except repo1
+ *
+ * @param originalRepository to compare for a match.
+ * @param pattern used for match. Currently only '*' is supported.
+ * @return true if the repository is a match to this pattern.
+ */
+ static boolean matchPattern( ArtifactRepository originalRepository, String pattern )
+ {
+ boolean result = false;
+ String originalId = originalRepository.getId();
+
+ // simple checks first to short circuit processing below.
+ if ( WILDCARD.equals( pattern ) || pattern.equals( originalId ) )
+ {
+ result = true;
+ }
+ else
+ {
+ // process the list
+ String[] repos = pattern.split( "," );
+ for ( String repo : repos )
+ {
+ repo = repo.trim();
+ // see if this is a negative match
+ if ( repo.length() > 1 && repo.startsWith( "!" ) )
+ {
+ if ( repo.substring( 1 ).equals( originalId ) )
+ {
+ // explicitly exclude. Set result and stop processing.
+ result = false;
+ break;
+ }
+ }
+ // check for exact match
+ else if ( repo.equals( originalId ) )
+ {
+ result = true;
+ break;
+ }
+ // check for external:*
+ else if ( EXTERNAL_WILDCARD.equals( repo ) && isExternalRepo( originalRepository ) )
+ {
+ result = true;
+ // don't stop processing in case a future segment explicitly excludes this repo
+ }
+ else if ( WILDCARD.equals( repo ) )
+ {
+ result = true;
+ // don't stop processing in case a future segment explicitly excludes this repo
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Checks the URL to see if this repository refers to an external repository
+ *
+ * @param originalRepository
+ * @return true if external.
+ */
+ static boolean isExternalRepo( ArtifactRepository originalRepository )
+ {
+ try
+ {
+ URL url = new URL( originalRepository.getUrl() );
+ return !( url.getHost().equals( "localhost" ) || url.getHost().equals( "127.0.0.1" )
+ || url.getProtocol().equals( "file" ) );
+ }
+ catch ( MalformedURLException e )
+ {
+ // bad url just skip it here. It should have been validated already, but the wagon lookup will deal with it
+ return false;
+ }
+ }
+
+ static boolean matchesLayout( ArtifactRepository repository, Mirror mirror )
+ {
+ return matchesLayout( RepositoryUtils.getLayout( repository ), mirror.getMirrorOfLayouts() );
+ }
+
+ /**
+ * Checks whether the layouts configured for a mirror match with the layout of the repository.
+ *
+ * @param repoLayout The layout of the repository, may be {@code null}.
+ * @param mirrorLayout The layouts supported by the mirror, may be {@code null}.
+ * @return {@code true} if the layouts associated with the mirror match the layout of the original repository,
+ * {@code false} otherwise.
+ */
+ static boolean matchesLayout( String repoLayout, String mirrorLayout )
+ {
+ boolean result = false;
+
+ // simple checks first to short circuit processing below.
+ if ( StringUtils.isEmpty( mirrorLayout ) || WILDCARD.equals( mirrorLayout ) )
+ {
+ result = true;
+ }
+ else if ( mirrorLayout.equals( repoLayout ) )
+ {
+ result = true;
+ }
+ else
+ {
+ // process the list
+ String[] layouts = mirrorLayout.split( "," );
+ for ( String layout : layouts )
+ {
+ // see if this is a negative match
+ if ( layout.length() > 1 && layout.startsWith( "!" ) )
+ {
+ if ( layout.substring( 1 ).equals( repoLayout ) )
+ {
+ // explicitly exclude. Set result and stop processing.
+ result = false;
+ break;
+ }
+ }
+ // check for exact match
+ else if ( layout.equals( repoLayout ) )
+ {
+ result = true;
+ break;
+ }
+ else if ( WILDCARD.equals( layout ) )
+ {
+ result = true;
+ // don't stop processing in case a future segment explicitly excludes this repo
+ }
+ }
+ }
+
+ return result;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MavenArtifactMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MavenArtifactMetadata.java
new file mode 100644
index 00000000..c507bf70
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MavenArtifactMetadata.java
@@ -0,0 +1,119 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ *
+ */
+public class MavenArtifactMetadata
+{
+ public static final String DEFAULT_TYPE = "jar";
+
+ String groupId;
+ String artifactId;
+ String version;
+ String classifier;
+ String type;
+ String scope;
+
+ transient Object datum;
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public void setGroupId( String groupId )
+ {
+ this.groupId = groupId;
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ public void setArtifactId( String artifactId )
+ {
+ this.artifactId = artifactId;
+ }
+
+ public String getVersion()
+ {
+ return version;
+ }
+
+ public void setVersion( String version )
+ {
+ this.version = version;
+ }
+
+ public String getClassifier()
+ {
+ return classifier;
+ }
+
+ public void setClassifier( String classifier )
+ {
+ this.classifier = classifier;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+
+ public void setType( String type )
+ {
+ this.type = type;
+ }
+
+ public Object getDatum()
+ {
+ return datum;
+ }
+
+ public void setDatum( Object datum )
+ {
+ this.datum = datum;
+ }
+
+ public String getScope()
+ {
+ return scope;
+ }
+
+ public void setScope( String scope )
+ {
+ this.scope = scope;
+ }
+
+ @Override
+ public String toString()
+ {
+ return getGroupId() + ":" + getArtifactId() + ":" + getVersion() + ":"
+ + ( getClassifier() == null ? "" : getClassifier() ) + ":"
+ + ( getType() == null ? DEFAULT_TYPE : getType() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataGraph.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataGraph.java
new file mode 100644
index 00000000..fcaddd2c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataGraph.java
@@ -0,0 +1,96 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * This is the main graph data structure used by the RepositorySystem to present tree and graph objects.
+ *
+ * @author Oleg Gusakov
+ *
+ */
+public class MetadataGraph
+{
+ /** all graph nodes */
+ Collection<MetadataGraphNode> nodes;
+
+ /** entry point for tree-like structures */
+ MetadataGraphNode entry;
+
+ public MetadataGraph( MetadataGraphNode entry )
+ {
+ this();
+
+ this.entry = entry;
+ }
+
+ public MetadataGraph()
+ {
+ nodes = new ArrayList<MetadataGraphNode>( 64 );
+ }
+
+ public void addNode( MetadataGraphNode node )
+ {
+ nodes.add( node );
+ }
+
+ /**
+ * find a node by the GAV (metadata)
+ *
+ * @param md
+ * @return
+ */
+ public MetadataGraphNode findNode( MavenArtifactMetadata md )
+ {
+ for ( MetadataGraphNode mgn : nodes )
+ {
+ if ( mgn.metadata.equals( md ) )
+ {
+ return mgn;
+ }
+ }
+
+ MetadataGraphNode node = new MetadataGraphNode( md );
+ addNode( node );
+ return node;
+ }
+
+ /**
+ * getter
+ *
+ * @return
+ */
+ public MetadataGraphNode getEntry()
+ {
+ return entry;
+ }
+
+ /**
+ * getter
+ *
+ * @return
+ */
+ public Collection<MetadataGraphNode> getNodes()
+ {
+ return nodes;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataGraphNode.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataGraphNode.java
new file mode 100644
index 00000000..c8b9ab4e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataGraphNode.java
@@ -0,0 +1,101 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * MetadataGraph node - as it's a directed graph - holds adjacency lists for incident and exident nodes
+ *
+ * @author Oleg Gusakov
+ *
+ */
+public class MetadataGraphNode
+{
+ /** node payload */
+ MavenArtifactMetadata metadata;
+
+ /** nodes, incident to this (depend on me) */
+ List<MetadataGraphNode> inNodes;
+
+ /** nodes, exident to this (I depend on) */
+ List<MetadataGraphNode> exNodes;
+
+ public MetadataGraphNode()
+ {
+ inNodes = new ArrayList<MetadataGraphNode>( 4 );
+ exNodes = new ArrayList<MetadataGraphNode>( 8 );
+ }
+
+ public MetadataGraphNode( MavenArtifactMetadata metadata )
+ {
+ this();
+ this.metadata = metadata;
+ }
+
+ public MetadataGraphNode addIncident( MetadataGraphNode node )
+ {
+ inNodes.add( node );
+ return this;
+ }
+
+ public MetadataGraphNode addExident( MetadataGraphNode node )
+ {
+ exNodes.add( node );
+ return this;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( obj == null )
+ {
+ return false;
+ }
+
+ if ( MetadataGraphNode.class.isAssignableFrom( obj.getClass() ) )
+ {
+ MetadataGraphNode node2 = (MetadataGraphNode) obj;
+
+ if ( node2.metadata == null )
+ {
+ return metadata == null;
+ }
+
+ return metadata != null && metadata.toString().equals( node2.metadata.toString() );
+ }
+ else
+ {
+ return super.equals( obj );
+ }
+ }
+
+ @Override
+ public int hashCode()
+ {
+ if ( metadata == null )
+ {
+ return super.hashCode();
+ }
+
+ return metadata.toString().hashCode();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionRequest.java
new file mode 100644
index 00000000..c98dd053
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionRequest.java
@@ -0,0 +1,202 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ *
+ */
+public class MetadataResolutionRequest
+{
+ private MavenArtifactMetadata mad;
+
+ private String scope;
+
+ // Needs to go away
+ private Set<Artifact> artifactDependencies;
+
+ private ArtifactRepository localRepository;
+
+ private List<ArtifactRepository> remoteRepositories;
+
+ // This is like a filter but overrides all transitive versions
+ private Map managedVersionMap;
+
+ /** result type - flat list; the default */
+ private boolean asList = true;
+
+ /** result type - dirty tree */
+ private boolean asDirtyTree = false;
+
+ /** result type - resolved tree */
+ private boolean asResolvedTree = false;
+
+ /** result type - graph */
+ private boolean asGraph = false;
+
+ public MetadataResolutionRequest()
+ {
+ }
+
+ public MetadataResolutionRequest( MavenArtifactMetadata md, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ {
+ this.mad = md;
+ this.localRepository = localRepository;
+ this.remoteRepositories = remoteRepositories;
+ }
+
+ public MavenArtifactMetadata getArtifactMetadata()
+ {
+ return mad;
+ }
+
+ public MetadataResolutionRequest setArtifactMetadata( MavenArtifactMetadata md )
+ {
+ this.mad = md;
+
+ return this;
+ }
+
+ public MetadataResolutionRequest setArtifactDependencies( Set<Artifact> artifactDependencies )
+ {
+ this.artifactDependencies = artifactDependencies;
+
+ return this;
+ }
+
+ public Set<Artifact> getArtifactDependencies()
+ {
+ return artifactDependencies;
+ }
+
+ public ArtifactRepository getLocalRepository()
+ {
+ return localRepository;
+ }
+
+ public MetadataResolutionRequest setLocalRepository( ArtifactRepository localRepository )
+ {
+ this.localRepository = localRepository;
+
+ return this;
+ }
+
+ public List<ArtifactRepository> getRemoteRepostories()
+ {
+ return remoteRepositories;
+ }
+
+ public MetadataResolutionRequest setRemoteRepostories( List<ArtifactRepository> remoteRepostories )
+ {
+ this.remoteRepositories = remoteRepostories;
+
+ return this;
+ }
+
+ public Map getManagedVersionMap()
+ {
+ return managedVersionMap;
+ }
+
+ public MetadataResolutionRequest setManagedVersionMap( Map managedVersionMap )
+ {
+ this.managedVersionMap = managedVersionMap;
+
+ return this;
+ }
+
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder()
+ .append( "REQUEST: " ).append( "\n" )
+ .append( "artifact: " ).append( mad ).append( "\n" )
+ .append( artifactDependencies ).append( "\n" )
+ .append( "localRepository: " ).append( localRepository ).append( "\n" )
+ .append( "remoteRepositories: " ).append( remoteRepositories ).append( "\n" )
+ ;
+
+ return sb.toString();
+ }
+
+ public boolean isAsList()
+ {
+ return asList;
+ }
+
+ public MetadataResolutionRequest setAsList( boolean asList )
+ {
+ this.asList = asList;
+ return this;
+ }
+
+ public boolean isAsDirtyTree()
+ {
+ return asDirtyTree;
+ }
+
+ public MetadataResolutionRequest setAsDirtyTree( boolean asDirtyTree )
+ {
+ this.asDirtyTree = asDirtyTree;
+ return this;
+ }
+
+ public boolean isAsResolvedTree()
+ {
+ return asResolvedTree;
+ }
+
+ public MetadataResolutionRequest setAsResolvedTree( boolean asResolvedTree )
+ {
+ this.asResolvedTree = asResolvedTree;
+ return this;
+ }
+
+ public boolean isAsGraph()
+ {
+ return asGraph;
+ }
+
+ public MetadataResolutionRequest setAsGraph( boolean asGraph )
+ {
+ this.asGraph = asGraph;
+ return this;
+ }
+
+ public MetadataResolutionRequest setScope( String scope )
+ {
+ this.scope = scope;
+ return this;
+ }
+
+ public String getScope()
+ {
+ return scope;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionResult.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionResult.java
new file mode 100644
index 00000000..209c36fa
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionResult.java
@@ -0,0 +1,356 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.CyclicDependencyException;
+import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ *
+ */
+public class MetadataResolutionResult
+{
+ private Artifact originatingArtifact;
+
+ private List<Artifact> missingArtifacts;
+
+ // Exceptions
+
+ private List<Exception> exceptions;
+
+ private List<Exception> versionRangeViolations;
+
+ private List<ArtifactResolutionException> metadataResolutionExceptions;
+
+ private List<CyclicDependencyException> circularDependencyExceptions;
+
+ private List<ArtifactResolutionException> errorArtifactExceptions;
+
+ // file system errors
+
+ private List<ArtifactRepository> repositories;
+
+ private Set<Artifact> requestedArtifacts;
+
+ private Set<Artifact> artifacts;
+
+ private MetadataGraph dirtyTree;
+
+ private MetadataGraph resolvedTree;
+
+ private MetadataGraph resolvedGraph;
+
+ public Artifact getOriginatingArtifact()
+ {
+ return originatingArtifact;
+ }
+
+ public MetadataResolutionResult ListOriginatingArtifact( final Artifact originatingArtifact )
+ {
+ this.originatingArtifact = originatingArtifact;
+
+ return this;
+ }
+
+ public void addArtifact( Artifact artifact )
+ {
+ if ( artifacts == null )
+ {
+ artifacts = new LinkedHashSet<Artifact>();
+ }
+
+ artifacts.add( artifact );
+ }
+
+ public Set<Artifact> getArtifacts()
+ {
+ return artifacts;
+ }
+
+ public void addRequestedArtifact( Artifact artifact )
+ {
+ if ( requestedArtifacts == null )
+ {
+ requestedArtifacts = new LinkedHashSet<Artifact>();
+ }
+
+ requestedArtifacts.add( artifact );
+ }
+
+ public Set<Artifact> getRequestedArtifacts()
+ {
+ return requestedArtifacts;
+ }
+
+ public boolean hasMissingArtifacts()
+ {
+ return missingArtifacts != null && !missingArtifacts.isEmpty();
+ }
+
+ public List<Artifact> getMissingArtifacts()
+ {
+ return missingArtifacts == null ? Collections.<Artifact> emptyList() : missingArtifacts;
+ }
+
+ public MetadataResolutionResult addMissingArtifact( Artifact artifact )
+ {
+ missingArtifacts = initList( missingArtifacts );
+
+ missingArtifacts.add( artifact );
+
+ return this;
+ }
+
+ public MetadataResolutionResult setUnresolvedArtifacts( final List<Artifact> unresolvedArtifacts )
+ {
+ this.missingArtifacts = unresolvedArtifacts;
+
+ return this;
+ }
+
+ // ------------------------------------------------------------------------
+ // Exceptions
+ // ------------------------------------------------------------------------
+
+ public boolean hasExceptions()
+ {
+ return exceptions != null && !exceptions.isEmpty();
+ }
+
+ public List<Exception> getExceptions()
+ {
+ return exceptions == null ? Collections.<Exception> emptyList() : exceptions;
+ }
+
+ // ------------------------------------------------------------------------
+ // Version Range Violations
+ // ------------------------------------------------------------------------
+
+ public boolean hasVersionRangeViolations()
+ {
+ return versionRangeViolations != null;
+ }
+
+ /**
+ * @TODO this needs to accept a {@link OverConstrainedVersionException} as returned by
+ * {@link #getVersionRangeViolation(int)} but it's not used like that in
+ * {@link DefaultLegacyArtifactCollector}
+ */
+ public MetadataResolutionResult addVersionRangeViolation( Exception e )
+ {
+ versionRangeViolations = initList( versionRangeViolations );
+
+ versionRangeViolations.add( e );
+
+ exceptions = initList( exceptions );
+
+ exceptions.add( e );
+
+ return this;
+ }
+
+ public OverConstrainedVersionException getVersionRangeViolation( int i )
+ {
+ return (OverConstrainedVersionException) versionRangeViolations.get( i );
+ }
+
+ public List<Exception> getVersionRangeViolations()
+ {
+ return versionRangeViolations == null ? Collections.<Exception> emptyList() : versionRangeViolations;
+ }
+
+ // ------------------------------------------------------------------------
+ // Metadata Resolution Exceptions: ArtifactResolutionExceptions
+ // ------------------------------------------------------------------------
+
+ public boolean hasMetadataResolutionExceptions()
+ {
+ return metadataResolutionExceptions != null;
+ }
+
+ public MetadataResolutionResult addMetadataResolutionException( ArtifactResolutionException e )
+ {
+ metadataResolutionExceptions = initList( metadataResolutionExceptions );
+
+ metadataResolutionExceptions.add( e );
+
+ exceptions = initList( exceptions );
+
+ exceptions.add( e );
+
+ return this;
+ }
+
+ public ArtifactResolutionException getMetadataResolutionException( int i )
+ {
+ return metadataResolutionExceptions.get( i );
+ }
+
+ public List<ArtifactResolutionException> getMetadataResolutionExceptions()
+ {
+ return metadataResolutionExceptions == null ? Collections.<ArtifactResolutionException> emptyList()
+ : metadataResolutionExceptions;
+ }
+
+ // ------------------------------------------------------------------------
+ // ErrorArtifactExceptions: ArtifactResolutionExceptions
+ // ------------------------------------------------------------------------
+
+ public boolean hasErrorArtifactExceptions()
+ {
+ return errorArtifactExceptions != null;
+ }
+
+ public MetadataResolutionResult addError( Exception e )
+ {
+ if ( exceptions == null )
+ {
+ initList( exceptions );
+ }
+
+ exceptions.add( e );
+
+ return this;
+ }
+
+ public List<ArtifactResolutionException> getErrorArtifactExceptions()
+ {
+ if ( errorArtifactExceptions == null )
+ {
+ return Collections.emptyList();
+ }
+
+ return errorArtifactExceptions;
+ }
+
+ // ------------------------------------------------------------------------
+ // Circular Dependency Exceptions
+ // ------------------------------------------------------------------------
+
+ public boolean hasCircularDependencyExceptions()
+ {
+ return circularDependencyExceptions != null;
+ }
+
+ public MetadataResolutionResult addCircularDependencyException( CyclicDependencyException e )
+ {
+ circularDependencyExceptions = initList( circularDependencyExceptions );
+
+ circularDependencyExceptions.add( e );
+
+ exceptions = initList( exceptions );
+
+ exceptions.add( e );
+
+ return this;
+ }
+
+ public CyclicDependencyException getCircularDependencyException( int i )
+ {
+ return circularDependencyExceptions.get( i );
+ }
+
+ public List<CyclicDependencyException> getCircularDependencyExceptions()
+ {
+ if ( circularDependencyExceptions == null )
+ {
+ return Collections.emptyList();
+ }
+
+ return circularDependencyExceptions;
+ }
+
+ // ------------------------------------------------------------------------
+ // Repositories
+ // ------------------------------------------------------------------------
+
+ public List<ArtifactRepository> getRepositories()
+ {
+ if ( repositories == null )
+ {
+ return Collections.emptyList();
+ }
+
+ return repositories;
+ }
+
+ public MetadataResolutionResult setRepositories( final List<ArtifactRepository> repositories )
+ {
+ this.repositories = repositories;
+
+ return this;
+ }
+
+ //
+ // Internal
+ //
+
+ private <T> List<T> initList( final List<T> l )
+ {
+ if ( l == null )
+ {
+ return new ArrayList<T>();
+ }
+ return l;
+ }
+
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ if ( artifacts != null )
+ {
+ int i = 1;
+ sb.append( "---------" ).append( "\n" );
+ sb.append( artifacts.size() ).append( "\n" );
+ for ( Artifact a : artifacts )
+ {
+ sb.append( i ).append( " " ).append( a ).append( "\n" );
+ i++;
+ }
+ sb.append( "---------" ).append( "\n" );
+ }
+
+ return sb.toString();
+ }
+
+ public MetadataGraph getResolvedTree()
+ {
+ return resolvedTree;
+ }
+
+ public void setResolvedTree( MetadataGraph resolvedTree )
+ {
+ this.resolvedTree = resolvedTree;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MirrorSelector.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MirrorSelector.java
new file mode 100644
index 00000000..c15899ed
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MirrorSelector.java
@@ -0,0 +1,44 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.settings.Mirror;
+
+/**
+ * Handles the selection of mirrors for repositories.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface MirrorSelector
+{
+
+ /**
+ * Determines the mirror for the specified repository.
+ *
+ * @param repository The repository to determine the mirror for, must not be {@code null}.
+ * @param mirrors The available mirrors, may be {@code null}.
+ * @return The mirror specification for the repository or {@code null} if no mirror matched.
+ */
+ Mirror getMirror( ArtifactRepository repository, List<Mirror> mirrors );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/UserLocalArtifactRepository.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/UserLocalArtifactRepository.java
new file mode 100644
index 00000000..70d3e0a0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/UserLocalArtifactRepository.java
@@ -0,0 +1,74 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+public class UserLocalArtifactRepository
+ extends LocalArtifactRepository
+{
+ private ArtifactRepository localRepository;
+
+ public UserLocalArtifactRepository( ArtifactRepository localRepository )
+ {
+ this.localRepository = localRepository;
+ setLayout( localRepository.getLayout() );
+ }
+
+ @Override
+ public Artifact find( Artifact artifact )
+ {
+ File artifactFile = new File( localRepository.getBasedir(), pathOf( artifact ) );
+
+ // We need to set the file here or the resolver will fail with an NPE, not fully equipped to deal
+ // with multiple local repository implementations yet.
+ artifact.setFile( artifactFile );
+
+ return artifact;
+ }
+
+ @Override
+ public String getId()
+ {
+ return localRepository.getId();
+ }
+
+ @Override
+ public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+ {
+ return localRepository.pathOfLocalRepositoryMetadata( metadata, repository );
+ }
+
+ @Override
+ public String pathOf( Artifact artifact )
+ {
+ return localRepository.pathOf( artifact );
+ }
+
+ @Override
+ public boolean hasLocalMetadata()
+ {
+ return true;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/VersionNotFoundException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/VersionNotFoundException.java
new file mode 100644
index 00000000..77b1af12
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/VersionNotFoundException.java
@@ -0,0 +1,83 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.model.Dependency;
+
+/**
+ * Thrown if a dependency has an invalid version.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class VersionNotFoundException
+ extends Exception
+{
+ private Dependency dependency;
+
+ private String projectId;
+ private File pomFile;
+ private InvalidVersionSpecificationException cause;
+
+ public VersionNotFoundException( String projectId, Dependency dependency, File pomFile,
+ InvalidVersionSpecificationException cause )
+ {
+ super( projectId + ", " + formatLocationInPom( dependency ) + " " + dependency.getVersion() + ", pom file "
+ + pomFile, cause );
+
+ this.projectId = projectId;
+
+ this.pomFile = pomFile;
+
+ this.cause = cause;
+
+ this.dependency = dependency;
+ }
+
+ private static String formatLocationInPom( Dependency dependency )
+ {
+ return "Dependency: " + ArtifactUtils.versionlessKey( dependency.getGroupId(), dependency.getArtifactId() );
+ }
+
+ public Dependency getDependency()
+ {
+ return dependency;
+ }
+
+ public String getProjectId()
+ {
+ return projectId;
+ }
+
+ public File getPomFile()
+ {
+ return pomFile;
+ }
+
+ public InvalidVersionSpecificationException getCauseException()
+ {
+ return cause;
+ }
+
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/ChecksumFailedException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/ChecksumFailedException.java
new file mode 100644
index 00000000..4e0c4a6b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/ChecksumFailedException.java
@@ -0,0 +1,42 @@
+package org.apache.maven.repository.legacy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.wagon.TransferFailedException;
+
+/**
+ * Occurs when a download checksum fails.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class ChecksumFailedException
+ extends TransferFailedException
+{
+ public ChecksumFailedException( String s )
+ {
+ super( s );
+ }
+
+ public ChecksumFailedException( String message,
+ Throwable cause )
+ {
+ super( message, cause );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java
new file mode 100644
index 00000000..57b307ef
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java
@@ -0,0 +1,438 @@
+package org.apache.maven.repository.legacy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.channels.FileLock;
+import java.util.Date;
+import java.util.Properties;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.Authentication;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+import org.apache.maven.repository.Proxy;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.IOUtil;
+
+@Component( role = UpdateCheckManager.class )
+public class DefaultUpdateCheckManager
+ extends AbstractLogEnabled
+ implements UpdateCheckManager
+{
+
+ private static final String ERROR_KEY_SUFFIX = ".error";
+
+ public DefaultUpdateCheckManager()
+ {
+
+ }
+
+ public DefaultUpdateCheckManager( Logger logger )
+ {
+ enableLogging( logger );
+ }
+
+ public static final String LAST_UPDATE_TAG = ".lastUpdated";
+
+ private static final String TOUCHFILE_NAME = "resolver-status.properties";
+
+ public boolean isUpdateRequired( Artifact artifact, ArtifactRepository repository )
+ {
+ File file = artifact.getFile();
+
+ ArtifactRepositoryPolicy policy = artifact.isSnapshot() ? repository.getSnapshots() : repository.getReleases();
+
+ if ( !policy.isEnabled() )
+ {
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug(
+ "Skipping update check for " + artifact + " (" + file + ") from "
+ + repository.getId() + " (" + repository.getUrl() + ")" );
+ }
+
+ return false;
+ }
+
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug(
+ "Determining update check for " + artifact + " (" + file + ") from "
+ + repository.getId() + " (" + repository.getUrl() + ")" );
+ }
+
+ if ( file == null )
+ {
+ // TODO throw something instead?
+ return true;
+ }
+
+ Date lastCheckDate;
+
+ if ( file.exists() )
+ {
+ lastCheckDate = new Date ( file.lastModified() );
+ }
+ else
+ {
+ File touchfile = getTouchfile( artifact );
+ lastCheckDate = readLastUpdated( touchfile, getRepositoryKey( repository ) );
+ }
+
+ return ( lastCheckDate == null ) || policy.checkOutOfDate( lastCheckDate );
+ }
+
+ public boolean isUpdateRequired( RepositoryMetadata metadata, ArtifactRepository repository, File file )
+ {
+ // Here, we need to determine which policy to use. Release updateInterval will be used when
+ // the metadata refers to a release artifact or meta-version, and snapshot updateInterval will be used when
+ // it refers to a snapshot artifact or meta-version.
+ // NOTE: Release metadata includes version information about artifacts that have been released, to allow
+ // meta-versions like RELEASE and LATEST to resolve, and also to allow retrieval of the range of valid, released
+ // artifacts available.
+ ArtifactRepositoryPolicy policy = metadata.getPolicy( repository );
+
+ if ( !policy.isEnabled() )
+ {
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug(
+ "Skipping update check for " + metadata.getKey() + " (" + file + ") from "
+ + repository.getId() + " (" + repository.getUrl() + ")" );
+ }
+
+ return false;
+ }
+
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug(
+ "Determining update check for " + metadata.getKey() + " (" + file + ") from "
+ + repository.getId() + " (" + repository.getUrl() + ")" );
+ }
+
+ if ( file == null )
+ {
+ // TODO throw something instead?
+ return true;
+ }
+
+ Date lastCheckDate = readLastUpdated( metadata, repository, file );
+
+ return ( lastCheckDate == null ) || policy.checkOutOfDate( lastCheckDate );
+ }
+
+ private Date readLastUpdated( RepositoryMetadata metadata, ArtifactRepository repository, File file )
+ {
+ File touchfile = getTouchfile( metadata, file );
+
+ String key = getMetadataKey( repository, file );
+
+ return readLastUpdated( touchfile, key );
+ }
+
+ public String getError( Artifact artifact, ArtifactRepository repository )
+ {
+ File touchFile = getTouchfile( artifact );
+ return getError( touchFile, getRepositoryKey( repository ) );
+ }
+
+ public void touch( Artifact artifact, ArtifactRepository repository, String error )
+ {
+ File file = artifact.getFile();
+
+ File touchfile = getTouchfile( artifact );
+
+ if ( file.exists() )
+ {
+ touchfile.delete();
+ }
+ else
+ {
+ writeLastUpdated( touchfile, getRepositoryKey( repository ), error );
+ }
+ }
+
+ public void touch( RepositoryMetadata metadata, ArtifactRepository repository, File file )
+ {
+ File touchfile = getTouchfile( metadata, file );
+
+ String key = getMetadataKey( repository, file );
+
+ writeLastUpdated( touchfile, key, null );
+ }
+
+ String getMetadataKey( ArtifactRepository repository, File file )
+ {
+ return repository.getId() + '.' + file.getName() + LAST_UPDATE_TAG;
+ }
+
+ String getRepositoryKey( ArtifactRepository repository )
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+
+ Proxy proxy = repository.getProxy();
+ if ( proxy != null )
+ {
+ if ( proxy.getUserName() != null )
+ {
+ int hash = ( proxy.getUserName() + proxy.getPassword() ).hashCode();
+ buffer.append( hash ).append( '@' );
+ }
+ buffer.append( proxy.getHost() ).append( ':' ).append( proxy.getPort() ).append( '>' );
+ }
+
+ // consider the username&password because a repo manager might block artifacts depending on authorization
+ Authentication auth = repository.getAuthentication();
+ if ( auth != null )
+ {
+ int hash = ( auth.getUsername() + auth.getPassword() ).hashCode();
+ buffer.append( hash ).append( '@' );
+ }
+
+ // consider the URL (instead of the id) as this most closely relates to the contents in the repo
+ buffer.append( repository.getUrl() );
+
+ return buffer.toString();
+ }
+
+ private void writeLastUpdated( File touchfile, String key, String error )
+ {
+ synchronized ( touchfile.getAbsolutePath().intern() )
+ {
+ if ( !touchfile.getParentFile().exists() && !touchfile.getParentFile().mkdirs() )
+ {
+ getLogger().debug( "Failed to create directory: " + touchfile.getParent()
+ + " for tracking artifact metadata resolution." );
+ return;
+ }
+
+ FileChannel channel = null;
+ FileLock lock = null;
+ try
+ {
+ Properties props = new Properties();
+
+ channel = new RandomAccessFile( touchfile, "rw" ).getChannel();
+ lock = channel.lock( 0, channel.size(), false );
+
+ if ( touchfile.canRead() )
+ {
+ getLogger().debug( "Reading resolution-state from: " + touchfile );
+ ByteBuffer buffer = ByteBuffer.allocate( (int) channel.size() );
+
+ channel.read( buffer );
+ buffer.flip();
+
+ ByteArrayInputStream stream = new ByteArrayInputStream( buffer.array() );
+ props.load( stream );
+ }
+
+ props.setProperty( key, Long.toString( System.currentTimeMillis() ) );
+
+ if ( error != null )
+ {
+ props.setProperty( key + ERROR_KEY_SUFFIX, error );
+ }
+ else
+ {
+ props.remove( key + ERROR_KEY_SUFFIX );
+ }
+
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+
+ getLogger().debug( "Writing resolution-state to: " + touchfile );
+ props.store( stream, "Last modified on: " + new Date() );
+
+ byte[] data = stream.toByteArray();
+ ByteBuffer buffer = ByteBuffer.allocate( data.length );
+ buffer.put( data );
+ buffer.flip();
+
+ channel.position( 0 );
+ channel.write( buffer );
+ }
+ catch ( IOException e )
+ {
+ getLogger().debug( "Failed to record lastUpdated information for resolution.\nFile: "
+ + touchfile.toString() + "; key: " + key, e );
+ }
+ finally
+ {
+ if ( lock != null )
+ {
+ try
+ {
+ lock.release();
+ }
+ catch ( IOException e )
+ {
+ getLogger().debug( "Error releasing exclusive lock for resolution tracking file: "
+ + touchfile, e );
+ }
+ }
+
+ if ( channel != null )
+ {
+ try
+ {
+ channel.close();
+ }
+ catch ( IOException e )
+ {
+ getLogger().debug( "Error closing FileChannel for resolution tracking file: "
+ + touchfile, e );
+ }
+ }
+ }
+ }
+ }
+
+ Date readLastUpdated( File touchfile, String key )
+ {
+ getLogger().debug( "Searching for " + key + " in resolution tracking file." );
+
+ Properties props = read( touchfile );
+ if ( props != null )
+ {
+ String rawVal = props.getProperty( key );
+ if ( rawVal != null )
+ {
+ try
+ {
+ return new Date( Long.parseLong( rawVal ) );
+ }
+ catch ( NumberFormatException e )
+ {
+ getLogger().debug( "Cannot parse lastUpdated date: \'" + rawVal + "\'. Ignoring.", e );
+ }
+ }
+ }
+ return null;
+ }
+
+ private String getError( File touchFile, String key )
+ {
+ Properties props = read( touchFile );
+ if ( props != null )
+ {
+ return props.getProperty( key + ERROR_KEY_SUFFIX );
+ }
+ return null;
+ }
+
+ private Properties read( File touchfile )
+ {
+ if ( !touchfile.canRead() )
+ {
+ getLogger().debug( "Skipped unreadable resolution tracking file " + touchfile );
+ return null;
+ }
+
+ synchronized ( touchfile.getAbsolutePath().intern() )
+ {
+ FileLock lock = null;
+ FileChannel channel = null;
+ try
+ {
+ Properties props = new Properties();
+
+ FileInputStream stream = new FileInputStream( touchfile );
+ try
+ {
+ channel = stream.getChannel();
+ lock = channel.lock( 0, channel.size(), true );
+
+ getLogger().debug( "Reading resolution-state from: " + touchfile );
+ props.load( stream );
+
+ return props;
+ }
+ finally
+ {
+ IOUtil.close( stream );
+ }
+ }
+ catch ( IOException e )
+ {
+ getLogger().debug( "Failed to read resolution tracking file " + touchfile, e );
+
+ return null;
+ }
+ finally
+ {
+ if ( lock != null )
+ {
+ try
+ {
+ lock.release();
+ }
+ catch ( IOException e )
+ {
+ getLogger().debug( "Error releasing shared lock for resolution tracking file: " + touchfile,
+ e );
+ }
+ }
+
+ if ( channel != null )
+ {
+ try
+ {
+ channel.close();
+ }
+ catch ( IOException e )
+ {
+ getLogger().debug( "Error closing FileChannel for resolution tracking file: " + touchfile, e );
+ }
+ }
+ }
+ }
+ }
+
+ File getTouchfile( Artifact artifact )
+ {
+ StringBuilder sb = new StringBuilder( 128 );
+ sb.append( artifact.getArtifactId() );
+ sb.append( '-' ).append( artifact.getBaseVersion() );
+ if ( artifact.getClassifier() != null )
+ {
+ sb.append( '-' ).append( artifact.getClassifier() );
+ }
+ sb.append( '.' ).append( artifact.getType() ).append( LAST_UPDATE_TAG );
+ return new File( artifact.getFile().getParentFile(), sb.toString() );
+ }
+
+ File getTouchfile( RepositoryMetadata metadata, File file )
+ {
+ return new File( file.getParent(), TOUCHFILE_NAME );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultWagonManager.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultWagonManager.java
new file mode 100644
index 00000000..2c4a60ec
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultWagonManager.java
@@ -0,0 +1,823 @@
+package org.apache.maven.repository.legacy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.wagon.ConnectionException;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.UnsupportedProtocolException;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.authentication.AuthenticationException;
+import org.apache.maven.wagon.authentication.AuthenticationInfo;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.events.TransferListener;
+import org.apache.maven.wagon.observers.ChecksumObserver;
+import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.repository.Repository;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.FileUtils;
+import org.eclipse.aether.ConfigurationProperties;
+import org.eclipse.aether.util.ConfigUtils;
+
+//TODO: remove the update check manager
+//TODO: separate into retriever and publisher
+//TODO: remove hardcoding of checksum logic
+@Component( role = WagonManager.class )
+public class DefaultWagonManager
+ implements WagonManager
+{
+ private static final String[] CHECKSUM_IDS = { "md5", "sha1" };
+
+ /** have to match the CHECKSUM_IDS */
+ private static final String[] CHECKSUM_ALGORITHMS = { "MD5", "SHA-1" };
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private PlexusContainer container;
+
+ @Requirement
+ private UpdateCheckManager updateCheckManager;
+
+ @Requirement
+ private LegacySupport legacySupport;
+
+
+ //
+ // Retriever
+ //
+ @Override
+ public void getArtifact( Artifact artifact, ArtifactRepository repository, TransferListener downloadMonitor,
+ boolean force )
+ throws TransferFailedException, ResourceDoesNotExistException
+ {
+ String remotePath = repository.pathOf( artifact );
+
+ ArtifactRepositoryPolicy policy = artifact.isSnapshot() ? repository.getSnapshots() : repository.getReleases();
+
+ if ( !policy.isEnabled() )
+ {
+ logger.debug( "Skipping disabled repository " + repository.getId() + " for resolution of "
+ + artifact.getId() );
+ }
+ else if ( artifact.isSnapshot() || !artifact.getFile().exists() )
+ {
+ if ( force || updateCheckManager.isUpdateRequired( artifact, repository ) )
+ {
+ logger.debug( "Trying repository " + repository.getId() + " for resolution of " + artifact.getId()
+ + " from " + remotePath );
+
+ try
+ {
+ getRemoteFile( repository, artifact.getFile(), remotePath, downloadMonitor,
+ policy.getChecksumPolicy(), false );
+
+ updateCheckManager.touch( artifact, repository, null );
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ updateCheckManager.touch( artifact, repository, null );
+ throw e;
+ }
+ catch ( TransferFailedException e )
+ {
+ String error = ( e.getMessage() != null ) ? e.getMessage() : e.getClass().getSimpleName();
+ updateCheckManager.touch( artifact, repository, error );
+ throw e;
+ }
+
+ logger.debug( " Artifact " + artifact.getId() + " resolved to " + artifact.getFile() );
+
+ artifact.setResolved( true );
+ }
+ else if ( !artifact.getFile().exists() )
+ {
+ String error = updateCheckManager.getError( artifact, repository );
+ if ( error != null )
+ {
+ throw new TransferFailedException( "Failure to resolve " + remotePath + " from "
+ + repository.getUrl() + " was cached in the local repository. "
+ + "Resolution will not be reattempted until the update interval of " + repository.getId()
+ + " has elapsed or updates are forced. Original error: " + error );
+ }
+ else
+ {
+ throw new ResourceDoesNotExistException( "Failure to resolve " + remotePath + " from "
+ + repository.getUrl() + " was cached in the local repository. "
+ + "Resolution will not be reattempted until the update interval of " + repository.getId()
+ + " has elapsed or updates are forced." );
+ }
+ }
+ }
+ }
+
+ @Override
+ public void getArtifact( Artifact artifact, List<ArtifactRepository> remoteRepositories,
+ TransferListener downloadMonitor, boolean force )
+ throws TransferFailedException, ResourceDoesNotExistException
+ {
+ TransferFailedException tfe = null;
+
+ for ( ArtifactRepository repository : remoteRepositories )
+ {
+ try
+ {
+ getArtifact( artifact, repository, downloadMonitor, force );
+
+ if ( artifact.isResolved() )
+ {
+ artifact.setRepository( repository );
+ break;
+ }
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ // This one we will eat when looking through remote repositories
+ // because we want to cycle through them all before squawking.
+
+ logger.debug( "Unable to find artifact " + artifact.getId() + " in repository " + repository.getId()
+ + " (" + repository.getUrl() + ")", e );
+ }
+ catch ( TransferFailedException e )
+ {
+ tfe = e;
+
+ String msg =
+ "Unable to get artifact " + artifact.getId() + " from repository " + repository.getId() + " ("
+ + repository.getUrl() + "): " + e.getMessage();
+ if ( logger.isDebugEnabled() )
+ {
+ logger.warn( msg, e );
+ }
+ else
+ {
+ logger.warn( msg );
+ }
+ }
+ }
+
+ // if it already exists locally we were just trying to force it - ignore the update
+ if ( !artifact.getFile().exists() )
+ {
+ if ( tfe != null )
+ {
+ throw tfe;
+ }
+ else
+ {
+ throw new ResourceDoesNotExistException( "Unable to download the artifact from any repository" );
+ }
+ }
+ }
+
+ @Override
+ public void getArtifactMetadata( ArtifactMetadata metadata, ArtifactRepository repository, File destination,
+ String checksumPolicy )
+ throws TransferFailedException, ResourceDoesNotExistException
+ {
+ String remotePath = repository.pathOfRemoteRepositoryMetadata( metadata );
+
+ getRemoteFile( repository, destination, remotePath, null, checksumPolicy, true );
+ }
+
+ @Override
+ public void getArtifactMetadataFromDeploymentRepository( ArtifactMetadata metadata, ArtifactRepository repository,
+ File destination, String checksumPolicy )
+ throws TransferFailedException, ResourceDoesNotExistException
+ {
+ String remotePath = repository.pathOfRemoteRepositoryMetadata( metadata );
+
+ getRemoteFile( repository, destination, remotePath, null, checksumPolicy, true );
+ }
+
+ /**
+ * Deal with connecting to a wagon repository taking into account authentication and proxies.
+ *
+ * @param wagon
+ * @param repository
+ * @throws ConnectionException
+ * @throws AuthenticationException
+ */
+ private void connectWagon( Wagon wagon, ArtifactRepository repository )
+ throws ConnectionException, AuthenticationException
+ {
+ // MNG-5509
+ // See org.eclipse.aether.connector.wagon.WagonRepositoryConnector.connectWagon(Wagon)
+ if( legacySupport.getRepositorySession() != null )
+ {
+ String userAgent = ConfigUtils.getString( legacySupport.getRepositorySession(), null, ConfigurationProperties.USER_AGENT );
+ if( userAgent == null)
+ {
+ Properties headers = new Properties();
+
+ headers.put( "User-Agent", ConfigUtils.getString( legacySupport.getRepositorySession(), "Maven",
+ ConfigurationProperties.USER_AGENT ) );
+ try
+ {
+ Method setHttpHeaders = wagon.getClass().getMethod( "setHttpHeaders", Properties.class );
+ setHttpHeaders.invoke( wagon, headers );
+ }
+ catch ( NoSuchMethodException e )
+ {
+ // normal for non-http wagons
+ }
+ catch ( Exception e )
+ {
+ logger.debug( "Could not set user agent for wagon " + wagon.getClass().getName() + ": " + e );
+ }
+ }
+ }
+
+ if ( repository.getProxy() != null && logger.isDebugEnabled() )
+ {
+ logger.debug( "Using proxy " + repository.getProxy().getHost() + ":" + repository.getProxy().getPort()
+ + " for " + repository.getUrl() );
+ }
+
+ if ( repository.getAuthentication() != null && repository.getProxy() != null )
+ {
+ wagon.connect( new Repository( repository.getId(), repository.getUrl() ), authenticationInfo( repository ),
+ proxyInfo( repository ) );
+ }
+ else if ( repository.getAuthentication() != null )
+ {
+ wagon.connect( new Repository( repository.getId(), repository.getUrl() ),
+ authenticationInfo( repository ) );
+ }
+ else if ( repository.getProxy() != null )
+ {
+ wagon.connect( new Repository( repository.getId(), repository.getUrl() ), proxyInfo( repository ) );
+ }
+ else
+ {
+ wagon.connect( new Repository( repository.getId(), repository.getUrl() ) );
+ }
+ }
+
+ private AuthenticationInfo authenticationInfo( ArtifactRepository repository )
+ {
+ AuthenticationInfo ai = new AuthenticationInfo();
+ ai.setUserName( repository.getAuthentication().getUsername() );
+ ai.setPassword( repository.getAuthentication().getPassword() );
+ return ai;
+ }
+
+ private ProxyInfo proxyInfo( ArtifactRepository repository )
+ {
+ ProxyInfo proxyInfo = new ProxyInfo();
+ proxyInfo.setHost( repository.getProxy().getHost() );
+ proxyInfo.setType( repository.getProxy().getProtocol() );
+ proxyInfo.setPort( repository.getProxy().getPort() );
+ proxyInfo.setNonProxyHosts( repository.getProxy().getNonProxyHosts() );
+ proxyInfo.setUserName( repository.getProxy().getUserName() );
+ proxyInfo.setPassword( repository.getProxy().getPassword() );
+ return proxyInfo;
+ }
+
+ @Override
+ public void getRemoteFile( ArtifactRepository repository, File destination, String remotePath,
+ TransferListener downloadMonitor, String checksumPolicy, boolean force )
+ throws TransferFailedException, ResourceDoesNotExistException
+ {
+ String protocol = repository.getProtocol();
+
+ Wagon wagon;
+
+ try
+ {
+ wagon = getWagon( protocol );
+ }
+ catch ( UnsupportedProtocolException e )
+ {
+ throw new TransferFailedException( "Unsupported Protocol: '" + protocol + "': " + e.getMessage(), e );
+ }
+
+ if ( downloadMonitor != null )
+ {
+ wagon.addTransferListener( downloadMonitor );
+ }
+
+ File temp = new File( destination + ".tmp" );
+
+ temp.deleteOnExit();
+
+ boolean downloaded = false;
+
+ try
+ {
+ connectWagon( wagon, repository );
+
+ boolean firstRun = true;
+ boolean retry = true;
+
+ // this will run at most twice. The first time, the firstRun flag is turned off, and if the retry flag
+ // is set on the first run, it will be turned off and not re-set on the second try. This is because the
+ // only way the retry flag can be set is if ( firstRun == true ).
+ while ( firstRun || retry )
+ {
+ ChecksumObserver md5ChecksumObserver = null;
+ ChecksumObserver sha1ChecksumObserver = null;
+ try
+ {
+ // TODO: configure on repository
+ int i = 0;
+
+ md5ChecksumObserver = addChecksumObserver( wagon, CHECKSUM_ALGORITHMS[i++] );
+ sha1ChecksumObserver = addChecksumObserver( wagon, CHECKSUM_ALGORITHMS[i++] );
+
+ // reset the retry flag.
+ retry = false;
+
+ // This should take care of creating destination directory now on
+ if ( destination.exists() && !force )
+ {
+ try
+ {
+ downloaded = wagon.getIfNewer( remotePath, temp, destination.lastModified() );
+
+ if ( !downloaded )
+ {
+ // prevent additional checks of this artifact until it expires again
+ destination.setLastModified( System.currentTimeMillis() );
+ }
+ }
+ catch ( UnsupportedOperationException e )
+ {
+ // older wagons throw this. Just get() instead
+ wagon.get( remotePath, temp );
+
+ downloaded = true;
+ }
+ }
+ else
+ {
+ wagon.get( remotePath, temp );
+ downloaded = true;
+ }
+ }
+ finally
+ {
+ wagon.removeTransferListener( md5ChecksumObserver );
+ wagon.removeTransferListener( sha1ChecksumObserver );
+ }
+
+ if ( downloaded )
+ {
+ // keep the checksum files from showing up on the download monitor...
+ if ( downloadMonitor != null )
+ {
+ wagon.removeTransferListener( downloadMonitor );
+ }
+
+ // try to verify the SHA-1 checksum for this file.
+ try
+ {
+ verifyChecksum( sha1ChecksumObserver, destination, temp, remotePath, ".sha1", wagon );
+ }
+ catch ( ChecksumFailedException e )
+ {
+ // if we catch a ChecksumFailedException, it means the transfer/read succeeded, but the checksum
+ // doesn't match. This could be a problem with the server (ibiblio HTTP-200 error page), so we'll
+ // try this up to two times. On the second try, we'll handle it as a bona-fide error, based on the
+ // repository's checksum checking policy.
+ if ( firstRun )
+ {
+ logger.warn( "*** CHECKSUM FAILED - " + e.getMessage() + " - RETRYING" );
+ retry = true;
+ }
+ else
+ {
+ handleChecksumFailure( checksumPolicy, e.getMessage(), e.getCause() );
+ }
+ }
+ catch ( ResourceDoesNotExistException sha1TryException )
+ {
+ logger.debug( "SHA1 not found, trying MD5: " + sha1TryException.getMessage() );
+
+ // if this IS NOT a ChecksumFailedException, it was a problem with transfer/read of the checksum
+ // file...we'll try again with the MD5 checksum.
+ try
+ {
+ verifyChecksum( md5ChecksumObserver, destination, temp, remotePath, ".md5", wagon );
+ }
+ catch ( ChecksumFailedException e )
+ {
+ // if we also fail to verify based on the MD5 checksum, and the checksum transfer/read
+ // succeeded, then we need to determine whether to retry or handle it as a failure.
+ if ( firstRun )
+ {
+ retry = true;
+ }
+ else
+ {
+ handleChecksumFailure( checksumPolicy, e.getMessage(), e.getCause() );
+ }
+ }
+ catch ( ResourceDoesNotExistException md5TryException )
+ {
+ // this was a failed transfer, and we don't want to retry.
+ handleChecksumFailure( checksumPolicy, "Error retrieving checksum file for " + remotePath,
+ md5TryException );
+ }
+ }
+
+ // reinstate the download monitor...
+ if ( downloadMonitor != null )
+ {
+ wagon.addTransferListener( downloadMonitor );
+ }
+ }
+
+ // unset the firstRun flag, so we don't get caught in an infinite loop...
+ firstRun = false;
+ }
+ }
+ catch ( ConnectionException e )
+ {
+ throw new TransferFailedException( "Connection failed: " + e.getMessage(), e );
+ }
+ catch ( AuthenticationException e )
+ {
+ throw new TransferFailedException( "Authentication failed: " + e.getMessage(), e );
+ }
+ catch ( AuthorizationException e )
+ {
+ throw new TransferFailedException( "Authorization failed: " + e.getMessage(), e );
+ }
+ finally
+ {
+ // Remove remaining TransferListener instances (checksum handlers removed in above finally clause)
+ if ( downloadMonitor != null )
+ {
+ wagon.removeTransferListener( downloadMonitor );
+ }
+
+ disconnectWagon( wagon );
+
+ releaseWagon( protocol, wagon );
+ }
+
+ if ( downloaded )
+ {
+ if ( !temp.exists() )
+ {
+ throw new ResourceDoesNotExistException( "Downloaded file does not exist: " + temp );
+ }
+
+ // The temporary file is named destination + ".tmp" and is done this way to ensure
+ // that the temporary file is in the same file system as the destination because the
+ // File.renameTo operation doesn't really work across file systems.
+ // So we will attempt to do a File.renameTo for efficiency and atomicity, if this fails
+ // then we will use a brute force copy and delete the temporary file.
+
+ if ( !temp.renameTo( destination ) )
+ {
+ try
+ {
+ FileUtils.copyFile( temp, destination );
+
+ if ( !temp.delete() )
+ {
+ temp.deleteOnExit();
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new TransferFailedException( "Error copying temporary file to the final destination: "
+ + e.getMessage(), e );
+ }
+ }
+ }
+ }
+
+ //
+ // Publisher
+ //
+ @Override
+ public void putArtifact( File source, Artifact artifact, ArtifactRepository deploymentRepository,
+ TransferListener downloadMonitor )
+ throws TransferFailedException
+ {
+ putRemoteFile( deploymentRepository, source, deploymentRepository.pathOf( artifact ), downloadMonitor );
+ }
+
+ @Override
+ public void putArtifactMetadata( File source, ArtifactMetadata artifactMetadata, ArtifactRepository repository )
+ throws TransferFailedException
+ {
+ logger.info( "Uploading " + artifactMetadata );
+ putRemoteFile( repository, source, repository.pathOfRemoteRepositoryMetadata( artifactMetadata ), null );
+ }
+
+ @Override
+ public void putRemoteFile( ArtifactRepository repository, File source, String remotePath,
+ TransferListener downloadMonitor )
+ throws TransferFailedException
+ {
+ String protocol = repository.getProtocol();
+
+ Wagon wagon;
+ try
+ {
+ wagon = getWagon( protocol );
+ }
+ catch ( UnsupportedProtocolException e )
+ {
+ throw new TransferFailedException( "Unsupported Protocol: '" + protocol + "': " + e.getMessage(), e );
+ }
+
+ if ( downloadMonitor != null )
+ {
+ wagon.addTransferListener( downloadMonitor );
+ }
+
+ Map<String, ChecksumObserver> checksums = new HashMap<String, ChecksumObserver>( 2 );
+
+ Map<String, String> sums = new HashMap<String, String>( 2 );
+
+ // TODO: configure these on the repository
+ for ( int i = 0; i < CHECKSUM_IDS.length; i++ )
+ {
+ checksums.put( CHECKSUM_IDS[i], addChecksumObserver( wagon, CHECKSUM_ALGORITHMS[i] ) );
+ }
+
+ List<File> temporaryFiles = new ArrayList<File>();
+
+ try
+ {
+ try
+ {
+ connectWagon( wagon, repository );
+
+ wagon.put( source, remotePath );
+ }
+ finally
+ {
+ if ( downloadMonitor != null )
+ {
+ wagon.removeTransferListener( downloadMonitor );
+ }
+ }
+
+ // Pre-store the checksums as any future puts will overwrite them
+ for ( String extension : checksums.keySet() )
+ {
+ ChecksumObserver observer = checksums.get( extension );
+ sums.put( extension, observer.getActualChecksum() );
+ }
+
+ // We do this in here so we can checksum the artifact metadata too, otherwise it could be metadata itself
+ for ( String extension : checksums.keySet() )
+ {
+ // TODO: shouldn't need a file intermediatary - improve wagon to take a stream
+ File temp = File.createTempFile( "maven-artifact", null );
+ temp.deleteOnExit();
+ FileUtils.fileWrite( temp.getAbsolutePath(), "UTF-8", sums.get( extension ) );
+
+ temporaryFiles.add( temp );
+ wagon.put( temp, remotePath + "." + extension );
+ }
+ }
+ catch ( ConnectionException e )
+ {
+ throw new TransferFailedException( "Connection failed: " + e.getMessage(), e );
+ }
+ catch ( AuthenticationException e )
+ {
+ throw new TransferFailedException( "Authentication failed: " + e.getMessage(), e );
+ }
+ catch ( AuthorizationException e )
+ {
+ throw new TransferFailedException( "Authorization failed: " + e.getMessage(), e );
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ throw new TransferFailedException( "Resource to deploy not found: " + e.getMessage(), e );
+ }
+ catch ( IOException e )
+ {
+ throw new TransferFailedException( "Error creating temporary file for deployment: " + e.getMessage(), e );
+ }
+ finally
+ {
+ // MNG-4543
+ cleanupTemporaryFiles( temporaryFiles );
+
+ // Remove every checksum listener
+ for ( String aCHECKSUM_IDS : CHECKSUM_IDS )
+ {
+ TransferListener checksumListener = checksums.get( aCHECKSUM_IDS );
+ if ( checksumListener != null )
+ {
+ wagon.removeTransferListener( checksumListener );
+ }
+ }
+
+ disconnectWagon( wagon );
+
+ releaseWagon( protocol, wagon );
+ }
+ }
+
+ private void cleanupTemporaryFiles( List<File> files )
+ {
+ for ( File file : files )
+ {
+ // really don't care if it failed here only log warning
+ if ( !file.delete() )
+ {
+ logger.warn( "skip failed to delete temporary file : " + file.getAbsolutePath() );
+ file.deleteOnExit();
+ }
+ }
+
+ }
+
+ private ChecksumObserver addChecksumObserver( Wagon wagon, String algorithm )
+ throws TransferFailedException
+ {
+ try
+ {
+ ChecksumObserver checksumObserver = new ChecksumObserver( algorithm );
+ wagon.addTransferListener( checksumObserver );
+ return checksumObserver;
+ }
+ catch ( NoSuchAlgorithmException e )
+ {
+ throw new TransferFailedException( "Unable to add checksum for unsupported algorithm " + algorithm, e );
+ }
+ }
+
+ private void handleChecksumFailure( String checksumPolicy, String message, Throwable cause )
+ throws ChecksumFailedException
+ {
+ if ( ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL.equals( checksumPolicy ) )
+ {
+ throw new ChecksumFailedException( message, cause );
+ }
+ else if ( !ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE.equals( checksumPolicy ) )
+ {
+ // warn if it is set to anything other than ignore
+ logger.warn( "*** CHECKSUM FAILED - " + message + " - IGNORING" );
+ }
+ // otherwise it is ignore
+ }
+
+ private void verifyChecksum( ChecksumObserver checksumObserver, File destination, File tempDestination,
+ String remotePath, String checksumFileExtension, Wagon wagon )
+ throws ResourceDoesNotExistException, TransferFailedException, AuthorizationException
+ {
+ try
+ {
+ // grab it first, because it's about to change...
+ String actualChecksum = checksumObserver.getActualChecksum();
+
+ File tempChecksumFile = new File( tempDestination + checksumFileExtension + ".tmp" );
+ tempChecksumFile.deleteOnExit();
+ wagon.get( remotePath + checksumFileExtension, tempChecksumFile );
+
+ String expectedChecksum = FileUtils.fileRead( tempChecksumFile, "UTF-8" );
+
+ // remove whitespaces at the end
+ expectedChecksum = expectedChecksum.trim();
+
+ // check for 'ALGO (name) = CHECKSUM' like used by openssl
+ if ( expectedChecksum.regionMatches( true, 0, "MD", 0, 2 )
+ || expectedChecksum.regionMatches( true, 0, "SHA", 0, 3 ) )
+ {
+ int lastSpacePos = expectedChecksum.lastIndexOf( ' ' );
+ expectedChecksum = expectedChecksum.substring( lastSpacePos + 1 );
+ }
+ else
+ {
+ // remove everything after the first space (if available)
+ int spacePos = expectedChecksum.indexOf( ' ' );
+
+ if ( spacePos != -1 )
+ {
+ expectedChecksum = expectedChecksum.substring( 0, spacePos );
+ }
+ }
+ if ( expectedChecksum.equalsIgnoreCase( actualChecksum ) )
+ {
+ File checksumFile = new File( destination + checksumFileExtension );
+ if ( checksumFile.exists() )
+ {
+ checksumFile.delete(); // ignore if failed as we will overwrite
+ }
+ FileUtils.copyFile( tempChecksumFile, checksumFile );
+ if ( !tempChecksumFile.delete() )
+ {
+ tempChecksumFile.deleteOnExit();
+ }
+ }
+ else
+ {
+ throw new ChecksumFailedException( "Checksum failed on download: local = '" + actualChecksum
+ + "'; remote = '" + expectedChecksum + "'" );
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new ChecksumFailedException( "Invalid checksum file", e );
+ }
+ }
+
+ private void disconnectWagon( Wagon wagon )
+ {
+ try
+ {
+ wagon.disconnect();
+ }
+ catch ( ConnectionException e )
+ {
+ logger.error( "Problem disconnecting from wagon - ignoring: " + e.getMessage() );
+ }
+ }
+
+ private void releaseWagon( String protocol, Wagon wagon )
+ {
+ try
+ {
+ container.release( wagon );
+ }
+ catch ( ComponentLifecycleException e )
+ {
+ logger.error( "Problem releasing wagon - ignoring: " + e.getMessage() );
+ logger.debug( "", e );
+ }
+ }
+
+ @Override
+ @Deprecated
+ public Wagon getWagon( Repository repository )
+ throws UnsupportedProtocolException
+ {
+ return getWagon( repository.getProtocol() );
+ }
+
+ @Override
+ @Deprecated
+ public Wagon getWagon( String protocol )
+ throws UnsupportedProtocolException
+ {
+ if ( protocol == null )
+ {
+ throw new UnsupportedProtocolException( "Unspecified protocol" );
+ }
+
+ String hint = protocol.toLowerCase( java.util.Locale.ENGLISH );
+
+ Wagon wagon;
+ try
+ {
+ wagon = container.lookup( Wagon.class, hint );
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new UnsupportedProtocolException( "Cannot find wagon which supports the requested protocol: "
+ + protocol, e );
+ }
+
+ return wagon;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java
new file mode 100644
index 00000000..6dd84dbc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java
@@ -0,0 +1,906 @@
+package org.apache.maven.repository.legacy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.repository.legacy.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.Authentication;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Exclusion;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.RepositoryPolicy;
+import org.apache.maven.repository.DelegatingLocalArtifactRepository;
+import org.apache.maven.repository.LocalArtifactRepository;
+import org.apache.maven.repository.ArtifactTransferListener;
+import org.apache.maven.repository.MirrorSelector;
+import org.apache.maven.repository.Proxy;
+import org.apache.maven.repository.RepositorySystem;
+import org.apache.maven.repository.ArtifactDoesNotExistException;
+import org.apache.maven.repository.ArtifactTransferFailedException;
+import org.apache.maven.settings.Mirror;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.building.SettingsProblem;
+import org.apache.maven.settings.crypto.DefaultSettingsDecryptionRequest;
+import org.apache.maven.settings.crypto.SettingsDecrypter;
+import org.apache.maven.settings.crypto.SettingsDecryptionRequest;
+import org.apache.maven.settings.crypto.SettingsDecryptionResult;
+import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.proxy.ProxyUtils;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.StringUtils;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.AuthenticationContext;
+import org.eclipse.aether.repository.AuthenticationSelector;
+import org.eclipse.aether.repository.ProxySelector;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * @author Jason van Zyl
+ */
+@Component( role = RepositorySystem.class, hint = "default" )
+public class LegacyRepositorySystem
+ implements RepositorySystem
+{
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private ArtifactFactory artifactFactory;
+
+ @Requirement
+ private ArtifactResolver artifactResolver;
+
+ @Requirement
+ private ArtifactRepositoryFactory artifactRepositoryFactory;
+
+ @Requirement( role = ArtifactRepositoryLayout.class )
+ private Map<String, ArtifactRepositoryLayout> layouts;
+
+ @Requirement
+ private WagonManager wagonManager;
+
+ @Requirement
+ private PlexusContainer plexus;
+
+ @Requirement
+ private MirrorSelector mirrorSelector;
+
+ @Requirement
+ private SettingsDecrypter settingsDecrypter;
+
+ public Artifact createArtifact( String groupId, String artifactId, String version, String scope, String type )
+ {
+ return artifactFactory.createArtifact( groupId, artifactId, version, scope, type );
+ }
+
+ public Artifact createArtifact( String groupId, String artifactId, String version, String packaging )
+ {
+ return artifactFactory.createBuildArtifact( groupId, artifactId, version, packaging );
+ }
+
+ public Artifact createArtifactWithClassifier( String groupId, String artifactId, String version, String type,
+ String classifier )
+ {
+ return artifactFactory.createArtifactWithClassifier( groupId, artifactId, version, type, classifier );
+ }
+
+ public Artifact createProjectArtifact( String groupId, String artifactId, String metaVersionId )
+ {
+ return artifactFactory.createProjectArtifact( groupId, artifactId, metaVersionId );
+ }
+
+ public Artifact createDependencyArtifact( Dependency d )
+ {
+ VersionRange versionRange;
+ try
+ {
+ versionRange = VersionRange.createFromVersionSpec( d.getVersion() );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ return null;
+ }
+
+ Artifact artifact =
+ artifactFactory.createDependencyArtifact( d.getGroupId(), d.getArtifactId(), versionRange, d.getType(),
+ d.getClassifier(), d.getScope(), d.isOptional() );
+
+ if ( Artifact.SCOPE_SYSTEM.equals( d.getScope() ) && d.getSystemPath() != null )
+ {
+ artifact.setFile( new File( d.getSystemPath() ) );
+ }
+
+ if ( !d.getExclusions().isEmpty() )
+ {
+ List<String> exclusions = new ArrayList<String>();
+
+ for ( Exclusion exclusion : d.getExclusions() )
+ {
+ exclusions.add( exclusion.getGroupId() + ':' + exclusion.getArtifactId() );
+ }
+
+ artifact.setDependencyFilter( new ExcludesArtifactFilter( exclusions ) );
+ }
+
+ return artifact;
+ }
+
+ public Artifact createExtensionArtifact( String groupId, String artifactId, String version )
+ {
+ VersionRange versionRange;
+ try
+ {
+ versionRange = VersionRange.createFromVersionSpec( version );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ return null;
+ }
+
+ return artifactFactory.createExtensionArtifact( groupId, artifactId, versionRange );
+ }
+
+ public Artifact createParentArtifact( String groupId, String artifactId, String version )
+ {
+ return artifactFactory.createParentArtifact( groupId, artifactId, version );
+ }
+
+ public Artifact createPluginArtifact( Plugin plugin )
+ {
+ VersionRange versionRange;
+ try
+ {
+ String version = plugin.getVersion();
+ if ( StringUtils.isEmpty( version ) )
+ {
+ version = "RELEASE";
+ }
+ versionRange = VersionRange.createFromVersionSpec( version );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ return null;
+ }
+
+ return artifactFactory.createPluginArtifact( plugin.getGroupId(), plugin.getArtifactId(), versionRange );
+ }
+
+ public ArtifactRepositoryPolicy buildArtifactRepositoryPolicy( RepositoryPolicy policy )
+ {
+ boolean enabled = true;
+
+ String updatePolicy = null;
+
+ String checksumPolicy = null;
+
+ if ( policy != null )
+ {
+ enabled = policy.isEnabled();
+
+ if ( policy.getUpdatePolicy() != null )
+ {
+ updatePolicy = policy.getUpdatePolicy();
+ }
+ if ( policy.getChecksumPolicy() != null )
+ {
+ checksumPolicy = policy.getChecksumPolicy();
+ }
+ }
+
+ return new ArtifactRepositoryPolicy( enabled, updatePolicy, checksumPolicy );
+ }
+
+ public ArtifactRepository createDefaultLocalRepository()
+ throws InvalidRepositoryException
+ {
+ return createLocalRepository( RepositorySystem.defaultUserLocalRepository );
+ }
+
+ public ArtifactRepository createLocalRepository( File localRepository )
+ throws InvalidRepositoryException
+ {
+ return createRepository( "file://" + localRepository.toURI().getRawPath(),
+ RepositorySystem.DEFAULT_LOCAL_REPO_ID, true,
+ ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS, true,
+ ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS,
+ ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE );
+ }
+
+ public ArtifactRepository createDefaultRemoteRepository()
+ throws InvalidRepositoryException
+ {
+ return createRepository( RepositorySystem.DEFAULT_REMOTE_REPO_URL, RepositorySystem.DEFAULT_REMOTE_REPO_ID,
+ true, ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY, false,
+ ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY,
+ ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN );
+ }
+
+ public ArtifactRepository createLocalRepository( String url, String repositoryId )
+ throws IOException
+ {
+ return createRepository( canonicalFileUrl( url ), repositoryId, true,
+ ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS, true,
+ ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS,
+ ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE );
+ }
+
+ private String canonicalFileUrl( String url )
+ throws IOException
+ {
+ if ( !url.startsWith( "file:" ) )
+ {
+ url = "file://" + url;
+ }
+ else if ( url.startsWith( "file:" ) && !url.startsWith( "file://" ) )
+ {
+ url = "file://" + url.substring( "file:".length() );
+ }
+
+ // So now we have an url of the form file://<path>
+
+ // We want to eliminate any relative path nonsense and lock down the path so we
+ // need to fully resolve it before any sub-modules use the path. This can happen
+ // when you are using a custom settings.xml that contains a relative path entry
+ // for the local repository setting.
+
+ File localRepository = new File( url.substring( "file://".length() ) );
+
+ if ( !localRepository.isAbsolute() )
+ {
+ url = "file://" + localRepository.getCanonicalPath();
+ }
+
+ return url;
+ }
+
+ public ArtifactResolutionResult resolve( ArtifactResolutionRequest request )
+ {
+ /*
+ * Probably is not worth it, but here I make sure I restore request
+ * to its original state.
+ */
+ try
+ {
+ LocalArtifactRepository ideWorkspace =
+ plexus.lookup( LocalArtifactRepository.class, LocalArtifactRepository.IDE_WORKSPACE );
+
+ if ( request.getLocalRepository() instanceof DelegatingLocalArtifactRepository )
+ {
+ DelegatingLocalArtifactRepository delegatingLocalRepository =
+ (DelegatingLocalArtifactRepository) request.getLocalRepository();
+
+ LocalArtifactRepository orig = delegatingLocalRepository.getIdeWorspace();
+
+ delegatingLocalRepository.setIdeWorkspace( ideWorkspace );
+
+ try
+ {
+ return artifactResolver.resolve( request );
+ }
+ finally
+ {
+ delegatingLocalRepository.setIdeWorkspace( orig );
+ }
+ }
+ else
+ {
+ ArtifactRepository localRepository = request.getLocalRepository();
+ DelegatingLocalArtifactRepository delegatingLocalRepository =
+ new DelegatingLocalArtifactRepository( localRepository );
+ delegatingLocalRepository.setIdeWorkspace( ideWorkspace );
+ request.setLocalRepository( delegatingLocalRepository );
+ try
+ {
+ return artifactResolver.resolve( request );
+ }
+ finally
+ {
+ request.setLocalRepository( localRepository );
+ }
+ }
+ }
+ catch ( ComponentLookupException e )
+ {
+ // no ide workspace artifact resolution
+ }
+
+ return artifactResolver.resolve( request );
+ }
+
+ /*
+ public void addProxy( String protocol, String host, int port, String username, String password, String nonProxyHosts )
+ {
+ ProxyInfo proxyInfo = new ProxyInfo();
+ proxyInfo.setHost( host );
+ proxyInfo.setType( protocol );
+ proxyInfo.setPort( port );
+ proxyInfo.setNonProxyHosts( nonProxyHosts );
+ proxyInfo.setUserName( username );
+ proxyInfo.setPassword( password );
+
+ proxies.put( protocol, proxyInfo );
+
+ wagonManager.addProxy( protocol, host, port, username, password, nonProxyHosts );
+ }
+ */
+
+ public List<ArtifactRepository> getEffectiveRepositories( List<ArtifactRepository> repositories )
+ {
+ if ( repositories == null )
+ {
+ return null;
+ }
+
+ Map<String, List<ArtifactRepository>> reposByKey = new LinkedHashMap<String, List<ArtifactRepository>>();
+
+ for ( ArtifactRepository repository : repositories )
+ {
+ String key = repository.getId();
+
+ List<ArtifactRepository> aliasedRepos = reposByKey.get( key );
+
+ if ( aliasedRepos == null )
+ {
+ aliasedRepos = new ArrayList<ArtifactRepository>();
+ reposByKey.put( key, aliasedRepos );
+ }
+
+ aliasedRepos.add( repository );
+ }
+
+ List<ArtifactRepository> effectiveRepositories = new ArrayList<ArtifactRepository>();
+
+ for ( List<ArtifactRepository> aliasedRepos : reposByKey.values() )
+ {
+ List<ArtifactRepository> mirroredRepos = new ArrayList<ArtifactRepository>();
+
+ List<ArtifactRepositoryPolicy> releasePolicies =
+ new ArrayList<ArtifactRepositoryPolicy>( aliasedRepos.size() );
+
+ for ( ArtifactRepository aliasedRepo : aliasedRepos )
+ {
+ releasePolicies.add( aliasedRepo.getReleases() );
+ mirroredRepos.addAll( aliasedRepo.getMirroredRepositories() );
+ }
+
+ ArtifactRepositoryPolicy releasePolicy = getEffectivePolicy( releasePolicies );
+
+ List<ArtifactRepositoryPolicy> snapshotPolicies =
+ new ArrayList<ArtifactRepositoryPolicy>( aliasedRepos.size() );
+
+ for ( ArtifactRepository aliasedRepo : aliasedRepos )
+ {
+ snapshotPolicies.add( aliasedRepo.getSnapshots() );
+ }
+
+ ArtifactRepositoryPolicy snapshotPolicy = getEffectivePolicy( snapshotPolicies );
+
+ ArtifactRepository aliasedRepo = aliasedRepos.get( 0 );
+
+ ArtifactRepository effectiveRepository =
+ createArtifactRepository( aliasedRepo.getId(), aliasedRepo.getUrl(), aliasedRepo.getLayout(),
+ snapshotPolicy, releasePolicy );
+
+ effectiveRepository.setAuthentication( aliasedRepo.getAuthentication() );
+
+ effectiveRepository.setProxy( aliasedRepo.getProxy() );
+
+ effectiveRepository.setMirroredRepositories( mirroredRepos );
+
+ effectiveRepositories.add( effectiveRepository );
+ }
+
+ return effectiveRepositories;
+ }
+
+ private ArtifactRepositoryPolicy getEffectivePolicy( Collection<ArtifactRepositoryPolicy> policies )
+ {
+ ArtifactRepositoryPolicy effectivePolicy = null;
+
+ for ( ArtifactRepositoryPolicy policy : policies )
+ {
+ if ( effectivePolicy == null )
+ {
+ effectivePolicy = new ArtifactRepositoryPolicy( policy );
+ }
+ else
+ {
+ effectivePolicy.merge( policy );
+ }
+ }
+
+ return effectivePolicy;
+ }
+
+ public Mirror getMirror( ArtifactRepository repository, List<Mirror> mirrors )
+ {
+ return mirrorSelector.getMirror( repository, mirrors );
+ }
+
+ public void injectMirror( List<ArtifactRepository> repositories, List<Mirror> mirrors )
+ {
+ if ( repositories != null && mirrors != null )
+ {
+ for ( ArtifactRepository repository : repositories )
+ {
+ Mirror mirror = getMirror( repository, mirrors );
+ injectMirror( repository, mirror );
+ }
+ }
+ }
+
+ private Mirror getMirror( RepositorySystemSession session, ArtifactRepository repository )
+ {
+ if ( session != null )
+ {
+ org.eclipse.aether.repository.MirrorSelector selector = session.getMirrorSelector();
+ if ( selector != null )
+ {
+ RemoteRepository repo = selector.getMirror( RepositoryUtils.toRepo( repository ) );
+ if ( repo != null )
+ {
+ Mirror mirror = new Mirror();
+ mirror.setId( repo.getId() );
+ mirror.setUrl( repo.getUrl() );
+ mirror.setLayout( repo.getContentType() );
+ return mirror;
+ }
+ }
+ }
+ return null;
+ }
+
+ public void injectMirror( RepositorySystemSession session, List<ArtifactRepository> repositories )
+ {
+ if ( repositories != null && session != null )
+ {
+ for ( ArtifactRepository repository : repositories )
+ {
+ Mirror mirror = getMirror( session, repository );
+ injectMirror( repository, mirror );
+ }
+ }
+ }
+
+ private void injectMirror( ArtifactRepository repository, Mirror mirror )
+ {
+ if ( mirror != null )
+ {
+ ArtifactRepository original =
+ createArtifactRepository( repository.getId(), repository.getUrl(), repository.getLayout(),
+ repository.getSnapshots(), repository.getReleases() );
+
+ repository.setMirroredRepositories( Collections.singletonList( original ) );
+
+ repository.setId( mirror.getId() );
+ repository.setUrl( mirror.getUrl() );
+
+ if ( StringUtils.isNotEmpty( mirror.getLayout() ) )
+ {
+ repository.setLayout( getLayout( mirror.getLayout() ) );
+ }
+ }
+ }
+
+ public void injectAuthentication( List<ArtifactRepository> repositories, List<Server> servers )
+ {
+ if ( repositories != null )
+ {
+ Map<String, Server> serversById = new HashMap<String, Server>();
+
+ if ( servers != null )
+ {
+ for ( Server server : servers )
+ {
+ if ( !serversById.containsKey( server.getId() ) )
+ {
+ serversById.put( server.getId(), server );
+ }
+ }
+ }
+
+ for ( ArtifactRepository repository : repositories )
+ {
+ Server server = serversById.get( repository.getId() );
+
+ if ( server != null )
+ {
+ SettingsDecryptionRequest request = new DefaultSettingsDecryptionRequest( server );
+ SettingsDecryptionResult result = settingsDecrypter.decrypt( request );
+ server = result.getServer();
+
+ if ( logger.isDebugEnabled() )
+ {
+ for ( SettingsProblem problem : result.getProblems() )
+ {
+ logger.debug( problem.getMessage(), problem.getException() );
+ }
+ }
+
+ Authentication authentication = new Authentication( server.getUsername(), server.getPassword() );
+ authentication.setPrivateKey( server.getPrivateKey() );
+ authentication.setPassphrase( server.getPassphrase() );
+
+ repository.setAuthentication( authentication );
+ }
+ else
+ {
+ repository.setAuthentication( null );
+ }
+ }
+ }
+ }
+
+ private Authentication getAuthentication( RepositorySystemSession session, ArtifactRepository repository )
+ {
+ if ( session != null )
+ {
+ AuthenticationSelector selector = session.getAuthenticationSelector();
+ if ( selector != null )
+ {
+ RemoteRepository repo = RepositoryUtils.toRepo( repository );
+ org.eclipse.aether.repository.Authentication auth = selector.getAuthentication( repo );
+ if ( auth != null )
+ {
+ repo = new RemoteRepository.Builder( repo ).setAuthentication( auth ).build();
+ AuthenticationContext authCtx = AuthenticationContext.forRepository( session, repo );
+ Authentication result =
+ new Authentication( authCtx.get( AuthenticationContext.USERNAME ),
+ authCtx.get( AuthenticationContext.PASSWORD ) );
+ result.setPrivateKey( authCtx.get( AuthenticationContext.PRIVATE_KEY_PATH ) );
+ result.setPassphrase( authCtx.get( AuthenticationContext.PRIVATE_KEY_PASSPHRASE ) );
+ authCtx.close();
+ return result;
+ }
+ }
+ }
+ return null;
+ }
+
+ public void injectAuthentication( RepositorySystemSession session, List<ArtifactRepository> repositories )
+ {
+ if ( repositories != null && session != null )
+ {
+ for ( ArtifactRepository repository : repositories )
+ {
+ repository.setAuthentication( getAuthentication( session, repository ) );
+ }
+ }
+ }
+
+ private org.apache.maven.settings.Proxy getProxy( ArtifactRepository repository,
+ List<org.apache.maven.settings.Proxy> proxies )
+ {
+ if ( proxies != null && repository.getProtocol() != null )
+ {
+ for ( org.apache.maven.settings.Proxy proxy : proxies )
+ {
+ if ( proxy.isActive() && repository.getProtocol().equalsIgnoreCase( proxy.getProtocol() ) )
+ {
+ if ( StringUtils.isNotEmpty( proxy.getNonProxyHosts() ) )
+ {
+ ProxyInfo pi = new ProxyInfo();
+ pi.setNonProxyHosts( proxy.getNonProxyHosts() );
+
+ org.apache.maven.wagon.repository.Repository repo =
+ new org.apache.maven.wagon.repository.Repository( repository.getId(), repository.getUrl() );
+
+ if ( !ProxyUtils.validateNonProxyHosts( pi, repo.getHost() ) )
+ {
+ return proxy;
+ }
+ }
+ else
+ {
+ return proxy;
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+
+ public void injectProxy( List<ArtifactRepository> repositories, List<org.apache.maven.settings.Proxy> proxies )
+ {
+ if ( repositories != null )
+ {
+ for ( ArtifactRepository repository : repositories )
+ {
+ org.apache.maven.settings.Proxy proxy = getProxy( repository, proxies );
+
+ if ( proxy != null )
+ {
+ SettingsDecryptionRequest request = new DefaultSettingsDecryptionRequest( proxy );
+ SettingsDecryptionResult result = settingsDecrypter.decrypt( request );
+ proxy = result.getProxy();
+
+ if ( logger.isDebugEnabled() )
+ {
+ for ( SettingsProblem problem : result.getProblems() )
+ {
+ logger.debug( problem.getMessage(), problem.getException() );
+ }
+ }
+
+ Proxy p = new Proxy();
+ p.setHost( proxy.getHost() );
+ p.setProtocol( proxy.getProtocol() );
+ p.setPort( proxy.getPort() );
+ p.setNonProxyHosts( proxy.getNonProxyHosts() );
+ p.setUserName( proxy.getUsername() );
+ p.setPassword( proxy.getPassword() );
+
+ repository.setProxy( p );
+ }
+ else
+ {
+ repository.setProxy( null );
+ }
+ }
+ }
+ }
+
+ private Proxy getProxy( RepositorySystemSession session, ArtifactRepository repository )
+ {
+ if ( session != null )
+ {
+ ProxySelector selector = session.getProxySelector();
+ if ( selector != null )
+ {
+ RemoteRepository repo = RepositoryUtils.toRepo( repository );
+ org.eclipse.aether.repository.Proxy proxy = selector.getProxy( repo );
+ if ( proxy != null )
+ {
+ Proxy p = new Proxy();
+ p.setHost( proxy.getHost() );
+ p.setProtocol( proxy.getType() );
+ p.setPort( proxy.getPort() );
+ if ( proxy.getAuthentication() != null )
+ {
+ repo = new RemoteRepository.Builder( repo ).setProxy( proxy ).build();
+ AuthenticationContext authCtx = AuthenticationContext.forProxy( session, repo );
+ p.setUserName( authCtx.get( AuthenticationContext.USERNAME ) );
+ p.setPassword( authCtx.get( AuthenticationContext.PASSWORD ) );
+ p.setNtlmDomain( authCtx.get( AuthenticationContext.NTLM_DOMAIN ) );
+ p.setNtlmHost( authCtx.get( AuthenticationContext.NTLM_WORKSTATION ) );
+ authCtx.close();
+ }
+ return p;
+ }
+ }
+ }
+ return null;
+ }
+
+ public void injectProxy( RepositorySystemSession session, List<ArtifactRepository> repositories )
+ {
+ if ( repositories != null && session != null )
+ {
+ for ( ArtifactRepository repository : repositories )
+ {
+ repository.setProxy( getProxy( session, repository ) );
+ }
+ }
+ }
+
+ public void retrieve( ArtifactRepository repository, File destination, String remotePath,
+ ArtifactTransferListener transferListener )
+ throws ArtifactTransferFailedException, ArtifactDoesNotExistException
+ {
+ try
+ {
+ wagonManager.getRemoteFile( repository, destination, remotePath,
+ TransferListenerAdapter.newAdapter( transferListener ),
+ ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN, true );
+ }
+ catch ( org.apache.maven.wagon.TransferFailedException e )
+ {
+ throw new ArtifactTransferFailedException( getMessage( e, "Error transferring artifact." ), e );
+ }
+ catch ( org.apache.maven.wagon.ResourceDoesNotExistException e )
+ {
+ throw new ArtifactDoesNotExistException( getMessage( e, "Requested artifact does not exist." ), e );
+ }
+ }
+
+ public void publish( ArtifactRepository repository, File source, String remotePath,
+ ArtifactTransferListener transferListener )
+ throws ArtifactTransferFailedException
+ {
+ try
+ {
+ wagonManager.putRemoteFile( repository, source, remotePath,
+ TransferListenerAdapter.newAdapter( transferListener ) );
+ }
+ catch ( org.apache.maven.wagon.TransferFailedException e )
+ {
+ throw new ArtifactTransferFailedException( getMessage( e, "Error transferring artifact." ), e );
+ }
+ }
+
+ //
+ // Artifact Repository Creation
+ //
+ public ArtifactRepository buildArtifactRepository( Repository repo )
+ throws InvalidRepositoryException
+ {
+ if ( repo != null )
+ {
+ String id = repo.getId();
+
+ if ( StringUtils.isEmpty( id ) )
+ {
+ throw new InvalidRepositoryException( "Repository identifier missing", "" );
+ }
+
+ String url = repo.getUrl();
+
+ if ( StringUtils.isEmpty( url ) )
+ {
+ throw new InvalidRepositoryException( "URL missing for repository " + id, id );
+ }
+
+ ArtifactRepositoryPolicy snapshots = buildArtifactRepositoryPolicy( repo.getSnapshots() );
+
+ ArtifactRepositoryPolicy releases = buildArtifactRepositoryPolicy( repo.getReleases() );
+
+ return createArtifactRepository( id, url, getLayout( repo.getLayout() ), snapshots, releases );
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ private ArtifactRepository createRepository( String url, String repositoryId, boolean releases,
+ String releaseUpdates, boolean snapshots, String snapshotUpdates,
+ String checksumPolicy )
+ {
+ ArtifactRepositoryPolicy snapshotsPolicy =
+ new ArtifactRepositoryPolicy( snapshots, snapshotUpdates, checksumPolicy );
+
+ ArtifactRepositoryPolicy releasesPolicy =
+ new ArtifactRepositoryPolicy( releases, releaseUpdates, checksumPolicy );
+
+ return createArtifactRepository( repositoryId, url, null, snapshotsPolicy, releasesPolicy );
+ }
+
+ public ArtifactRepository createArtifactRepository( String repositoryId, String url,
+ ArtifactRepositoryLayout repositoryLayout,
+ ArtifactRepositoryPolicy snapshots,
+ ArtifactRepositoryPolicy releases )
+ {
+ if ( repositoryLayout == null )
+ {
+ repositoryLayout = layouts.get( "default" );
+ }
+
+ ArtifactRepository artifactRepository =
+ artifactRepositoryFactory.createArtifactRepository( repositoryId, url, repositoryLayout, snapshots,
+ releases );
+
+ return artifactRepository;
+ }
+
+ private static String getMessage( Throwable error, String def )
+ {
+ if ( error == null )
+ {
+ return def;
+ }
+ String msg = error.getMessage();
+ if ( StringUtils.isNotEmpty( msg ) )
+ {
+ return msg;
+ }
+ return getMessage( error.getCause(), def );
+ }
+
+ private ArtifactRepositoryLayout getLayout( String id )
+ {
+ ArtifactRepositoryLayout layout = layouts.get( id );
+
+ if ( layout == null )
+ {
+ layout = new UnknownRepositoryLayout( id, layouts.get( "default" ) );
+ }
+
+ return layout;
+ }
+
+ /**
+ * In the future, the legacy system might encounter repository types for which no layout components exists because
+ * the actual communication with the repository happens via a repository connector. As a minimum, the legacy system
+ * needs to retain the id of this layout so that the content type of the remote repository can still be accurately
+ * described.
+ */
+ static class UnknownRepositoryLayout
+ implements ArtifactRepositoryLayout
+ {
+
+ private final String id;
+
+ private final ArtifactRepositoryLayout fallback;
+
+ public UnknownRepositoryLayout( String id, ArtifactRepositoryLayout fallback )
+ {
+ this.id = id;
+ this.fallback = fallback;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+
+ public String pathOf( Artifact artifact )
+ {
+ return fallback.pathOf( artifact );
+ }
+
+ public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+ {
+ return fallback.pathOfLocalRepositoryMetadata( metadata, repository );
+ }
+
+ public String pathOfRemoteRepositoryMetadata( ArtifactMetadata metadata )
+ {
+ return fallback.pathOfRemoteRepositoryMetadata( metadata );
+ }
+
+ @Override
+ public String toString()
+ {
+ return getId();
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/MavenArtifact.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/MavenArtifact.java
new file mode 100644
index 00000000..29b9b82d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/MavenArtifact.java
@@ -0,0 +1,96 @@
+package org.apache.maven.repository.legacy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.repository.ArtifactTransferResource;
+import org.apache.maven.wagon.resource.Resource;
+
+class MavenArtifact
+ implements ArtifactTransferResource
+{
+
+ private String repositoryUrl;
+
+ private Resource resource;
+
+ private long transferStartTime;
+
+ public MavenArtifact( String repositoryUrl, Resource resource )
+ {
+ if ( repositoryUrl == null )
+ {
+ this.repositoryUrl = "";
+ }
+ else if ( !repositoryUrl.endsWith( "/" ) && repositoryUrl.length() > 0 )
+ {
+ this.repositoryUrl = repositoryUrl + '/';
+ }
+ else
+ {
+ this.repositoryUrl = repositoryUrl;
+ }
+ this.resource = resource;
+
+ this.transferStartTime = System.currentTimeMillis();
+ }
+
+ public String getRepositoryUrl()
+ {
+ return repositoryUrl;
+ }
+
+ public String getName()
+ {
+ String name = resource.getName();
+
+ if ( name == null )
+ {
+ name = "";
+ }
+ else if ( name.startsWith( "/" ) )
+ {
+ name = name.substring( 1 );
+ }
+
+ return name;
+ }
+
+ public String getUrl()
+ {
+ return getRepositoryUrl() + getName();
+ }
+
+ public long getContentLength()
+ {
+ return resource.getContentLength();
+ }
+
+ public long getTransferStartTime()
+ {
+ return transferStartTime;
+ }
+
+ @Override
+ public String toString()
+ {
+ return getUrl();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/TransferListenerAdapter.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/TransferListenerAdapter.java
new file mode 100644
index 00000000..b20bd72b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/TransferListenerAdapter.java
@@ -0,0 +1,187 @@
+package org.apache.maven.repository.legacy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.IdentityHashMap;
+import java.util.Map;
+
+import org.apache.maven.repository.ArtifactTransferEvent;
+import org.apache.maven.repository.ArtifactTransferListener;
+import org.apache.maven.repository.ArtifactTransferResource;
+import org.apache.maven.wagon.events.TransferEvent;
+import org.apache.maven.wagon.events.TransferListener;
+import org.apache.maven.wagon.repository.Repository;
+import org.apache.maven.wagon.resource.Resource;
+
+public class TransferListenerAdapter
+ implements TransferListener
+{
+
+ private final ArtifactTransferListener listener;
+
+ private final Map<Resource, ArtifactTransferResource> artifacts;
+
+ private final Map<Resource, Long> transfers;
+
+ public static TransferListener newAdapter( ArtifactTransferListener listener )
+ {
+ if ( listener == null )
+ {
+ return null;
+ }
+ else
+ {
+ return new TransferListenerAdapter( listener );
+ }
+ }
+
+ private TransferListenerAdapter( ArtifactTransferListener listener )
+ {
+ this.listener = listener;
+ this.artifacts = new IdentityHashMap<Resource, ArtifactTransferResource>();
+ this.transfers = new IdentityHashMap<Resource, Long>();
+ }
+
+ public void debug( String message )
+ {
+ }
+
+ public void transferCompleted( TransferEvent transferEvent )
+ {
+ ArtifactTransferEvent event = wrap( transferEvent );
+
+ Long transferred;
+ synchronized ( transfers )
+ {
+ transferred = transfers.remove( transferEvent.getResource() );
+ }
+ if ( transferred != null )
+ {
+ event.setTransferredBytes( transferred );
+ }
+
+ synchronized ( artifacts )
+ {
+ artifacts.remove( transferEvent.getResource() );
+ }
+
+ listener.transferCompleted( event );
+ }
+
+ public void transferError( TransferEvent transferEvent )
+ {
+ synchronized ( transfers )
+ {
+ transfers.remove( transferEvent.getResource() );
+ }
+ synchronized ( artifacts )
+ {
+ artifacts.remove( transferEvent.getResource() );
+ }
+ }
+
+ public void transferInitiated( TransferEvent transferEvent )
+ {
+ listener.transferInitiated( wrap( transferEvent ) );
+ }
+
+ public void transferProgress( TransferEvent transferEvent, byte[] buffer, int length )
+ {
+ Long transferred;
+ synchronized ( transfers )
+ {
+ transferred = transfers.get( transferEvent.getResource() );
+ if ( transferred == null )
+ {
+ transferred = (long) length;
+ }
+ else
+ {
+ transferred = transferred + length;
+ }
+ transfers.put( transferEvent.getResource(), transferred );
+ }
+
+ ArtifactTransferEvent event = wrap( transferEvent );
+ event.setDataBuffer( buffer );
+ event.setDataOffset( 0 );
+ event.setDataLength( length );
+ event.setTransferredBytes( transferred );
+
+ listener.transferProgress( event );
+ }
+
+ public void transferStarted( TransferEvent transferEvent )
+ {
+ listener.transferStarted( wrap( transferEvent ) );
+ }
+
+ private ArtifactTransferEvent wrap( TransferEvent event )
+ {
+ if ( event == null )
+ {
+ return null;
+ }
+ else
+ {
+ String wagon = event.getWagon().getClass().getName();
+
+ ArtifactTransferResource artifact = wrap( event.getWagon().getRepository(), event.getResource() );
+
+ ArtifactTransferEvent evt;
+ if ( event.getException() != null )
+ {
+ evt = new ArtifactTransferEvent( wagon, event.getException(), event.getRequestType(), artifact );
+ }
+ else
+ {
+ evt = new ArtifactTransferEvent( wagon, event.getEventType(), event.getRequestType(), artifact );
+ }
+
+ evt.setLocalFile( event.getLocalFile() );
+
+ return evt;
+ }
+ }
+
+ private ArtifactTransferResource wrap( Repository repository, Resource resource )
+ {
+ if ( resource == null )
+ {
+ return null;
+ }
+ else
+ {
+ synchronized ( artifacts )
+ {
+ ArtifactTransferResource artifact = artifacts.get( resource );
+
+ if ( artifact == null )
+ {
+ artifact = new MavenArtifact( repository.getUrl(), resource );
+ artifacts.put( resource, artifact );
+ }
+
+ return artifact;
+ }
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/UpdateCheckManager.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/UpdateCheckManager.java
new file mode 100644
index 00000000..f4e969b6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/UpdateCheckManager.java
@@ -0,0 +1,41 @@
+package org.apache.maven.repository.legacy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+
+public interface UpdateCheckManager
+{
+
+ boolean isUpdateRequired( Artifact artifact, ArtifactRepository repository );
+
+ void touch( Artifact artifact, ArtifactRepository repository, String error );
+
+ String getError( Artifact artifact, ArtifactRepository repository );
+
+ boolean isUpdateRequired( RepositoryMetadata metadata, ArtifactRepository repository, File file );
+
+ void touch( RepositoryMetadata metadata, ArtifactRepository repository, File file );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/WagonConfigurationException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/WagonConfigurationException.java
new file mode 100644
index 00000000..078de00c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/WagonConfigurationException.java
@@ -0,0 +1,63 @@
+package org.apache.maven.repository.legacy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.wagon.TransferFailedException;
+
+
+public class WagonConfigurationException
+ extends TransferFailedException
+{
+
+ static final long serialVersionUID = 1;
+
+ private final String originalMessage;
+ private final String repositoryId;
+
+ public WagonConfigurationException( String repositoryId,
+ String message,
+ Throwable cause )
+ {
+ super( "While configuring wagon for \'" + repositoryId + "\': " + message, cause );
+
+ this.repositoryId = repositoryId;
+ this.originalMessage = message;
+ }
+
+ public WagonConfigurationException( String repositoryId,
+ String message )
+ {
+ super( "While configuring wagon for \'" + repositoryId + "\': " + message );
+
+ this.repositoryId = repositoryId;
+ this.originalMessage = message;
+ }
+
+ public final String getRepositoryId()
+ {
+ return repositoryId;
+ }
+
+ public final String getOriginalMessage()
+ {
+ return originalMessage;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/WagonManager.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/WagonManager.java
new file mode 100644
index 00000000..73ead269
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/WagonManager.java
@@ -0,0 +1,79 @@
+package org.apache.maven.repository.legacy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.UnsupportedProtocolException;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.events.TransferListener;
+import org.apache.maven.wagon.repository.Repository;
+
+public interface WagonManager
+{
+ @Deprecated
+ Wagon getWagon( String protocol )
+ throws UnsupportedProtocolException;
+
+ @Deprecated
+ Wagon getWagon( Repository repository )
+ throws UnsupportedProtocolException, WagonConfigurationException;
+
+ //
+ // Retriever
+ //
+ void getArtifact( Artifact artifact, ArtifactRepository repository, TransferListener transferListener, boolean force )
+ throws TransferFailedException, ResourceDoesNotExistException;
+
+ void getArtifact( Artifact artifact, List<ArtifactRepository> remoteRepositories,
+ TransferListener transferListener, boolean force )
+ throws TransferFailedException, ResourceDoesNotExistException;
+
+ void getRemoteFile( ArtifactRepository repository, File destination, String remotePath,
+ TransferListener downloadMonitor, String checksumPolicy, boolean force )
+ throws TransferFailedException, ResourceDoesNotExistException;
+
+ void getArtifactMetadata( ArtifactMetadata metadata, ArtifactRepository remoteRepository, File destination,
+ String checksumPolicy )
+ throws TransferFailedException, ResourceDoesNotExistException;
+
+ void getArtifactMetadataFromDeploymentRepository( ArtifactMetadata metadata, ArtifactRepository remoteRepository,
+ File file, String checksumPolicyWarn )
+ throws TransferFailedException, ResourceDoesNotExistException;
+
+ //
+ // Deployer
+ //
+ void putArtifact( File source, Artifact artifact, ArtifactRepository deploymentRepository,
+ TransferListener downloadMonitor )
+ throws TransferFailedException;
+
+ void putRemoteFile( ArtifactRepository repository, File source, String remotePath, TransferListener downloadMonitor )
+ throws TransferFailedException;
+
+ void putArtifactMetadata( File source, ArtifactMetadata artifactMetadata, ArtifactRepository repository )
+ throws TransferFailedException;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/ArtifactRepositoryFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/ArtifactRepositoryFactory.java
new file mode 100644
index 00000000..b982f917
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/ArtifactRepositoryFactory.java
@@ -0,0 +1,56 @@
+package org.apache.maven.repository.legacy.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.UnknownRepositoryLayoutException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+
+/** @author jdcasey */
+public interface ArtifactRepositoryFactory
+{
+
+ String DEFAULT_LAYOUT_ID = "default";
+
+ String LOCAL_REPOSITORY_ID = "local";
+
+ @Deprecated
+ ArtifactRepositoryLayout getLayout( String layoutId )
+ throws UnknownRepositoryLayoutException;
+
+ @Deprecated
+ ArtifactRepository createDeploymentArtifactRepository( String id, String url, String layoutId, boolean uniqueVersion )
+ throws UnknownRepositoryLayoutException;
+
+ ArtifactRepository createDeploymentArtifactRepository( String id, String url, ArtifactRepositoryLayout layout,
+ boolean uniqueVersion );
+
+ ArtifactRepository createArtifactRepository( String id, String url, String layoutId,
+ ArtifactRepositoryPolicy snapshots, ArtifactRepositoryPolicy releases )
+ throws UnknownRepositoryLayoutException;
+
+ ArtifactRepository createArtifactRepository( String id, String url, ArtifactRepositoryLayout repositoryLayout,
+ ArtifactRepositoryPolicy snapshots, ArtifactRepositoryPolicy releases );
+
+ void setGlobalUpdatePolicy( String snapshotPolicy );
+
+ void setGlobalChecksumPolicy( String checksumPolicy );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/DefaultArtifactRepositoryFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/DefaultArtifactRepositoryFactory.java
new file mode 100644
index 00000000..4bc91167
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/DefaultArtifactRepositoryFactory.java
@@ -0,0 +1,144 @@
+package org.apache.maven.repository.legacy.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Map;
+
+import org.apache.maven.artifact.UnknownRepositoryLayoutException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.MavenArtifactRepository;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout2;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+/**
+ * @author jdcasey
+ */
+@Component( role = ArtifactRepositoryFactory.class )
+public class DefaultArtifactRepositoryFactory
+ implements ArtifactRepositoryFactory
+{
+ // TODO: use settings?
+ private String globalUpdatePolicy;
+
+ private String globalChecksumPolicy;
+
+ @Requirement( role = ArtifactRepositoryLayout.class )
+ private Map<String, ArtifactRepositoryLayout> repositoryLayouts;
+
+ public ArtifactRepositoryLayout getLayout( String layoutId )
+ throws UnknownRepositoryLayoutException
+ {
+ return repositoryLayouts.get( layoutId );
+ }
+
+ public ArtifactRepository createDeploymentArtifactRepository( String id, String url, String layoutId,
+ boolean uniqueVersion )
+ throws UnknownRepositoryLayoutException
+ {
+ ArtifactRepositoryLayout layout = repositoryLayouts.get( layoutId );
+
+ checkLayout( id, layoutId, layout );
+
+ return createDeploymentArtifactRepository( id, url, layout, uniqueVersion );
+ }
+
+ private void checkLayout( String repositoryId, String layoutId, ArtifactRepositoryLayout layout )
+ throws UnknownRepositoryLayoutException
+ {
+ if ( layout == null )
+ {
+ throw new UnknownRepositoryLayoutException( repositoryId, layoutId );
+ }
+ }
+
+ public ArtifactRepository createDeploymentArtifactRepository( String id, String url,
+ ArtifactRepositoryLayout repositoryLayout,
+ boolean uniqueVersion )
+ {
+ return createArtifactRepository( id, url, repositoryLayout, null, null );
+ }
+
+ public ArtifactRepository createArtifactRepository( String id, String url, String layoutId,
+ ArtifactRepositoryPolicy snapshots,
+ ArtifactRepositoryPolicy releases )
+ throws UnknownRepositoryLayoutException
+ {
+ ArtifactRepositoryLayout layout = repositoryLayouts.get( layoutId );
+
+ checkLayout( id, layoutId, layout );
+
+ return createArtifactRepository( id, url, layout, snapshots, releases );
+ }
+
+ public ArtifactRepository createArtifactRepository( String id, String url,
+ ArtifactRepositoryLayout repositoryLayout,
+ ArtifactRepositoryPolicy snapshots,
+ ArtifactRepositoryPolicy releases )
+ {
+ if ( snapshots == null )
+ {
+ snapshots = new ArtifactRepositoryPolicy();
+ }
+
+ if ( releases == null )
+ {
+ releases = new ArtifactRepositoryPolicy();
+ }
+
+ if ( globalUpdatePolicy != null )
+ {
+ snapshots.setUpdatePolicy( globalUpdatePolicy );
+ releases.setUpdatePolicy( globalUpdatePolicy );
+ }
+
+ if ( globalChecksumPolicy != null )
+ {
+ snapshots.setChecksumPolicy( globalChecksumPolicy );
+ releases.setChecksumPolicy( globalChecksumPolicy );
+ }
+
+ ArtifactRepository repository;
+ if ( repositoryLayout instanceof ArtifactRepositoryLayout2 )
+ {
+ repository =
+ ( (ArtifactRepositoryLayout2) repositoryLayout ).newMavenArtifactRepository( id, url, snapshots,
+ releases );
+ }
+ else
+ {
+ repository = new MavenArtifactRepository( id, url, repositoryLayout, snapshots, releases );
+ }
+
+ return repository;
+ }
+
+ public void setGlobalUpdatePolicy( String updatePolicy )
+ {
+ globalUpdatePolicy = updatePolicy;
+ }
+
+ public void setGlobalChecksumPolicy( String checksumPolicy )
+ {
+ globalChecksumPolicy = checksumPolicy;
+ }
+ }
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/DefaultLegacyArtifactCollector.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/DefaultLegacyArtifactCollector.java
new file mode 100644
index 00000000..f734416b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/DefaultLegacyArtifactCollector.java
@@ -0,0 +1,796 @@
+package org.apache.maven.repository.legacy.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.metadata.ResolutionGroup;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.artifact.resolver.CyclicDependencyException;
+import org.apache.maven.artifact.resolver.ResolutionListener;
+import org.apache.maven.artifact.resolver.ResolutionListenerForDepMgmt;
+import org.apache.maven.artifact.resolver.ResolutionNode;
+import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.ManagedVersionMap;
+import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.repository.legacy.metadata.ArtifactMetadataRetrievalException;
+import org.apache.maven.repository.legacy.metadata.DefaultMetadataResolutionRequest;
+import org.apache.maven.repository.legacy.metadata.MetadataResolutionRequest;
+import org.apache.maven.repository.legacy.resolver.conflict.ConflictResolver;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+
+/**
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @author Jason van Zyl
+ */
+@Component( role = LegacyArtifactCollector.class )
+public class DefaultLegacyArtifactCollector
+ implements LegacyArtifactCollector
+{
+ @Requirement( hint = "nearest" )
+ private ConflictResolver defaultConflictResolver;
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private LegacySupport legacySupport;
+
+ private void injectSession( ArtifactResolutionRequest request )
+ {
+ MavenSession session = legacySupport.getSession();
+
+ if ( session != null )
+ {
+ request.setOffline( session.isOffline() );
+ request.setForceUpdate( session.getRequest().isUpdateSnapshots() );
+ request.setServers( session.getRequest().getServers() );
+ request.setMirrors( session.getRequest().getMirrors() );
+ request.setProxies( session.getRequest().getProxies() );
+ }
+ }
+
+ public ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact,
+ Map managedVersions, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ List<ResolutionListener> listeners,
+ List<ConflictResolver> conflictResolvers )
+ {
+ ArtifactResolutionRequest request = new ArtifactResolutionRequest();
+ request.setLocalRepository( localRepository );
+ request.setRemoteRepositories( remoteRepositories );
+ injectSession( request );
+ return collect( artifacts, originatingArtifact, managedVersions, request, source, filter, listeners,
+ conflictResolvers );
+ }
+
+ public ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact,
+ Map managedVersions, ArtifactResolutionRequest repositoryRequest,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ List<ResolutionListener> listeners,
+ List<ConflictResolver> conflictResolvers )
+ {
+ ArtifactResolutionResult result = new ArtifactResolutionResult();
+
+ result.setOriginatingArtifact( originatingArtifact );
+
+ if ( conflictResolvers == null )
+ {
+ conflictResolvers = Collections.singletonList( defaultConflictResolver );
+ }
+
+ Map<Object, List<ResolutionNode>> resolvedArtifacts = new LinkedHashMap<Object, List<ResolutionNode>>();
+
+ ResolutionNode root = new ResolutionNode( originatingArtifact, repositoryRequest.getRemoteRepositories() );
+
+ try
+ {
+ root.addDependencies( artifacts, repositoryRequest.getRemoteRepositories(), filter );
+ }
+ catch ( CyclicDependencyException e )
+ {
+ result.addCircularDependencyException( e );
+
+ return result;
+ }
+ catch ( OverConstrainedVersionException e )
+ {
+ result.addVersionRangeViolation( e );
+
+ return result;
+ }
+
+ ManagedVersionMap versionMap = getManagedVersionsMap( originatingArtifact, managedVersions );
+
+ try
+ {
+ recurse( result, root, resolvedArtifacts, versionMap, repositoryRequest, source, filter, listeners,
+ conflictResolvers );
+ }
+ catch ( CyclicDependencyException e )
+ {
+ logger.debug( "While recursing: " + e.getMessage(), e );
+ result.addCircularDependencyException( e );
+ }
+ catch ( OverConstrainedVersionException e )
+ {
+ logger.debug( "While recursing: " + e.getMessage(), e );
+ result.addVersionRangeViolation( e );
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ logger.debug( "While recursing: " + e.getMessage(), e );
+ result.addErrorArtifactException( e );
+ }
+
+ Set<ResolutionNode> set = new LinkedHashSet<ResolutionNode>();
+
+ for ( List<ResolutionNode> nodes : resolvedArtifacts.values() )
+ {
+ for ( ResolutionNode node : nodes )
+ {
+ if ( !node.equals( root ) && node.isActive() )
+ {
+ Artifact artifact = node.getArtifact();
+
+ try
+ {
+ if ( node.filterTrail( filter ) )
+ {
+ // If it was optional and not a direct dependency,
+ // we don't add it or its children, just allow the update of the version and artifactScope
+ if ( node.isChildOfRootNode() || !artifact.isOptional() )
+ {
+ artifact.setDependencyTrail( node.getDependencyTrail() );
+
+ set.add( node );
+
+ // This is required right now.
+ result.addArtifact( artifact );
+ }
+ }
+ }
+ catch ( OverConstrainedVersionException e )
+ {
+ result.addVersionRangeViolation( e );
+ }
+ }
+ }
+ }
+
+ result.setArtifactResolutionNodes( set );
+
+ return result;
+ }
+
+ /**
+ * Get the map of managed versions, removing the originating artifact if it is also in managed versions
+ *
+ * @param originatingArtifact artifact we are processing
+ * @param managedVersions original managed versions
+ */
+ private ManagedVersionMap getManagedVersionsMap( Artifact originatingArtifact, Map managedVersions )
+ {
+ ManagedVersionMap versionMap;
+ if ( ( managedVersions != null ) && ( managedVersions instanceof ManagedVersionMap ) )
+ {
+ versionMap = (ManagedVersionMap) managedVersions;
+ }
+ else
+ {
+ versionMap = new ManagedVersionMap( managedVersions );
+ }
+
+ /* remove the originating artifact if it is also in managed versions to avoid being modified during resolution */
+ Artifact managedOriginatingArtifact = versionMap.get( originatingArtifact.getDependencyConflictId() );
+
+ if ( managedOriginatingArtifact != null )
+ {
+ // TODO we probably want to warn the user that he is building an artifact with
+ // different values than in dependencyManagement
+ if ( managedVersions instanceof ManagedVersionMap )
+ {
+ /* avoid modifying the managedVersions parameter creating a new map */
+ versionMap = new ManagedVersionMap( managedVersions );
+ }
+ versionMap.remove( originatingArtifact.getDependencyConflictId() );
+ }
+
+ return versionMap;
+ }
+
+ private void recurse( ArtifactResolutionResult result, ResolutionNode node,
+ Map<Object, List<ResolutionNode>> resolvedArtifacts, ManagedVersionMap managedVersions,
+ ArtifactResolutionRequest request, ArtifactMetadataSource source, ArtifactFilter filter,
+ List<ResolutionListener> listeners, List<ConflictResolver> conflictResolvers )
+ throws ArtifactResolutionException
+ {
+ fireEvent( ResolutionListener.TEST_ARTIFACT, listeners, node );
+
+ Object key = node.getKey();
+
+ // TODO: Does this check need to happen here? Had to add the same call
+ // below when we iterate on child nodes -- will that suffice?
+ if ( managedVersions.containsKey( key ) )
+ {
+ manageArtifact( node, managedVersions, listeners );
+ }
+
+ List<ResolutionNode> previousNodes = resolvedArtifacts.get( key );
+
+ if ( previousNodes != null )
+ {
+ for ( ResolutionNode previous : previousNodes )
+ {
+ try
+ {
+ if ( previous.isActive() )
+ {
+ // Version mediation
+ VersionRange previousRange = previous.getArtifact().getVersionRange();
+ VersionRange currentRange = node.getArtifact().getVersionRange();
+
+ if ( ( previousRange != null ) && ( currentRange != null ) )
+ {
+ // TODO: shouldn't need to double up on this work, only done for simplicity of handling
+ // recommended
+ // version but the restriction is identical
+ VersionRange newRange = previousRange.restrict( currentRange );
+ // TODO: ick. this forces the OCE that should have come from the previous call. It is still
+ // correct
+ if ( newRange.isSelectedVersionKnown( previous.getArtifact() ) )
+ {
+ fireEvent( ResolutionListener.RESTRICT_RANGE, listeners, node, previous.getArtifact(),
+ newRange );
+ }
+ previous.getArtifact().setVersionRange( newRange );
+ node.getArtifact().setVersionRange( currentRange.restrict( previousRange ) );
+
+ // Select an appropriate available version from the (now restricted) range
+ // Note this version was selected before to get the appropriate POM
+ // But it was reset by the call to setVersionRange on restricting the version
+ ResolutionNode[] resetNodes = { previous, node };
+ for ( int j = 0; j < 2; j++ )
+ {
+ Artifact resetArtifact = resetNodes[j].getArtifact();
+
+ // MNG-2123: if the previous node was not a range, then it wouldn't have any available
+ // versions. We just clobbered the selected version above. (why? i have no idea.)
+ // So since we are here and this is ranges we must go figure out the version (for a
+ // third time...)
+ if ( resetArtifact.getVersion() == null && resetArtifact.getVersionRange() != null )
+ {
+
+ // go find the version. This is a total hack. See previous comment.
+ List<ArtifactVersion> versions = resetArtifact.getAvailableVersions();
+ if ( versions == null )
+ {
+ try
+ {
+ MetadataResolutionRequest metadataRequest =
+ new DefaultMetadataResolutionRequest( request );
+ metadataRequest.setArtifact( resetArtifact );
+ versions = source.retrieveAvailableVersions( metadataRequest );
+ resetArtifact.setAvailableVersions( versions );
+ }
+ catch ( ArtifactMetadataRetrievalException e )
+ {
+ resetArtifact.setDependencyTrail( node.getDependencyTrail() );
+ throw new ArtifactResolutionException(
+ "Unable to get dependency information: "
+ + e.getMessage(), resetArtifact,
+ request.getRemoteRepositories(), e );
+ }
+ }
+ // end hack
+
+ // MNG-2861: match version can return null
+ ArtifactVersion selectedVersion =
+ resetArtifact.getVersionRange().matchVersion( resetArtifact.getAvailableVersions() );
+ if ( selectedVersion != null )
+ {
+ resetArtifact.selectVersion( selectedVersion.toString() );
+ }
+ else
+ {
+ throw new OverConstrainedVersionException( " Unable to find a version in "
+ + resetArtifact.getAvailableVersions() + " to match the range "
+ + resetArtifact.getVersionRange(), resetArtifact );
+ }
+
+ fireEvent( ResolutionListener.SELECT_VERSION_FROM_RANGE, listeners, resetNodes[j] );
+ }
+ }
+ }
+
+ // Conflict Resolution
+ ResolutionNode resolved = null;
+ for ( Iterator j = conflictResolvers.iterator(); ( resolved == null ) && j.hasNext(); )
+ {
+ ConflictResolver conflictResolver = (ConflictResolver) j.next();
+
+ resolved = conflictResolver.resolveConflict( previous, node );
+ }
+
+ if ( resolved == null )
+ {
+ // TODO: add better exception that can detail the two conflicting artifacts
+ ArtifactResolutionException are =
+ new ArtifactResolutionException( "Cannot resolve artifact version conflict between "
+ + previous.getArtifact().getVersion() + " and " + node.getArtifact().getVersion(),
+ previous.getArtifact() );
+ result.addVersionRangeViolation( are );
+ }
+
+ if ( ( resolved != previous ) && ( resolved != node ) )
+ {
+ // TODO: add better exception
+ result.addVersionRangeViolation( new ArtifactResolutionException(
+ "Conflict resolver returned unknown resolution node: ",
+ resolved.getArtifact() ) );
+ }
+
+ // TODO: should this be part of mediation?
+ // previous one is more dominant
+ ResolutionNode nearest;
+ ResolutionNode farthest;
+
+ if ( resolved == previous )
+ {
+ nearest = previous;
+ farthest = node;
+ }
+ else
+ {
+ nearest = node;
+ farthest = previous;
+ }
+
+ if ( checkScopeUpdate( farthest, nearest, listeners ) )
+ {
+ // if we need to update artifactScope of nearest to use farthest artifactScope, use the
+ // nearest version, but farthest artifactScope
+ nearest.disable();
+ farthest.getArtifact().setVersion( nearest.getArtifact().getVersion() );
+ fireEvent( ResolutionListener.OMIT_FOR_NEARER, listeners, nearest, farthest.getArtifact() );
+ }
+ else
+ {
+ farthest.disable();
+ fireEvent( ResolutionListener.OMIT_FOR_NEARER, listeners, farthest, nearest.getArtifact() );
+ }
+ }
+ }
+ catch ( OverConstrainedVersionException e )
+ {
+ result.addVersionRangeViolation( e );
+ }
+ }
+ }
+ else
+ {
+ previousNodes = new ArrayList<ResolutionNode>();
+
+ resolvedArtifacts.put( key, previousNodes );
+ }
+ previousNodes.add( node );
+
+ if ( node.isActive() )
+ {
+ fireEvent( ResolutionListener.INCLUDE_ARTIFACT, listeners, node );
+ }
+
+ // don't pull in the transitive deps of a system-scoped dependency.
+ if ( node.isActive() && !Artifact.SCOPE_SYSTEM.equals( node.getArtifact().getScope() ) )
+ {
+ fireEvent( ResolutionListener.PROCESS_CHILDREN, listeners, node );
+
+ Artifact parentArtifact = node.getArtifact();
+
+ for ( Iterator i = node.getChildrenIterator(); i.hasNext(); )
+ {
+ ResolutionNode child = (ResolutionNode) i.next();
+
+ try
+ {
+
+ // We leave in optional ones, but don't pick up its dependencies
+ if ( !child.isResolved() && ( !child.getArtifact().isOptional() || child.isChildOfRootNode() ) )
+ {
+ Artifact artifact = child.getArtifact();
+ artifact.setDependencyTrail( node.getDependencyTrail() );
+ List<ArtifactRepository> childRemoteRepositories = child.getRemoteRepositories();
+
+ MetadataResolutionRequest metadataRequest =
+ new DefaultMetadataResolutionRequest( request );
+ metadataRequest.setArtifact( artifact );
+ metadataRequest.setRemoteRepositories( childRemoteRepositories );
+
+ try
+ {
+ ResolutionGroup rGroup;
+
+ Object childKey;
+ do
+ {
+ childKey = child.getKey();
+
+ if ( managedVersions.containsKey( childKey ) )
+ {
+ // If this child node is a managed dependency, ensure
+ // we are using the dependency management version
+ // of this child if applicable b/c we want to use the
+ // managed version's POM, *not* any other version's POM.
+ // We retrieve the POM below in the retrieval step.
+ manageArtifact( child, managedVersions, listeners );
+
+ // Also, we need to ensure that any exclusions it presents are
+ // added to the artifact before we retrive the metadata
+ // for the artifact; otherwise we may end up with unwanted
+ // dependencies.
+ Artifact ma = managedVersions.get( childKey );
+ ArtifactFilter managedExclusionFilter = ma.getDependencyFilter();
+ if ( null != managedExclusionFilter )
+ {
+ if ( null != artifact.getDependencyFilter() )
+ {
+ AndArtifactFilter aaf = new AndArtifactFilter();
+ aaf.add( artifact.getDependencyFilter() );
+ aaf.add( managedExclusionFilter );
+ artifact.setDependencyFilter( aaf );
+ }
+ else
+ {
+ artifact.setDependencyFilter( managedExclusionFilter );
+ }
+ }
+ }
+
+ if ( artifact.getVersion() == null )
+ {
+ // set the recommended version
+ // TODO: maybe its better to just pass the range through to retrieval and use a
+ // transformation?
+ ArtifactVersion version;
+ if ( !artifact.isSelectedVersionKnown() )
+ {
+ List<ArtifactVersion> versions = artifact.getAvailableVersions();
+ if ( versions == null )
+ {
+ versions = source.retrieveAvailableVersions( metadataRequest );
+ artifact.setAvailableVersions( versions );
+ }
+
+ Collections.sort( versions );
+
+ VersionRange versionRange = artifact.getVersionRange();
+
+ version = versionRange.matchVersion( versions );
+
+ if ( version == null )
+ {
+ if ( versions.isEmpty() )
+ {
+ throw new OverConstrainedVersionException(
+ "No versions are present in the repository for the artifact with a range "
+ + versionRange,
+ artifact,
+ childRemoteRepositories );
+ }
+
+ throw new OverConstrainedVersionException( "Couldn't find a version in "
+ + versions + " to match range " + versionRange, artifact,
+ childRemoteRepositories );
+ }
+ }
+ else
+ {
+ version = artifact.getSelectedVersion();
+ }
+
+ artifact.selectVersion( version.toString() );
+ fireEvent( ResolutionListener.SELECT_VERSION_FROM_RANGE, listeners, child );
+ }
+
+ rGroup = source.retrieve( metadataRequest );
+
+ if ( rGroup == null )
+ {
+ break;
+ }
+ }
+ while( !childKey.equals( child.getKey() ) );
+
+ if ( parentArtifact != null && parentArtifact.getDependencyFilter() != null
+ && !parentArtifact.getDependencyFilter().include( artifact ) )
+ {
+ // MNG-3769: the [probably relocated] artifact is excluded.
+ // We could process exclusions on relocated artifact details in the
+ // MavenMetadataSource.createArtifacts(..) step, BUT that would
+ // require resolving the POM from the repository very early on in
+ // the build.
+ continue;
+ }
+
+ // TODO might be better to have source.retrieve() throw a specific exception for this
+ // situation
+ // and catch here rather than have it return null
+ if ( rGroup == null )
+ {
+ // relocated dependency artifact is declared excluded, no need to add and recurse
+ // further
+ continue;
+ }
+
+ child.addDependencies( rGroup.getArtifacts(), rGroup.getResolutionRepositories(), filter );
+
+ }
+ catch ( CyclicDependencyException e )
+ {
+ // would like to throw this, but we have crappy stuff in the repo
+
+ fireEvent( ResolutionListener.OMIT_FOR_CYCLE, listeners,
+ new ResolutionNode( e.getArtifact(), childRemoteRepositories, child ) );
+ }
+ catch ( ArtifactMetadataRetrievalException e )
+ {
+ artifact.setDependencyTrail( node.getDependencyTrail() );
+
+ throw new ArtifactResolutionException( "Unable to get dependency information for "
+ + artifact.getId() + ": " + e.getMessage(), artifact, childRemoteRepositories, e );
+ }
+
+ ArtifactResolutionRequest subRequest = new ArtifactResolutionRequest( metadataRequest );
+ subRequest.setServers( request.getServers() );
+ subRequest.setMirrors( request.getMirrors() );
+ subRequest.setProxies( request.getProxies() );
+ recurse( result, child, resolvedArtifacts, managedVersions, subRequest, source, filter,
+ listeners, conflictResolvers );
+ }
+ }
+ catch ( OverConstrainedVersionException e )
+ {
+ result.addVersionRangeViolation( e );
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ result.addMetadataResolutionException( e );
+ }
+ }
+
+ fireEvent( ResolutionListener.FINISH_PROCESSING_CHILDREN, listeners, node );
+ }
+ }
+
+ private void manageArtifact( ResolutionNode node, ManagedVersionMap managedVersions,
+ List<ResolutionListener> listeners )
+ {
+ Artifact artifact = managedVersions.get( node.getKey() );
+
+ // Before we update the version of the artifact, we need to know
+ // whether we are working on a transitive dependency or not. This
+ // allows depMgmt to always override transitive dependencies, while
+ // explicit child override depMgmt (viz. depMgmt should only
+ // provide defaults to children, but should override transitives).
+ // We can do this by calling isChildOfRootNode on the current node.
+
+ if ( ( artifact.getVersion() != null )
+ && ( !node.isChildOfRootNode() || node.getArtifact().getVersion() == null ) )
+ {
+ fireEvent( ResolutionListener.MANAGE_ARTIFACT_VERSION, listeners, node, artifact );
+ node.getArtifact().setVersion( artifact.getVersion() );
+ }
+
+ if ( ( artifact.getScope() != null ) && ( !node.isChildOfRootNode() || node.getArtifact().getScope() == null ) )
+ {
+ fireEvent( ResolutionListener.MANAGE_ARTIFACT_SCOPE, listeners, node, artifact );
+ node.getArtifact().setScope( artifact.getScope() );
+ }
+
+ if ( Artifact.SCOPE_SYSTEM.equals( node.getArtifact().getScope() ) && ( node.getArtifact().getFile() == null )
+ && ( artifact.getFile() != null ) )
+ {
+ fireEvent( ResolutionListener.MANAGE_ARTIFACT_SYSTEM_PATH, listeners, node, artifact );
+ node.getArtifact().setFile( artifact.getFile() );
+ }
+ }
+
+ /**
+ * Check if the artifactScope needs to be updated. <a
+ * href="http://docs.codehaus.org/x/IGU#DependencyMediationandConflictResolution-Scoperesolution">More info</a>.
+ *
+ * @param farthest farthest resolution node
+ * @param nearest nearest resolution node
+ * @param listeners
+ */
+ boolean checkScopeUpdate( ResolutionNode farthest, ResolutionNode nearest, List<ResolutionListener> listeners )
+ {
+ boolean updateScope = false;
+ Artifact farthestArtifact = farthest.getArtifact();
+ Artifact nearestArtifact = nearest.getArtifact();
+
+ /* farthest is runtime and nearest has lower priority, change to runtime */
+ if ( Artifact.SCOPE_RUNTIME.equals( farthestArtifact.getScope() )
+ && ( Artifact.SCOPE_TEST.equals( nearestArtifact.getScope() )
+ || Artifact.SCOPE_PROVIDED.equals( nearestArtifact.getScope() ) ) )
+ {
+ updateScope = true;
+ }
+
+ /* farthest is compile and nearest is not (has lower priority), change to compile */
+ if ( Artifact.SCOPE_COMPILE.equals( farthestArtifact.getScope() )
+ && !Artifact.SCOPE_COMPILE.equals( nearestArtifact.getScope() ) )
+ {
+ updateScope = true;
+ }
+
+ /* current POM rules all, if nearest is in current pom, do not update its artifactScope */
+ if ( ( nearest.getDepth() < 2 ) && updateScope )
+ {
+ updateScope = false;
+
+ fireEvent( ResolutionListener.UPDATE_SCOPE_CURRENT_POM, listeners, nearest, farthestArtifact );
+ }
+
+ if ( updateScope )
+ {
+ fireEvent( ResolutionListener.UPDATE_SCOPE, listeners, nearest, farthestArtifact );
+
+ // previously we cloned the artifact, but it is more effecient to just update the artifactScope
+ // if problems are later discovered that the original object needs its original artifactScope value, cloning
+ // may
+ // again be appropriate
+ nearestArtifact.setScope( farthestArtifact.getScope() );
+ }
+
+ return updateScope;
+ }
+
+ private void fireEvent( int event, List<ResolutionListener> listeners, ResolutionNode node )
+ {
+ fireEvent( event, listeners, node, null );
+ }
+
+ private void fireEvent( int event, List<ResolutionListener> listeners, ResolutionNode node, Artifact replacement )
+ {
+ fireEvent( event, listeners, node, replacement, null );
+ }
+
+ private void fireEvent( int event, List<ResolutionListener> listeners, ResolutionNode node, Artifact replacement,
+ VersionRange newRange )
+ {
+ for ( ResolutionListener listener : listeners )
+ {
+ switch ( event )
+ {
+ case ResolutionListener.TEST_ARTIFACT:
+ listener.testArtifact( node.getArtifact() );
+ break;
+ case ResolutionListener.PROCESS_CHILDREN:
+ listener.startProcessChildren( node.getArtifact() );
+ break;
+ case ResolutionListener.FINISH_PROCESSING_CHILDREN:
+ listener.endProcessChildren( node.getArtifact() );
+ break;
+ case ResolutionListener.INCLUDE_ARTIFACT:
+ listener.includeArtifact( node.getArtifact() );
+ break;
+ case ResolutionListener.OMIT_FOR_NEARER:
+ listener.omitForNearer( node.getArtifact(), replacement );
+ break;
+ case ResolutionListener.OMIT_FOR_CYCLE:
+ listener.omitForCycle( node.getArtifact() );
+ break;
+ case ResolutionListener.UPDATE_SCOPE:
+ listener.updateScope( node.getArtifact(), replacement.getScope() );
+ break;
+ case ResolutionListener.UPDATE_SCOPE_CURRENT_POM:
+ listener.updateScopeCurrentPom( node.getArtifact(), replacement.getScope() );
+ break;
+ case ResolutionListener.MANAGE_ARTIFACT_VERSION:
+ if ( listener instanceof ResolutionListenerForDepMgmt )
+ {
+ ResolutionListenerForDepMgmt asImpl = (ResolutionListenerForDepMgmt) listener;
+ asImpl.manageArtifactVersion( node.getArtifact(), replacement );
+ }
+ else
+ {
+ listener.manageArtifact( node.getArtifact(), replacement );
+ }
+ break;
+ case ResolutionListener.MANAGE_ARTIFACT_SCOPE:
+ if ( listener instanceof ResolutionListenerForDepMgmt )
+ {
+ ResolutionListenerForDepMgmt asImpl = (ResolutionListenerForDepMgmt) listener;
+ asImpl.manageArtifactScope( node.getArtifact(), replacement );
+ }
+ else
+ {
+ listener.manageArtifact( node.getArtifact(), replacement );
+ }
+ break;
+ case ResolutionListener.MANAGE_ARTIFACT_SYSTEM_PATH:
+ if ( listener instanceof ResolutionListenerForDepMgmt )
+ {
+ ResolutionListenerForDepMgmt asImpl = (ResolutionListenerForDepMgmt) listener;
+ asImpl.manageArtifactSystemPath( node.getArtifact(), replacement );
+ }
+ else
+ {
+ listener.manageArtifact( node.getArtifact(), replacement );
+ }
+ break;
+ case ResolutionListener.SELECT_VERSION_FROM_RANGE:
+ listener.selectVersionFromRange( node.getArtifact() );
+ break;
+ case ResolutionListener.RESTRICT_RANGE:
+ if ( node.getArtifact().getVersionRange().hasRestrictions()
+ || replacement.getVersionRange().hasRestrictions() )
+ {
+ listener.restrictRange( node.getArtifact(), replacement, newRange );
+ }
+ break;
+ default:
+ throw new IllegalStateException( "Unknown event: " + event );
+ }
+ }
+ }
+
+ public ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact,
+ Map managedVersions, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ List<ResolutionListener> listeners )
+ {
+ return collect( artifacts, originatingArtifact, managedVersions, localRepository, remoteRepositories, source,
+ filter, listeners, null );
+ }
+
+ public ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact,
+ ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ List<ResolutionListener> listeners )
+ {
+ return collect( artifacts, originatingArtifact, null, localRepository, remoteRepositories, source, filter,
+ listeners );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/LegacyArtifactCollector.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/LegacyArtifactCollector.java
new file mode 100644
index 00000000..fa7fb7a4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/LegacyArtifactCollector.java
@@ -0,0 +1,62 @@
+package org.apache.maven.repository.legacy.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.artifact.resolver.ResolutionListener;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.repository.legacy.resolver.conflict.ConflictResolver;
+
+/**
+ * Artifact collector - takes a set of original artifacts and resolves all of the best versions to use
+ * along with their metadata. No artifacts are downloaded.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+@Deprecated
+public interface LegacyArtifactCollector
+{
+
+ ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact, Map managedVersions,
+ ArtifactResolutionRequest repositoryRequest, ArtifactMetadataSource source,
+ ArtifactFilter filter, List<ResolutionListener> listeners,
+ List<ConflictResolver> conflictResolvers );
+
+ ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact, Map managedVersions,
+ ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ List<ResolutionListener> listeners, List<ConflictResolver> conflictResolvers );
+
+ // used by maven-dependency-tree and maven-dependency-plugin
+ @Deprecated
+ ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact, Map managedVersions,
+ ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ List<ResolutionListener> listeners );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/ConflictResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/ConflictResolver.java
new file mode 100644
index 00000000..4d129b7e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/ConflictResolver.java
@@ -0,0 +1,44 @@
+package org.apache.maven.repository.legacy.resolver.conflict;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.resolver.ResolutionNode;
+
+/**
+ * Determines which version of an artifact to use when there are conflicting declarations.
+ *
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
+ */
+public interface ConflictResolver
+{
+ String ROLE = ConflictResolver.class.getName();
+
+ /**
+ * Determines which of the specified versions of an artifact to use when there are conflicting declarations.
+ *
+ * @param node1 the first artifact declaration
+ * @param node2 the second artifact declaration
+ * @return the artifact declaration to use: <code>node1</code>; <code>node2</code>; or <code>null</code>if
+ * this conflict cannot be resolved
+ * @since 3.0
+ */
+ ResolutionNode resolveConflict( ResolutionNode node1, ResolutionNode node2 );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/ConflictResolverFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/ConflictResolverFactory.java
new file mode 100644
index 00000000..8f3f9f43
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/ConflictResolverFactory.java
@@ -0,0 +1,48 @@
+package org.apache.maven.repository.legacy.resolver.conflict;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * A factory that produces conflict resolvers of various types.
+ *
+ * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
+ * @see ConflictResolver
+ * @since 3.0
+ */
+public interface ConflictResolverFactory
+{
+ // constants --------------------------------------------------------------
+
+ /** The plexus role for this component. */
+ String ROLE = ConflictResolverFactory.class.getName();
+
+ // methods ----------------------------------------------------------------
+
+ /**
+ * Gets a conflict resolver of the specified type.
+ *
+ * @param type the type of conflict resolver to obtain
+ * @return the conflict resolver
+ * @throws ConflictResolverNotFoundException
+ * if the specified type was not found
+ */
+ ConflictResolver getConflictResolver( String type )
+ throws ConflictResolverNotFoundException;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/ConflictResolverNotFoundException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/ConflictResolverNotFoundException.java
new file mode 100644
index 00000000..b5f61ed1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/ConflictResolverNotFoundException.java
@@ -0,0 +1,47 @@
+package org.apache.maven.repository.legacy.resolver.conflict;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Indicates that a specified conflict resolver implementation could not be found.
+ *
+ * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
+ * @since 3.0
+ */
+public class ConflictResolverNotFoundException
+ extends Exception
+{
+ // constants --------------------------------------------------------------
+
+ /** The serial version ID. */
+ private static final long serialVersionUID = 3372412184339653914L;
+
+ // constructors -----------------------------------------------------------
+
+ /**
+ * Creates a new <code>ConflictResolverNotFoundException</code> with the specified message.
+ *
+ * @param message the message
+ */
+ public ConflictResolverNotFoundException( String message )
+ {
+ super( message );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/DefaultConflictResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/DefaultConflictResolver.java
new file mode 100644
index 00000000..76f1929d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/DefaultConflictResolver.java
@@ -0,0 +1,36 @@
+package org.apache.maven.repository.legacy.resolver.conflict;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * The default conflict resolver that delegates to the nearest strategy.
+ *
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ * @see NearestConflictResolver
+ * @deprecated As of 3.0, use a specific implementation instead, e.g. {@link NearestConflictResolver}
+ */
+@Deprecated
+@Component( role = ConflictResolver.class )
+public class DefaultConflictResolver
+ extends NearestConflictResolver
+{
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/DefaultConflictResolverFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/DefaultConflictResolverFactory.java
new file mode 100644
index 00000000..66716d1e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/DefaultConflictResolverFactory.java
@@ -0,0 +1,80 @@
+package org.apache.maven.repository.legacy.resolver.conflict;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
+
+/**
+ * A conflict resolver factory that obtains instances from a plexus container.
+ *
+ * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
+ * @todo you don't need the container in here with the active maps (jvz).
+ * @since 3.0
+ */
+@Component( role = ConflictResolverFactory.class )
+public class DefaultConflictResolverFactory
+ implements ConflictResolverFactory, Contextualizable
+{
+ // fields -----------------------------------------------------------------
+
+ /**
+ * The plexus container used to obtain instances from.
+ */
+ @Requirement
+ private PlexusContainer container;
+
+ // ConflictResolverFactory methods ----------------------------------------
+
+ /*
+ * @see org.apache.maven.artifact.resolver.conflict.ConflictResolverFactory#getConflictResolver(java.lang.String)
+ */
+
+ public ConflictResolver getConflictResolver( String type )
+ throws ConflictResolverNotFoundException
+ {
+ try
+ {
+ return (ConflictResolver) container.lookup( ConflictResolver.ROLE, type );
+ }
+ catch ( ComponentLookupException exception )
+ {
+ throw new ConflictResolverNotFoundException( "Cannot find conflict resolver of type: " + type );
+ }
+ }
+
+ // Contextualizable methods -----------------------------------------------
+
+ /*
+ * @see org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable#contextualize(org.codehaus.plexus.context.Context)
+ */
+
+ public void contextualize( Context context )
+ throws ContextException
+ {
+ container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/FarthestConflictResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/FarthestConflictResolver.java
new file mode 100644
index 00000000..726e9a6d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/FarthestConflictResolver.java
@@ -0,0 +1,47 @@
+package org.apache.maven.repository.legacy.resolver.conflict;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.resolver.ResolutionNode;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Resolves conflicting artifacts by always selecting the <em>farthest</em> declaration. Farthest is defined as the
+ * declaration that has the most transitive steps away from the project being built.
+ *
+ * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
+ * @since 3.0
+ */
+@Component( role = ConflictResolver.class, hint = "farthest" )
+public class FarthestConflictResolver
+ implements ConflictResolver
+{
+ // ConflictResolver methods -----------------------------------------------
+
+ /*
+ * @see org.apache.maven.artifact.resolver.conflict.ConflictResolver#resolveConflict(org.apache.maven.artifact.resolver.ResolutionNode,
+ * org.apache.maven.artifact.resolver.ResolutionNode)
+ */
+
+ public ResolutionNode resolveConflict( ResolutionNode node1, ResolutionNode node2 )
+ {
+ return node1.getDepth() >= node2.getDepth() ? node1 : node2;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/NearestConflictResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/NearestConflictResolver.java
new file mode 100644
index 00000000..338baed6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/NearestConflictResolver.java
@@ -0,0 +1,48 @@
+package org.apache.maven.repository.legacy.resolver.conflict;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.resolver.ResolutionNode;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Resolves conflicting artifacts by always selecting the <em>nearest</em> declaration. Nearest is defined as the
+ * declaration that has the least transitive steps away from the project being built.
+ *
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
+ * @since 3.0
+ */
+@Component( role = ConflictResolver.class, hint = "nearest" )
+public class NearestConflictResolver
+ implements ConflictResolver
+{
+ // ConflictResolver methods -----------------------------------------------
+
+ /*
+ * @see org.apache.maven.artifact.resolver.conflict.ConflictResolver#resolveConflict(org.apache.maven.artifact.resolver.ResolutionNode,
+ * org.apache.maven.artifact.resolver.ResolutionNode)
+ */
+
+ public ResolutionNode resolveConflict( ResolutionNode node1, ResolutionNode node2 )
+ {
+ return node1.getDepth() <= node2.getDepth() ? node1 : node2;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolver.java
new file mode 100644
index 00000000..1879a813
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolver.java
@@ -0,0 +1,62 @@
+package org.apache.maven.repository.legacy.resolver.conflict;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.resolver.ResolutionNode;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Resolves conflicting artifacts by always selecting the <em>newest</em> declaration. Newest is defined as the
+ * declaration whose version is greater according to <code>ArtifactVersion.compareTo</code>.
+ *
+ * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
+ * @see ArtifactVersion#compareTo
+ * @since 3.0
+ */
+@Component( role = ConflictResolver.class, hint = "newest" )
+public class NewestConflictResolver
+ implements ConflictResolver
+{
+ // ConflictResolver methods -----------------------------------------------
+
+ /*
+ * @see org.apache.maven.artifact.resolver.conflict.ConflictResolver#resolveConflict(org.apache.maven.artifact.resolver.ResolutionNode,
+ * org.apache.maven.artifact.resolver.ResolutionNode)
+ */
+
+ public ResolutionNode resolveConflict( ResolutionNode node1, ResolutionNode node2 )
+ {
+ try
+ {
+ ArtifactVersion version1 = node1.getArtifact().getSelectedVersion();
+ ArtifactVersion version2 = node2.getArtifact().getSelectedVersion();
+
+ return version1.compareTo( version2 ) > 0 ? node1 : node2;
+ }
+ catch ( OverConstrainedVersionException exception )
+ {
+ // TODO: log message or throw exception?
+
+ return null;
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolver.java
new file mode 100644
index 00000000..5c5c12d6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolver.java
@@ -0,0 +1,62 @@
+package org.apache.maven.repository.legacy.resolver.conflict;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.resolver.ResolutionNode;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Resolves conflicting artifacts by always selecting the <em>oldest</em> declaration. Oldest is defined as the
+ * declaration whose version is less according to <code>ArtifactVersion.compareTo</code>.
+ *
+ * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
+ * @see ArtifactVersion#compareTo
+ * @since 3.0
+ */
+@Component( role = ConflictResolver.class, hint = "oldest" )
+public class OldestConflictResolver
+ implements ConflictResolver
+{
+ // ConflictResolver methods -----------------------------------------------
+
+ /*
+ * @see org.apache.maven.artifact.resolver.conflict.ConflictResolver#resolveConflict(org.apache.maven.artifact.resolver.ResolutionNode,
+ * org.apache.maven.artifact.resolver.ResolutionNode)
+ */
+
+ public ResolutionNode resolveConflict( ResolutionNode node1, ResolutionNode node2 )
+ {
+ try
+ {
+ ArtifactVersion version1 = node1.getArtifact().getSelectedVersion();
+ ArtifactVersion version2 = node2.getArtifact().getSelectedVersion();
+
+ return version1.compareTo( version2 ) <= 0 ? node1 : node2;
+ }
+ catch ( OverConstrainedVersionException exception )
+ {
+ // TODO: log message or throw exception?
+
+ return null;
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/AbstractVersionTransformation.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/AbstractVersionTransformation.java
new file mode 100644
index 00000000..3a5c7c6a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/AbstractVersionTransformation.java
@@ -0,0 +1,135 @@
+package org.apache.maven.repository.legacy.resolver.transform;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
+import org.apache.maven.artifact.repository.RepositoryRequest;
+import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataResolutionException;
+import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.Versioning;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.repository.legacy.WagonManager;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+
+/**
+ * Describes a version transformation during artifact resolution.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @todo try and refactor to remove abstract methods - not particular happy about current design
+ */
+public abstract class AbstractVersionTransformation
+ extends AbstractLogEnabled
+ implements ArtifactTransformation
+{
+ @Requirement
+ protected RepositoryMetadataManager repositoryMetadataManager;
+
+ @Requirement
+ protected WagonManager wagonManager;
+
+ public void transformForResolve( Artifact artifact, List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ RepositoryRequest request = new DefaultRepositoryRequest();
+ request.setLocalRepository( localRepository );
+ request.setRemoteRepositories( remoteRepositories );
+ transformForResolve( artifact, request );
+ }
+
+ protected String resolveVersion( Artifact artifact, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ throws RepositoryMetadataResolutionException
+ {
+ RepositoryRequest request = new DefaultRepositoryRequest();
+ request.setLocalRepository( localRepository );
+ request.setRemoteRepositories( remoteRepositories );
+ return resolveVersion( artifact, request );
+ }
+
+ protected String resolveVersion( Artifact artifact, RepositoryRequest request )
+ throws RepositoryMetadataResolutionException
+ {
+ RepositoryMetadata metadata;
+ // Don't use snapshot metadata for LATEST (which isSnapshot returns true for)
+ if ( !artifact.isSnapshot() || Artifact.LATEST_VERSION.equals( artifact.getBaseVersion() ) )
+ {
+ metadata = new ArtifactRepositoryMetadata( artifact );
+ }
+ else
+ {
+ metadata = new SnapshotArtifactRepositoryMetadata( artifact );
+ }
+
+ repositoryMetadataManager.resolve( metadata, request );
+
+ artifact.addMetadata( metadata );
+
+ Metadata repoMetadata = metadata.getMetadata();
+ String version = null;
+ if ( repoMetadata != null && repoMetadata.getVersioning() != null )
+ {
+ version = constructVersion( repoMetadata.getVersioning(), artifact.getBaseVersion() );
+ }
+
+ if ( version == null )
+ {
+ // use the local copy, or if it doesn't exist - go to the remote repo for it
+ version = artifact.getBaseVersion();
+ }
+
+ // TODO: also do this logging for other metadata?
+ // TODO: figure out way to avoid duplicated message
+ if ( getLogger().isDebugEnabled() )
+ {
+ if ( !version.equals( artifact.getBaseVersion() ) )
+ {
+ String message = artifact.getArtifactId() + ": resolved to version " + version;
+ if ( artifact.getRepository() != null )
+ {
+ message += " from repository " + artifact.getRepository().getId();
+ }
+ else
+ {
+ message += " from local repository";
+ }
+ getLogger().debug( message );
+ }
+ else
+ {
+ // Locally installed file is newer, don't use the resolved version
+ getLogger().debug( artifact.getArtifactId() + ": using locally installed snapshot" );
+ }
+ }
+ return version;
+ }
+
+ protected abstract String constructVersion( Versioning versioning, String baseVersion );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ArtifactTransformation.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ArtifactTransformation.java
new file mode 100644
index 00000000..42604d75
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ArtifactTransformation.java
@@ -0,0 +1,86 @@
+package org.apache.maven.repository.legacy.resolver.transform;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.deployer.ArtifactDeploymentException;
+import org.apache.maven.artifact.installer.ArtifactInstallationException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.RepositoryRequest;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+
+/**
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
+ */
+public interface ArtifactTransformation
+{
+ String ROLE = ArtifactTransformation.class.getName();
+
+ /**
+ * Take in a artifact and return the transformed artifact for locating in the remote repository. If no
+ * transformation has occurred the original artifact is returned.
+ *
+ * @param artifact Artifact to be transformed.
+ * @param request the repositories to check
+ */
+ void transformForResolve( Artifact artifact, RepositoryRequest request )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+ /**
+ * Take in a artifact and return the transformed artifact for locating in the remote repository. If no
+ * transformation has occurred the original artifact is returned.
+ *
+ * @param artifact Artifact to be transformed.
+ * @param remoteRepositories the repositories to check
+ * @param localRepository the local repository
+ */
+ void transformForResolve( Artifact artifact,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+ /**
+ * Take in a artifact and return the transformed artifact for locating in the local repository. If no
+ * transformation has occurred the original artifact is returned.
+ *
+ * @param artifact Artifact to be transformed.
+ * @param localRepository the local repository it will be stored in
+ */
+ void transformForInstall( Artifact artifact,
+ ArtifactRepository localRepository )
+ throws ArtifactInstallationException;
+
+ /**
+ * Take in a artifact and return the transformed artifact for distributing to remote repository. If no
+ * transformation has occurred the original artifact is returned.
+ *
+ * @param artifact Artifact to be transformed.
+ * @param remoteRepository the repository to deploy to
+ * @param localRepository the local repository
+ */
+ void transformForDeployment( Artifact artifact,
+ ArtifactRepository remoteRepository,
+ ArtifactRepository localRepository )
+ throws ArtifactDeploymentException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ArtifactTransformationManager.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ArtifactTransformationManager.java
new file mode 100644
index 00000000..f0ac9c89
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ArtifactTransformationManager.java
@@ -0,0 +1,82 @@
+package org.apache.maven.repository.legacy.resolver.transform;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.deployer.ArtifactDeploymentException;
+import org.apache.maven.artifact.installer.ArtifactInstallationException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.RepositoryRequest;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+
+/** Manages multiple ArtifactTransformation instances and applies them in succession. */
+public interface ArtifactTransformationManager
+{
+ String ROLE = ArtifactTransformationManager.class.getName();
+
+ /**
+ * Take in a artifact and return the transformed artifact for locating in the remote repository. If no
+ * transformation has occurred the original artifact is returned.
+ *
+ * @param artifact Artifact to be transformed.
+ * @param request the repositories to check
+ */
+ void transformForResolve( Artifact artifact, RepositoryRequest request )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+ /**
+ * Take in a artifact and return the transformed artifact for locating in the remote repository. If no
+ * transformation has occurred the original artifact is returned.
+ *
+ * @param artifact Artifact to be transformed.
+ * @param remoteRepositories the repositories to check
+ * @param localRepository the local repository
+ */
+ void transformForResolve( Artifact artifact, List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+ /**
+ * Take in a artifact and return the transformed artifact for locating in the local repository. If no
+ * transformation has occurred the original artifact is returned.
+ *
+ * @param artifact Artifact to be transformed.
+ * @param localRepository the local repository it will be stored in
+ */
+ void transformForInstall( Artifact artifact, ArtifactRepository localRepository )
+ throws ArtifactInstallationException;
+
+ /**
+ * Take in a artifact and return the transformed artifact for distributing to a remote repository. If no
+ * transformation has occurred the original artifact is returned.
+ *
+ * @param artifact Artifact to be transformed.
+ * @param remoteRepository the repository to deploy to
+ * @param localRepository the local repository the metadata is stored in
+ */
+ void transformForDeployment( Artifact artifact, ArtifactRepository remoteRepository,
+ ArtifactRepository localRepository )
+ throws ArtifactDeploymentException;
+
+ List getArtifactTransformations();
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/DefaultArtifactTransformationManager.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/DefaultArtifactTransformationManager.java
new file mode 100644
index 00000000..e9b1afbc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/DefaultArtifactTransformationManager.java
@@ -0,0 +1,86 @@
+package org.apache.maven.repository.legacy.resolver.transform;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.deployer.ArtifactDeploymentException;
+import org.apache.maven.artifact.installer.ArtifactInstallationException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.RepositoryRequest;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+/**
+ * @author Jason van Zyl
+ */
+@Component( role = ArtifactTransformationManager.class )
+public class DefaultArtifactTransformationManager
+ implements ArtifactTransformationManager
+{
+ @Requirement( role = ArtifactTransformation.class, hints = { "release", "latest", "snapshot" } )
+ private List<ArtifactTransformation> artifactTransformations;
+
+ public void transformForResolve( Artifact artifact, RepositoryRequest request )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ for ( ArtifactTransformation transform : artifactTransformations )
+ {
+ transform.transformForResolve( artifact, request );
+ }
+ }
+
+ public void transformForResolve( Artifact artifact, List<ArtifactRepository> remoteRepositories,
+ ArtifactRepository localRepository )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ for ( ArtifactTransformation transform : artifactTransformations )
+ {
+ transform.transformForResolve( artifact, remoteRepositories, localRepository );
+ }
+ }
+
+ public void transformForInstall( Artifact artifact, ArtifactRepository localRepository )
+ throws ArtifactInstallationException
+ {
+ for ( ArtifactTransformation transform : artifactTransformations )
+ {
+ transform.transformForInstall( artifact, localRepository );
+ }
+ }
+
+ public void transformForDeployment( Artifact artifact, ArtifactRepository remoteRepository,
+ ArtifactRepository localRepository )
+ throws ArtifactDeploymentException
+ {
+ for ( ArtifactTransformation transform : artifactTransformations )
+ {
+ transform.transformForDeployment( artifact, remoteRepository, localRepository );
+ }
+ }
+
+ public List getArtifactTransformations()
+ {
+ return artifactTransformations;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/LatestArtifactTransformation.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/LatestArtifactTransformation.java
new file mode 100644
index 00000000..7b0e8513
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/LatestArtifactTransformation.java
@@ -0,0 +1,74 @@
+package org.apache.maven.repository.legacy.resolver.transform;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.RepositoryRequest;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataResolutionException;
+import org.apache.maven.artifact.repository.metadata.Versioning;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.codehaus.plexus.component.annotations.Component;
+
+@Component( role = ArtifactTransformation.class, hint = "latest" )
+public class LatestArtifactTransformation
+ extends AbstractVersionTransformation
+{
+
+ public void transformForResolve( Artifact artifact, RepositoryRequest request )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ if ( Artifact.LATEST_VERSION.equals( artifact.getVersion() ) )
+ {
+ try
+ {
+ String version = resolveVersion( artifact, request );
+ if ( Artifact.LATEST_VERSION.equals( version ) )
+ {
+ throw new ArtifactNotFoundException( "Unable to determine the latest version", artifact );
+ }
+
+ artifact.setBaseVersion( version );
+ artifact.updateVersion( version, request.getLocalRepository() );
+ }
+ catch ( RepositoryMetadataResolutionException e )
+ {
+ throw new ArtifactResolutionException( e.getMessage(), artifact, e );
+ }
+ }
+ }
+
+ public void transformForInstall( Artifact artifact, ArtifactRepository localRepository )
+ {
+ // metadata is added via addPluginArtifactMetadata
+ }
+
+ public void transformForDeployment( Artifact artifact, ArtifactRepository remoteRepository,
+ ArtifactRepository localRepository )
+ {
+ // metadata is added via addPluginArtifactMetadata
+ }
+
+ protected String constructVersion( Versioning versioning, String baseVersion )
+ {
+ return versioning.getLatest();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ReleaseArtifactTransformation.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ReleaseArtifactTransformation.java
new file mode 100644
index 00000000..3714924c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ReleaseArtifactTransformation.java
@@ -0,0 +1,100 @@
+package org.apache.maven.repository.legacy.resolver.transform;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.RepositoryRequest;
+import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataResolutionException;
+import org.apache.maven.artifact.repository.metadata.Versioning;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Change the version <code>RELEASE</code> to the appropriate release version from the remote repository.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+@Component( role = ArtifactTransformation.class, hint = "release" )
+public class ReleaseArtifactTransformation
+ extends AbstractVersionTransformation
+{
+
+ public void transformForResolve( Artifact artifact, RepositoryRequest request )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ if ( Artifact.RELEASE_VERSION.equals( artifact.getVersion() ) )
+ {
+ try
+ {
+ String version = resolveVersion( artifact, request );
+
+ if ( Artifact.RELEASE_VERSION.equals( version ) )
+ {
+ throw new ArtifactNotFoundException( "Unable to determine the release version", artifact );
+ }
+
+ artifact.setBaseVersion( version );
+ artifact.updateVersion( version, request.getLocalRepository() );
+ }
+ catch ( RepositoryMetadataResolutionException e )
+ {
+ throw new ArtifactResolutionException( e.getMessage(), artifact, e );
+ }
+ }
+ }
+
+ public void transformForInstall( Artifact artifact, ArtifactRepository localRepository )
+ {
+ ArtifactMetadata metadata = createMetadata( artifact );
+
+ artifact.addMetadata( metadata );
+ }
+
+ public void transformForDeployment( Artifact artifact, ArtifactRepository remoteRepository,
+ ArtifactRepository localRepository )
+ {
+ ArtifactMetadata metadata = createMetadata( artifact );
+
+ artifact.addMetadata( metadata );
+ }
+
+ private ArtifactMetadata createMetadata( Artifact artifact )
+ {
+ Versioning versioning = new Versioning();
+ versioning.updateTimestamp();
+ versioning.addVersion( artifact.getVersion() );
+
+ if ( artifact.isRelease() )
+ {
+ versioning.setRelease( artifact.getVersion() );
+ }
+
+ return new ArtifactRepositoryMetadata( artifact, versioning );
+ }
+
+ protected String constructVersion( Versioning versioning, String baseVersion )
+ {
+ return versioning.getRelease();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/SnapshotTransformation.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/SnapshotTransformation.java
new file mode 100644
index 00000000..94f0ec0b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/SnapshotTransformation.java
@@ -0,0 +1,171 @@
+package org.apache.maven.repository.legacy.resolver.transform;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.deployer.ArtifactDeploymentException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.RepositoryRequest;
+import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataResolutionException;
+import org.apache.maven.artifact.repository.metadata.Snapshot;
+import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.Versioning;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @author <a href="mailto:mmaczka@interia.pl">Michal Maczka</a>
+ */
+@Component( role = ArtifactTransformation.class, hint = "snapshot" )
+public class SnapshotTransformation
+ extends AbstractVersionTransformation
+{
+ private String deploymentTimestamp;
+
+ private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" );
+
+ private static final String UTC_TIMESTAMP_PATTERN = "yyyyMMdd.HHmmss";
+
+ public void transformForResolve( Artifact artifact, RepositoryRequest request )
+ throws ArtifactResolutionException
+ {
+ // Only select snapshots that are unresolved (eg 1.0-SNAPSHOT, not 1.0-20050607.123456)
+ if ( artifact.isSnapshot() && artifact.getBaseVersion().equals( artifact.getVersion() ) )
+ {
+ try
+ {
+ String version = resolveVersion( artifact, request );
+ artifact.updateVersion( version, request.getLocalRepository() );
+ }
+ catch ( RepositoryMetadataResolutionException e )
+ {
+ throw new ArtifactResolutionException( e.getMessage(), artifact, e );
+ }
+ }
+ }
+
+ public void transformForInstall( Artifact artifact, ArtifactRepository localRepository )
+ {
+ if ( artifact.isSnapshot() )
+ {
+ Snapshot snapshot = new Snapshot();
+ snapshot.setLocalCopy( true );
+ RepositoryMetadata metadata = new SnapshotArtifactRepositoryMetadata( artifact, snapshot );
+
+ artifact.addMetadata( metadata );
+ }
+ }
+
+ public void transformForDeployment( Artifact artifact, ArtifactRepository remoteRepository,
+ ArtifactRepository localRepository )
+ throws ArtifactDeploymentException
+ {
+ if ( artifact.isSnapshot() )
+ {
+ Snapshot snapshot = new Snapshot();
+
+ snapshot.setTimestamp( getDeploymentTimestamp() );
+
+ // we update the build number anyway so that it doesn't get lost. It requires the timestamp to take effect
+ try
+ {
+ int buildNumber = resolveLatestSnapshotBuildNumber( artifact, localRepository, remoteRepository );
+
+ snapshot.setBuildNumber( buildNumber + 1 );
+ }
+ catch ( RepositoryMetadataResolutionException e )
+ {
+ throw new ArtifactDeploymentException( "Error retrieving previous build number for artifact '"
+ + artifact.getDependencyConflictId() + "': " + e.getMessage(), e );
+ }
+
+ RepositoryMetadata metadata = new SnapshotArtifactRepositoryMetadata( artifact, snapshot );
+
+ artifact.setResolvedVersion(
+ constructVersion( metadata.getMetadata().getVersioning(), artifact.getBaseVersion() ) );
+
+ artifact.addMetadata( metadata );
+ }
+ }
+
+ public String getDeploymentTimestamp()
+ {
+ if ( deploymentTimestamp == null )
+ {
+ deploymentTimestamp = getUtcDateFormatter().format( new Date() );
+ }
+ return deploymentTimestamp;
+ }
+
+ protected String constructVersion( Versioning versioning, String baseVersion )
+ {
+ String version = null;
+ Snapshot snapshot = versioning.getSnapshot();
+ if ( snapshot != null )
+ {
+ if ( snapshot.getTimestamp() != null && snapshot.getBuildNumber() > 0 )
+ {
+ String newVersion = snapshot.getTimestamp() + "-" + snapshot.getBuildNumber();
+ version = StringUtils.replace( baseVersion, Artifact.SNAPSHOT_VERSION, newVersion );
+ }
+ else
+ {
+ version = baseVersion;
+ }
+ }
+ return version;
+ }
+
+ private int resolveLatestSnapshotBuildNumber( Artifact artifact, ArtifactRepository localRepository,
+ ArtifactRepository remoteRepository )
+ throws RepositoryMetadataResolutionException
+ {
+ RepositoryMetadata metadata = new SnapshotArtifactRepositoryMetadata( artifact );
+
+ getLogger().info( "Retrieving previous build number from " + remoteRepository.getId() );
+ repositoryMetadataManager.resolveAlways( metadata, localRepository, remoteRepository );
+
+ int buildNumber = 0;
+ Metadata repoMetadata = metadata.getMetadata();
+ if ( ( repoMetadata != null )
+ && ( repoMetadata.getVersioning() != null && repoMetadata.getVersioning().getSnapshot() != null ) )
+ {
+ buildNumber = repoMetadata.getVersioning().getSnapshot().getBuildNumber();
+ }
+ return buildNumber;
+ }
+
+ public static DateFormat getUtcDateFormatter()
+ {
+ DateFormat utcDateFormatter = new SimpleDateFormat( UTC_TIMESTAMP_PATTERN );
+ utcDateFormatter.setTimeZone( UTC_TIME_ZONE );
+ return utcDateFormatter;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/ArtifactMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/ArtifactMetadata.java
new file mode 100644
index 00000000..2666eafb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/ArtifactMetadata.java
@@ -0,0 +1,353 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactScopeEnum;
+
+/**
+ * Artifact Metadata that is resolved independent of Artifact itself.
+ *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ */
+public class ArtifactMetadata
+{
+ /**
+ * standard glorified artifact coordinates
+ */
+ protected String groupId;
+ protected String artifactId;
+ protected String version;
+ protected String type;
+ protected ArtifactScopeEnum artifactScope;
+ protected String classifier;
+
+ /**
+ * explanation: why this MD was chosen over it's siblings
+ * in the resulting structure (classpath for now)
+ */
+ protected String why;
+
+ /** dependencies of the artifact behind this metadata */
+ protected Collection<ArtifactMetadata> dependencies;
+
+ /** metadata URI */
+ protected String uri;
+
+ /** is metadata found anywhere */
+ protected boolean resolved = false;
+
+ /** does the actual artifact for this metadata exists */
+ protected boolean artifactExists = false;
+ /** artifact URI */
+ protected String artifactUri;
+
+ /** error message */
+ private String error;
+
+ //------------------------------------------------------------------
+ /**
+ *
+ */
+ public ArtifactMetadata( String name )
+ {
+ if ( name == null )
+ {
+ return;
+ }
+ int ind1 = name.indexOf( ':' );
+ int ind2 = name.lastIndexOf( ':' );
+
+ if ( ind1 == -1 || ind2 == -1 )
+ {
+ return;
+ }
+
+ this.groupId = name.substring( 0, ind1 );
+ if ( ind1 == ind2 )
+ {
+ this.artifactId = name.substring( ind1 + 1 );
+ }
+ else
+ {
+ this.artifactId = name.substring( ind1 + 1, ind2 );
+ this.version = name.substring( ind2 + 1 );
+ }
+ }
+
+ // ------------------------------------------------------------------
+ public ArtifactMetadata( String groupId, String name, String version )
+ {
+ this( groupId, name, version, null );
+ }
+ //------------------------------------------------------------------
+ public ArtifactMetadata( String groupId, String name, String version, String type )
+ {
+ this( groupId, name, version, type, null );
+ }
+
+ //------------------------------------------------------------------
+ public ArtifactMetadata( String groupId, String name, String version, String type, ArtifactScopeEnum artifactScope )
+ {
+ this( groupId, name, version, type, artifactScope, null );
+ }
+
+ //------------------------------------------------------------------
+ public ArtifactMetadata( String groupId, String name, String version, String type, ArtifactScopeEnum artifactScope,
+ String classifier )
+ {
+ this( groupId, name, version, type, artifactScope, classifier, null );
+ }
+ //------------------------------------------------------------------
+ public ArtifactMetadata( String groupId, String name, String version, String type, ArtifactScopeEnum artifactScope,
+ String classifier, String artifactUri )
+ {
+ this( groupId, name, version, type, artifactScope, classifier, artifactUri, null, true, null );
+ }
+ //------------------------------------------------------------------
+ public ArtifactMetadata( String groupId, String name, String version, String type, ArtifactScopeEnum artifactScope,
+ String classifier, String artifactUri, String why, boolean resolved, String error )
+ {
+ this.groupId = groupId;
+ this.artifactId = name;
+ this.version = version;
+ this.type = type;
+ this.artifactScope = artifactScope;
+ this.classifier = classifier;
+ this.artifactUri = artifactUri;
+ this.why = why;
+ this.resolved = resolved;
+ this.error = error;
+ }
+ //------------------------------------------------------------------
+ public ArtifactMetadata( String groupId, String name, String version, String type, String scopeString,
+ String classifier, String artifactUri, String why, boolean resolved, String error )
+ {
+ this( groupId, name, version, type,
+ scopeString == null ? ArtifactScopeEnum.DEFAULT_SCOPE : ArtifactScopeEnum.valueOf( scopeString ),
+ classifier, artifactUri, why, resolved, error );
+ }
+
+ //------------------------------------------------------------------
+ public ArtifactMetadata( Artifact af )
+ {
+ /*
+ if ( af != null )
+ {
+ init( af );
+ }
+ */
+ }
+ //------------------------------------------------------------------
+// public void init( ArtifactMetadata af )
+// {
+// setGroupId( af.getGroupId() );
+// setArtifactId( af.getArtifactId() );
+// setVersion( af.getVersion() );
+// setType( af.getType() );
+// setScope( af.getScope() );
+// setClassifier( af.getClassifier() );
+// //setUri( af.getDownloadUrl() );
+//
+// this.resolved = af.isResolved();
+// }
+
+ //------------------------------------------------------------------
+ @Override
+ public String toString()
+ {
+ return groupId + ":" + artifactId + ":" + version;
+ }
+
+ //------------------------------------------------------------------
+ public String toDomainString()
+ {
+ return groupId + ":" + artifactId;
+ }
+
+ //------------------------------------------------------------------
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public void setGroupId( String groupId )
+ {
+ this.groupId = groupId;
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ public void setArtifactId( String name )
+ {
+ this.artifactId = name;
+ }
+
+ public String getVersion()
+ {
+ return version;
+ }
+
+ public void setVersion( String version )
+ {
+ this.version = version;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+
+ public String getCheckedType()
+ {
+ return type == null ? "jar" : type;
+ }
+
+ public void setType( String type )
+ {
+ this.type = type;
+ }
+
+ public ArtifactScopeEnum getArtifactScope()
+ {
+ return artifactScope == null ? ArtifactScopeEnum.DEFAULT_SCOPE : artifactScope;
+ }
+
+ public void setArtifactScope( ArtifactScopeEnum artifactScope )
+ {
+ this.artifactScope = artifactScope;
+ }
+
+ public void setScope( String scope )
+ {
+ this.artifactScope = scope == null ? ArtifactScopeEnum.DEFAULT_SCOPE : ArtifactScopeEnum.valueOf( scope );
+ }
+
+ public String getClassifier()
+ {
+ return classifier;
+ }
+
+ public void setClassifier( String classifier )
+ {
+ this.classifier = classifier;
+ }
+
+ public boolean isResolved()
+ {
+ return resolved;
+ }
+
+ public void setResolved( boolean resolved )
+ {
+ this.resolved = resolved;
+ }
+
+ public String getUri()
+ {
+ return uri;
+ }
+
+ public void setUri( String uri )
+ {
+ this.uri = uri;
+ }
+
+ public String getScope()
+ {
+ return getArtifactScope().getScope();
+ }
+
+ public ArtifactScopeEnum getScopeAsEnum()
+ {
+ return artifactScope == null ? ArtifactScopeEnum.DEFAULT_SCOPE : artifactScope;
+ }
+
+ public boolean isArtifactExists()
+ {
+ return artifactExists;
+ }
+
+ public void setArtifactExists( boolean artifactExists )
+ {
+ this.artifactExists = artifactExists;
+ }
+
+
+ public Collection<ArtifactMetadata> getDependencies()
+ {
+ return dependencies;
+ }
+
+ public void setDependencies( Collection<ArtifactMetadata> dependencies )
+ {
+ this.dependencies = dependencies;
+ }
+
+ public String getArtifactUri()
+ {
+ return artifactUri;
+ }
+
+ public void setArtifactUri( String artifactUri )
+ {
+ this.artifactUri = artifactUri;
+ }
+
+
+ public String getWhy()
+ {
+ return why;
+ }
+
+ public void setWhy( String why )
+ {
+ this.why = why;
+ }
+
+ //-------------------------------------------------------------------
+ public String getError()
+ {
+ return error;
+ }
+
+ public void setError( String error )
+ {
+ this.error = error;
+ }
+
+ public boolean isError()
+ {
+ return error == null;
+ }
+
+ //------------------------------------------------------------------
+ public String getDependencyConflictId()
+ {
+ return groupId + ":" + artifactId;
+ }
+ //------------------------------------------------------------------
+ //------------------------------------------------------------------
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/ClasspathContainer.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/ClasspathContainer.java
new file mode 100644
index 00000000..b0cb5b2f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/ClasspathContainer.java
@@ -0,0 +1,144 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.artifact.ArtifactScopeEnum;
+
+/**
+ * classpath container that is aware of the classpath scope
+ *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
+public class ClasspathContainer
+implements Iterable<ArtifactMetadata>
+{
+ private List<ArtifactMetadata> classpath;
+
+ private ArtifactScopeEnum scope;
+
+ // -------------------------------------------------------------------------------------------
+ public ClasspathContainer( ArtifactScopeEnum scope )
+ {
+ this.scope = ArtifactScopeEnum.checkScope( scope );
+ }
+
+ // -------------------------------------------------------------------------------------------
+ public ClasspathContainer( List<ArtifactMetadata> classpath, ArtifactScopeEnum scope )
+ {
+ this( scope );
+ this.classpath = classpath;
+ }
+
+ // -------------------------------------------------------------------------------------------
+ public Iterator<ArtifactMetadata> iterator()
+ {
+ return classpath == null ? null : classpath.iterator();
+ }
+
+ // -------------------------------------------------------------------------------------------
+ public ClasspathContainer add( ArtifactMetadata md )
+ {
+ if ( classpath == null )
+ {
+ classpath = new ArrayList<ArtifactMetadata>( 16 );
+ }
+
+ classpath.add( md );
+
+ return this;
+ }
+
+ // -------------------------------------------------------------------------------------------
+ public List<ArtifactMetadata> getClasspath()
+ {
+ return classpath;
+ }
+
+ // -------------------------------------------------------------------------------------------
+ public MetadataTreeNode getClasspathAsTree()
+ throws MetadataResolutionException
+ {
+ if ( classpath == null || classpath.size() < 1 )
+ {
+ return null;
+ }
+
+ MetadataTreeNode tree = null;
+ MetadataTreeNode parent = null;
+
+ for ( ArtifactMetadata md : classpath )
+ {
+ MetadataTreeNode node = new MetadataTreeNode( md, parent, md.isResolved(), md.getArtifactScope() );
+ if ( tree == null )
+ {
+ tree = node;
+ }
+
+ if ( parent != null )
+ {
+ parent.setNChildren( 1 );
+ parent.addChild( 0, node );
+ }
+
+ parent = node;
+
+ }
+ return tree;
+ }
+
+ public void setClasspath( List<ArtifactMetadata> classpath )
+ {
+ this.classpath = classpath;
+ }
+
+ public ArtifactScopeEnum getScope()
+ {
+ return scope;
+ }
+
+ public void setScope( ArtifactScopeEnum scope )
+ {
+ this.scope = scope;
+ }
+
+ // -------------------------------------------------------------------------------------------
+ @Override
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder( 256 );
+ sb.append( "[scope=" ).append( scope.getScope() );
+ if ( classpath != null )
+ {
+ for ( ArtifactMetadata md : classpath )
+ {
+ sb.append( ": " ).append( md.toString() ).append( '{' ).append( md.getArtifactUri() ).append( '}' );
+ }
+ }
+ sb.append( ']' );
+ return sb.toString();
+ }
+ // -------------------------------------------------------------------------------------------
+ // -------------------------------------------------------------------------------------------
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/ClasspathTransformation.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/ClasspathTransformation.java
new file mode 100644
index 00000000..eece4133
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/ClasspathTransformation.java
@@ -0,0 +1,46 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.ArtifactScopeEnum;
+
+/**
+ * Helper class to conver an Md Graph into some form of a classpath
+ *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
+public interface ClasspathTransformation
+{
+ String ROLE = ClasspathTransformation.class.getName();
+
+ /**
+ * Transform Graph into a Collection of metadata objects that
+ * could serve as a classpath for a particular scope
+ *
+ * @param dirtyGraph - dependency graph
+ * @param scope - which classpath to extract
+ * @param resolve - whether to resolve artifacts.
+ * @return Collection of metadata objects in the linked subgraph of the graph which
+ * contains the graph.getEntry() vertice
+ */
+ ClasspathContainer transform( MetadataGraph dirtyGraph, ArtifactScopeEnum scope, boolean resolve )
+ throws MetadataGraphTransformationException;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/DefaultClasspathTransformation.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/DefaultClasspathTransformation.java
new file mode 100644
index 00000000..03984fbd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/DefaultClasspathTransformation.java
@@ -0,0 +1,183 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+
+import org.apache.maven.artifact.ArtifactScopeEnum;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+/**
+ * default implementation of the metadata classpath transformer
+ *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
+@Component( role = ClasspathTransformation.class )
+public class DefaultClasspathTransformation
+ implements ClasspathTransformation
+{
+ @Requirement
+ GraphConflictResolver conflictResolver;
+
+ //----------------------------------------------------------------------------------------------------
+ public ClasspathContainer transform( MetadataGraph dirtyGraph, ArtifactScopeEnum scope, boolean resolve )
+ throws MetadataGraphTransformationException
+ {
+ try
+ {
+ if ( dirtyGraph == null || dirtyGraph.isEmpty() )
+ {
+ return null;
+ }
+
+ MetadataGraph cleanGraph = conflictResolver.resolveConflicts( dirtyGraph, scope );
+
+ if ( cleanGraph == null || cleanGraph.isEmpty() )
+ {
+ return null;
+ }
+
+ ClasspathContainer cpc = new ClasspathContainer( scope );
+ if ( cleanGraph.isEmptyEdges() )
+ {
+ // single entry in the classpath, populated from itself
+ ArtifactMetadata amd = cleanGraph.getEntry().getMd();
+ cpc.add( amd );
+ }
+ else
+ {
+ ClasspathGraphVisitor v = new ClasspathGraphVisitor( cleanGraph, cpc );
+ MetadataGraphVertex entry = cleanGraph.getEntry();
+ // entry point
+ v.visit( entry );
+ }
+
+ return cpc;
+ }
+ catch ( GraphConflictResolutionException e )
+ {
+ throw new MetadataGraphTransformationException( e );
+ }
+ }
+
+ //===================================================================================================
+ /**
+ * Helper class to traverse graph. Required to make the containing method thread-safe
+ * and yet use class level data to lessen stack usage in recursion
+ */
+ private class ClasspathGraphVisitor
+ {
+ MetadataGraph graph;
+
+ ClasspathContainer cpc;
+
+ List<MetadataGraphVertex> visited;
+
+ // -----------------------------------------------------------------------
+ protected ClasspathGraphVisitor( MetadataGraph cleanGraph, ClasspathContainer cpc )
+ {
+ this.cpc = cpc;
+ this.graph = cleanGraph;
+
+ visited = new ArrayList<MetadataGraphVertex>( cleanGraph.getVertices().size() );
+ }
+
+ // -----------------------------------------------------------------------
+ protected void visit( MetadataGraphVertex node ) // , String version, String artifactUri )
+ {
+ ArtifactMetadata md = node.getMd();
+ if ( visited.contains( node ) )
+ {
+ return;
+ }
+
+ cpc.add( md );
+//
+// TreeSet<MetadataGraphEdge> deps = new TreeSet<MetadataGraphEdge>(
+// new Comparator<MetadataGraphEdge>()
+// {
+// public int compare( MetadataGraphEdge e1
+// , MetadataGraphEdge e2
+// )
+// {
+// if( e1.getDepth() == e2.getDepth() )
+// {
+// if( e2.getPomOrder() == e1.getPomOrder() )
+// return e1.getTarget().toString().compareTo(e2.getTarget().toString() );
+//
+// return e2.getPomOrder() - e1.getPomOrder();
+// }
+//
+// return e2.getDepth() - e1.getDepth();
+// }
+// }
+// );
+
+ List<MetadataGraphEdge> exits = graph.getExcidentEdges( node );
+
+ if ( exits != null && exits.size() > 0 )
+ {
+ MetadataGraphEdge[] sortedExits = exits.toArray( new MetadataGraphEdge[exits.size()] );
+ Arrays.sort( sortedExits
+ ,
+ new Comparator<MetadataGraphEdge>()
+ {
+ public int compare( MetadataGraphEdge e1
+ , MetadataGraphEdge e2
+ )
+ {
+ if ( e1.getDepth() == e2.getDepth() )
+ {
+ if ( e2.getPomOrder() == e1.getPomOrder() )
+ {
+ return e1.getTarget().toString().compareTo( e2.getTarget().toString() );
+ }
+ return e2.getPomOrder() - e1.getPomOrder();
+ }
+
+ return e2.getDepth() - e1.getDepth();
+ }
+ }
+ );
+
+ for ( MetadataGraphEdge e : sortedExits )
+ {
+ MetadataGraphVertex targetNode = e.getTarget();
+ targetNode.getMd().setArtifactScope( e.getScope() );
+ targetNode.getMd().setWhy( e.getSource().getMd().toString() );
+ visit( targetNode );
+ }
+ }
+
+ }
+ //-----------------------------------------------------------------------
+ //-----------------------------------------------------------------------
+ }
+ //----------------------------------------------------------------------------------------------------
+ //----------------------------------------------------------------------------------------------------
+}
+
+
+
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolutionPolicy.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolutionPolicy.java
new file mode 100644
index 00000000..bb764227
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolutionPolicy.java
@@ -0,0 +1,73 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Configuration;
+
+/**
+ * @author <a href="mailto:oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
+@Component( role = GraphConflictResolutionPolicy.class )
+public class DefaultGraphConflictResolutionPolicy
+ implements GraphConflictResolutionPolicy
+{
+ /**
+ * artifact, closer to the entry point, is selected
+ */
+ @Configuration( name = "closer-first", value = "true" )
+ private boolean closerFirst = true;
+
+ /**
+ * newer artifact is selected
+ */
+ @Configuration( name = "newer-first", value = "true" )
+ private boolean newerFirst = true;
+
+ public MetadataGraphEdge apply( MetadataGraphEdge e1, MetadataGraphEdge e2 )
+ {
+ int depth1 = e1.getDepth();
+ int depth2 = e2.getDepth();
+
+ if ( depth1 == depth2 )
+ {
+ ArtifactVersion v1 = new DefaultArtifactVersion( e1.getVersion() );
+ ArtifactVersion v2 = new DefaultArtifactVersion( e2.getVersion() );
+
+ if ( newerFirst )
+ {
+ return v1.compareTo( v2 ) > 0 ? e1 : e2;
+ }
+
+ return v1.compareTo( v2 ) > 0 ? e2 : e1;
+ }
+
+ if ( closerFirst )
+ {
+ return depth1 < depth2 ? e1 : e2;
+ }
+
+ return depth1 < depth2 ? e2 : e1;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolver.java
new file mode 100644
index 00000000..77060299
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolver.java
@@ -0,0 +1,249 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.TreeSet;
+
+import org.apache.maven.artifact.ArtifactScopeEnum;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+/**
+ * Default conflict resolver.Implements closer newer first policy by default, but could be configured via plexus
+ *
+ * @author <a href="mailto:oleg@codehaus.org">Oleg Gusakov</a>
+ */
+@Component( role = GraphConflictResolver.class )
+public class DefaultGraphConflictResolver
+ implements GraphConflictResolver
+{
+ /**
+ * artifact, closer to the entry point, is selected
+ */
+ @Requirement( role = GraphConflictResolutionPolicy.class )
+ protected GraphConflictResolutionPolicy policy;
+
+ // -------------------------------------------------------------------------------------
+ // -------------------------------------------------------------------------------------
+ public MetadataGraph resolveConflicts( MetadataGraph graph, ArtifactScopeEnum scope )
+ throws GraphConflictResolutionException
+ {
+ if ( policy == null )
+ {
+ throw new GraphConflictResolutionException( "no GraphConflictResolutionPolicy injected" );
+ }
+
+ if ( graph == null )
+ {
+ return null;
+ }
+
+ final MetadataGraphVertex entry = graph.getEntry();
+ if ( entry == null )
+ {
+ return null;
+ }
+
+ if ( graph.isEmpty() )
+ {
+ throw new GraphConflictResolutionException( "graph with an entry, but not vertices do not exist" );
+ }
+
+ if ( graph.isEmptyEdges() )
+ {
+ return null; // no edges - nothing to worry about
+ }
+
+ final TreeSet<MetadataGraphVertex> vertices = graph.getVertices();
+
+ try
+ {
+ // edge case - single vertex graph
+ if ( vertices.size() == 1 )
+ {
+ return new MetadataGraph( entry );
+ }
+
+ final ArtifactScopeEnum requestedScope = ArtifactScopeEnum.checkScope( scope );
+
+ MetadataGraph res = new MetadataGraph( vertices.size() );
+ res.setVersionedVertices( false );
+ res.setScopedVertices( false );
+
+ MetadataGraphVertex resEntry = res.addVertex( entry.getMd() );
+ res.setEntry( resEntry );
+
+ res.setScope( requestedScope );
+
+ for ( MetadataGraphVertex v : vertices )
+ {
+ final List<MetadataGraphEdge> ins = graph.getIncidentEdges( v );
+ final MetadataGraphEdge edge = cleanEdges( v, ins, requestedScope );
+
+ if ( edge == null )
+ { // no edges - don't need this vertex any more
+ if ( entry.equals( v ) )
+ { // unless it's an entry point.
+ // currently processing the entry point - it should not have any entry incident edges
+ res.getEntry().getMd().setWhy( "This is a graph entry point. No links." );
+ }
+ else
+ {
+ // System.out.println("--->"+v.getMd().toDomainString()
+ // +" has been terminated on this entry set\n-------------------\n"
+ // +ins
+ // +"\n-------------------\n"
+ // );
+ }
+ }
+ else
+ {
+ // System.out.println("+++>"+v.getMd().toDomainString()+" still has "+edge.toString() );
+ // fill in domain md with actual version data
+ ArtifactMetadata md = v.getMd();
+ ArtifactMetadata newMd =
+ new ArtifactMetadata( md.getGroupId(), md.getArtifactId(), edge.getVersion(), md.getType(),
+ md.getScopeAsEnum(), md.getClassifier(), edge.getArtifactUri(),
+ edge.getSource() == null ? "" : edge.getSource().getMd().toString(),
+ edge.isResolved(), edge.getTarget() == null ? null
+ : edge.getTarget().getMd().getError() );
+ MetadataGraphVertex newV = res.addVertex( newMd );
+ MetadataGraphVertex sourceV = res.addVertex( edge.getSource().getMd() );
+
+ res.addEdge( sourceV, newV, edge );
+ }
+ }
+ MetadataGraph linkedRes = findLinkedSubgraph( res );
+ // System.err.println("Original graph("+graph.getVertices().size()+"):\n"+graph.toString());
+ // System.err.println("Cleaned("+requestedScope+") graph("+res.getVertices().size()+"):\n"+res.toString());
+ // System.err.println("Linked("+requestedScope+")
+ // subgraph("+linkedRes.getVertices().size()+"):\n"+linkedRes.toString());
+ return linkedRes;
+ }
+ catch ( MetadataResolutionException e )
+ {
+ throw new GraphConflictResolutionException( e );
+ }
+ }
+
+ // -------------------------------------------------------------------------------------
+ private MetadataGraph findLinkedSubgraph( MetadataGraph g )
+ {
+ if ( g.getVertices().size() == 1 )
+ {
+ return g;
+ }
+
+ List<MetadataGraphVertex> visited = new ArrayList<MetadataGraphVertex>( g.getVertices().size() );
+ visit( g.getEntry(), visited, g );
+
+ List<MetadataGraphVertex> dropList = new ArrayList<MetadataGraphVertex>( g.getVertices().size() );
+
+ // collect drop list
+ for ( MetadataGraphVertex v : g.getVertices() )
+ {
+ if ( !visited.contains( v ) )
+ {
+ dropList.add( v );
+ }
+ }
+
+ if ( dropList.size() < 1 )
+ {
+ return g;
+ }
+
+ // now - drop vertices
+ TreeSet<MetadataGraphVertex> vertices = g.getVertices();
+ for ( MetadataGraphVertex v : dropList )
+ {
+ vertices.remove( v );
+ }
+
+ return g;
+ }
+
+ // -------------------------------------------------------------------------------------
+ private void visit( MetadataGraphVertex from, List<MetadataGraphVertex> visited, MetadataGraph graph )
+ {
+ if ( visited.contains( from ) )
+ {
+ return;
+ }
+
+ visited.add( from );
+
+ List<MetadataGraphEdge> exitList = graph.getExcidentEdges( from );
+ // String s = "|---> "+from.getMd().toString()+" - "+(exitList == null ? -1 : exitList.size()) + " exit links";
+ if ( exitList != null && exitList.size() > 0 )
+ {
+ for ( MetadataGraphEdge e : graph.getExcidentEdges( from ) )
+ {
+ visit( e.getTarget(), visited, graph );
+ }
+ }
+ }
+
+ // -------------------------------------------------------------------------------------
+ private MetadataGraphEdge cleanEdges( MetadataGraphVertex v, List<MetadataGraphEdge> edges,
+ ArtifactScopeEnum scope )
+ {
+ if ( edges == null || edges.isEmpty() )
+ {
+ return null;
+ }
+
+ if ( edges.size() == 1 )
+ {
+ MetadataGraphEdge e = edges.get( 0 );
+ if ( scope.encloses( e.getScope() ) )
+ {
+ return e;
+ }
+
+ return null;
+ }
+
+ MetadataGraphEdge res = null;
+
+ for ( MetadataGraphEdge e : edges )
+ {
+ if ( !scope.encloses( e.getScope() ) )
+ {
+ continue;
+ }
+
+ if ( res == null )
+ {
+ res = e;
+ }
+ else
+ {
+ res = policy.apply( e, res );
+ }
+ }
+
+ return res;
+ }
+ // -------------------------------------------------------------------------------------
+ // -------------------------------------------------------------------------------------
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/GraphConflictResolutionException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/GraphConflictResolutionException.java
new file mode 100644
index 00000000..035904aa
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/GraphConflictResolutionException.java
@@ -0,0 +1,51 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ *
+ * @author <a href="mailto:oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
+public class GraphConflictResolutionException
+ extends Exception
+{
+ private static final long serialVersionUID = 2677613140287940255L;
+
+ public GraphConflictResolutionException()
+ {
+ }
+
+ public GraphConflictResolutionException( String message )
+ {
+ super( message );
+ }
+
+ public GraphConflictResolutionException( Throwable cause )
+ {
+ super( cause );
+ }
+
+ public GraphConflictResolutionException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/GraphConflictResolutionPolicy.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/GraphConflictResolutionPolicy.java
new file mode 100644
index 00000000..979d3831
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/GraphConflictResolutionPolicy.java
@@ -0,0 +1,35 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * MetadataGraph edge selection policy. Complements
+ * GraphConflictResolver by being injected into it
+ *
+ * @author <a href="mailto:oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
+
+public interface GraphConflictResolutionPolicy
+{
+ String ROLE = GraphConflictResolutionPolicy.class.getName();
+
+ MetadataGraphEdge apply( MetadataGraphEdge e1, MetadataGraphEdge e2 );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/GraphConflictResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/GraphConflictResolver.java
new file mode 100644
index 00000000..ef70baa2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/GraphConflictResolver.java
@@ -0,0 +1,48 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.ArtifactScopeEnum;
+
+/**
+ * Resolves conflicts in the supplied dependency graph.
+ * Different implementations will implement different conflict resolution policies.
+ *
+ * @author <a href="mailto:oleg@codehaus.org">Oleg Gusakov</a>
+ */
+public interface GraphConflictResolver
+{
+ String ROLE = GraphConflictResolver.class.getName();
+
+ /**
+ * Cleanses the supplied graph by leaving only one directed versioned edge\
+ * between any two nodes, if multiple exists. Uses scope relationships, defined
+ * in <code>ArtifactScopeEnum</code>
+ *
+ * @param graph the "dirty" graph to be simplified via conflict resolution
+ * @param scope scope for which the graph should be resolved
+ *
+ * @return resulting "clean" graph for the specified scope
+ *
+ * @since 3.0
+ */
+ MetadataGraph resolveConflicts( MetadataGraph graph, ArtifactScopeEnum scope )
+ throws GraphConflictResolutionException;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraph.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraph.java
new file mode 100644
index 00000000..55b02504
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraph.java
@@ -0,0 +1,523 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeSet;
+
+import org.apache.maven.artifact.ArtifactScopeEnum;
+
+/**
+ * maven dependency metadata graph
+ *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
+public class MetadataGraph
+{
+ public static final int DEFAULT_VERTICES = 32;
+ public static final int DEFAULT_EDGES = 64;
+
+ // flags to indicate the granularity of vertices
+ private boolean versionedVertices = false;
+ private boolean scopedVertices = false;
+ /**
+ * the entry point we started building the graph from
+ */
+ MetadataGraphVertex entry;
+
+ // graph vertices
+ TreeSet<MetadataGraphVertex> vertices;
+
+ /**
+ * incident and excident edges per node
+ */
+ Map<MetadataGraphVertex, List<MetadataGraphEdge>> incidentEdges;
+ Map<MetadataGraphVertex, List<MetadataGraphEdge>> excidentEdges;
+
+ /**
+ * null in dirty graph, actual
+ * scope for conflict-resolved graph
+ */
+ ArtifactScopeEnum scope;
+
+ //------------------------------------------------------------------------
+ /**
+ * init graph
+ */
+ public MetadataGraph( int nVertices )
+ {
+ init( nVertices, 2 * nVertices );
+ }
+ public MetadataGraph( int nVertices, int nEdges )
+ {
+ init( nVertices, nEdges );
+ }
+ //------------------------------------------------------------------------
+ /**
+ * construct a single vertex
+ */
+ public MetadataGraph( MetadataGraphVertex entry )
+ throws MetadataResolutionException
+ {
+ checkVertex( entry );
+ checkVertices( 1 );
+
+ entry.setCompareVersion( versionedVertices );
+ entry.setCompareScope( scopedVertices );
+
+ vertices.add( entry );
+ this.entry = entry;
+ }
+ //------------------------------------------------------------------------
+ /**
+ * construct graph from a "dirty" tree
+ */
+ public MetadataGraph( MetadataTreeNode tree )
+ throws MetadataResolutionException
+ {
+ this( tree, false, false );
+ }
+ //------------------------------------------------------------------------
+ /**
+ * construct graph from a "dirty" tree
+ *
+ * @param tree "dirty" tree root
+ * @param versionedVertices true if graph nodes should be versioned (different versions -> different nodes)
+ * @param scopedVertices true if graph nodes should be versioned and scoped (different versions and/or scopes -> different nodes)
+ *
+ */
+ public MetadataGraph( MetadataTreeNode tree, boolean versionedVertices, boolean scopedVertices )
+ throws MetadataResolutionException
+ {
+ if ( tree == null )
+ {
+ throw new MetadataResolutionException( "tree is null" );
+ }
+
+ setVersionedVertices( versionedVertices );
+ setScopedVertices( scopedVertices );
+
+ this.versionedVertices = scopedVertices || versionedVertices;
+ this.scopedVertices = scopedVertices;
+
+ int count = countNodes( tree );
+
+ init( count, count + ( count / 2 ) );
+
+ processTreeNodes( null, tree, 0, 0 );
+ }
+ //------------------------------------------------------------------------
+ private void processTreeNodes( MetadataGraphVertex parentVertex, MetadataTreeNode node, int depth, int pomOrder )
+ throws MetadataResolutionException
+ {
+ if ( node == null )
+ {
+ return;
+ }
+
+ MetadataGraphVertex vertex = new MetadataGraphVertex( node.md, versionedVertices, scopedVertices );
+ if ( !vertices.contains( vertex ) )
+ {
+ vertices.add( vertex );
+ }
+
+ if ( parentVertex != null ) // then create the edge
+ {
+ ArtifactMetadata md = node.getMd();
+ MetadataGraphEdge e =
+ new MetadataGraphEdge( md.version, md.resolved, md.artifactScope, md.artifactUri, depth, pomOrder );
+ addEdge( parentVertex, vertex, e );
+ }
+ else
+ {
+ entry = vertex;
+ }
+
+ MetadataTreeNode[] kids = node.getChildren();
+ if ( kids == null || kids.length < 1 )
+ {
+ return;
+ }
+
+ for ( int i = 0; i < kids.length; i++ )
+ {
+ MetadataTreeNode n = kids[i];
+ processTreeNodes( vertex, n, depth + 1, i );
+ }
+ }
+ //------------------------------------------------------------------------
+ public MetadataGraphVertex findVertex( ArtifactMetadata md )
+ {
+ if ( md == null || vertices == null || vertices.size() < 1 )
+ {
+ return null;
+ }
+
+ MetadataGraphVertex v = new MetadataGraphVertex( md );
+ v.setCompareVersion( versionedVertices );
+ v.setCompareScope( scopedVertices );
+
+ for ( MetadataGraphVertex gv : vertices )
+ {
+ if ( gv.equals( v ) )
+ {
+ return gv;
+ }
+ }
+
+ return null;
+ }
+ //------------------------------------------------------------------------
+ public MetadataGraphVertex addVertex( ArtifactMetadata md )
+ {
+ if ( md == null )
+ {
+ return null;
+ }
+
+ checkVertices();
+
+ MetadataGraphVertex v = findVertex( md );
+ if ( v != null )
+ {
+ return v;
+ }
+
+ v = new MetadataGraphVertex( md );
+
+ v.setCompareVersion( versionedVertices );
+ v.setCompareScope( scopedVertices );
+
+ vertices.add( v );
+ return v;
+ }
+ //------------------------------------------------------------------------
+ /**
+ * init graph
+ */
+ private void init( int nVertices, int nEdges )
+ {
+ int nV = nVertices;
+ if ( nVertices < 1 )
+ {
+ nV = 1;
+ }
+
+ checkVertices( nV );
+
+ int nE = nVertices;
+ if ( nEdges <= nV )
+ {
+ nE = 2 * nE;
+ }
+
+ checkEdges( nE );
+ }
+
+ private void checkVertices()
+ {
+ checkVertices( DEFAULT_VERTICES );
+ }
+
+ private void checkVertices( int nVertices )
+ {
+ if ( vertices == null )
+ {
+ vertices = new TreeSet<MetadataGraphVertex>();
+ }
+ }
+ private void checkEdges()
+ {
+ int count = DEFAULT_EDGES;
+
+ if ( vertices != null )
+ {
+ count = vertices.size() + vertices.size() / 2;
+ }
+
+ checkEdges( count );
+ }
+ private void checkEdges( int nEdges )
+ {
+ if ( incidentEdges == null )
+ {
+ incidentEdges = new HashMap<MetadataGraphVertex, List<MetadataGraphEdge>>( nEdges );
+ }
+ if ( excidentEdges == null )
+ {
+ excidentEdges = new HashMap<MetadataGraphVertex, List<MetadataGraphEdge>>( nEdges );
+ }
+ }
+ //------------------------------------------------------------------------
+ private static void checkVertex( MetadataGraphVertex v )
+ throws MetadataResolutionException
+ {
+ if ( v == null )
+ {
+ throw new MetadataResolutionException( "null vertex" );
+ }
+ if ( v.getMd() == null )
+ {
+ throw new MetadataResolutionException( "vertex without metadata" );
+ }
+ }
+ //------------------------------------------------------------------------
+ private static void checkEdge( MetadataGraphEdge e )
+ throws MetadataResolutionException
+ {
+ if ( e == null )
+ {
+ throw new MetadataResolutionException( "badly formed edge" );
+ }
+ }
+ //------------------------------------------------------------------------
+ public List<MetadataGraphEdge> getEdgesBetween( MetadataGraphVertex vFrom, MetadataGraphVertex vTo )
+ {
+ List<MetadataGraphEdge> edges = getIncidentEdges( vTo );
+ if ( edges == null || edges.isEmpty() )
+ {
+ return null;
+ }
+
+ List<MetadataGraphEdge> res = new ArrayList<MetadataGraphEdge>( edges.size() );
+
+ for ( MetadataGraphEdge e : edges )
+ {
+ if ( e.getSource().equals( vFrom ) )
+ {
+ res.add( e );
+ }
+ }
+
+ return res;
+ }
+ //------------------------------------------------------------------------
+ public MetadataGraph addEdge( MetadataGraphVertex vFrom, MetadataGraphVertex vTo, MetadataGraphEdge e )
+ throws MetadataResolutionException
+ {
+ checkVertex( vFrom );
+ checkVertex( vTo );
+
+ checkVertices();
+
+ checkEdge( e );
+ checkEdges();
+
+ e.setSource( vFrom );
+ e.setTarget( vTo );
+
+ vFrom.setCompareVersion( versionedVertices );
+ vFrom.setCompareScope( scopedVertices );
+
+ List<MetadataGraphEdge> exList = excidentEdges.get( vFrom );
+ if ( exList == null )
+ {
+ exList = new ArrayList<MetadataGraphEdge>();
+ excidentEdges.put( vFrom, exList );
+ }
+
+ if ( !exList.contains( e ) )
+ {
+ exList.add( e );
+ }
+
+ List<MetadataGraphEdge> inList = incidentEdges.get( vTo );
+ if ( inList == null )
+ {
+ inList = new ArrayList<MetadataGraphEdge>();
+ incidentEdges.put( vTo, inList );
+ }
+
+ if ( !inList.contains( e ) )
+ {
+ inList.add( e );
+ }
+
+ return this;
+ }
+ //------------------------------------------------------------------------
+ public MetadataGraph removeVertex( MetadataGraphVertex v )
+ {
+ if ( vertices != null && v != null )
+ {
+ vertices.remove( v );
+ }
+
+ if ( incidentEdges != null )
+ {
+ incidentEdges.remove( v );
+ }
+
+ if ( excidentEdges != null )
+ {
+ excidentEdges.remove( v );
+ }
+
+ return this;
+
+ }
+ //------------------------------------------------------------------------
+ private static int countNodes( MetadataTreeNode tree )
+ {
+ if ( tree == null )
+ {
+ return 0;
+ }
+
+ int count = 1;
+ MetadataTreeNode[] kids = tree.getChildren();
+ if ( kids == null || kids.length < 1 )
+ {
+ return count;
+ }
+ for ( MetadataTreeNode n : kids )
+ {
+ count += countNodes( n );
+ }
+
+ return count;
+ }
+
+ //------------------------------------------------------------------------
+ public MetadataGraphVertex getEntry()
+ {
+ return entry;
+ }
+
+ public void setEntry( MetadataGraphVertex entry )
+ {
+ this.entry = entry;
+ }
+
+ public TreeSet<MetadataGraphVertex> getVertices()
+ {
+ return vertices;
+ }
+
+ public List<MetadataGraphEdge> getIncidentEdges( MetadataGraphVertex vertex )
+ {
+ checkEdges();
+ return incidentEdges.get( vertex );
+ }
+
+ public List<MetadataGraphEdge> getExcidentEdges( MetadataGraphVertex vertex )
+ {
+ checkEdges();
+ return excidentEdges.get( vertex );
+ }
+
+ public boolean isVersionedVertices()
+ {
+ return versionedVertices;
+ }
+
+ public void setVersionedVertices( boolean versionedVertices )
+ {
+ this.versionedVertices = versionedVertices;
+ }
+
+ public boolean isScopedVertices()
+ {
+ return scopedVertices;
+ }
+
+ public void setScopedVertices( boolean scopedVertices )
+ {
+ this.scopedVertices = scopedVertices;
+
+ // scoped graph is versioned by definition
+ if ( scopedVertices )
+ {
+ versionedVertices = true;
+ }
+ }
+
+ public ArtifactScopeEnum getScope()
+ {
+ return scope;
+ }
+
+ public void setScope( ArtifactScopeEnum scope )
+ {
+ this.scope = scope;
+ }
+
+ // ------------------------------------------------------------------------
+ public boolean isEmpty()
+ {
+ return entry == null || vertices == null || vertices.isEmpty();
+ }
+
+ //------------------------------------------------------------------------
+ public boolean isEmptyEdges()
+ {
+ return isEmpty() || incidentEdges == null || incidentEdges.isEmpty();
+ }
+ //------------------------------------------------------------------------
+ @Override
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder( 512 );
+ if ( isEmpty() )
+ {
+ return "empty";
+ }
+ for ( MetadataGraphVertex v : vertices )
+ {
+ sb.append( "Vertex: " ).append( v.getMd().toString() ).append( "\n" );
+ List<MetadataGraphEdge> ins = getIncidentEdges( v );
+ if ( ins != null )
+ {
+ for ( MetadataGraphEdge e : ins )
+ {
+ sb.append( " from : " ).append( e.toString() ).append( "\n" );
+ }
+ }
+ else
+ {
+ sb.append( " no entries\n" );
+ }
+
+ List<MetadataGraphEdge> outs = getExcidentEdges( v );
+ if ( outs != null )
+ {
+ for ( MetadataGraphEdge e : outs )
+ {
+ sb.append( " to : " ).append( e.toString() ).append( "\n" );
+ }
+ }
+ else
+ {
+ sb.append( " no exit\n" );
+ }
+
+ sb.append( "-------------------------------------------------\n" );
+ }
+ sb.append( "=============================================================\n" );
+ return sb.toString();
+ }
+
+ //------------------------------------------------------------------------
+ //------------------------------------------------------------------------
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphEdge.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphEdge.java
new file mode 100644
index 00000000..5f16df06
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphEdge.java
@@ -0,0 +1,189 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.ArtifactScopeEnum;
+
+/**
+ * metadata graph edge - combination of version, scope and depth define
+ * an edge in the graph
+ *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
+
+public class MetadataGraphEdge
+{
+ String version;
+ ArtifactScopeEnum scope;
+ int depth = -1;
+ int pomOrder = -1;
+ boolean resolved = true;
+ String artifactUri;
+
+ /**
+ * capturing where this link came from
+ * and where it is linked to.
+ *
+ * In the first implementation only source used for explanatory function
+ */
+ MetadataGraphVertex source;
+ MetadataGraphVertex target;
+
+ //----------------------------------------------------------------------------
+ public MetadataGraphEdge( String version, boolean resolved, ArtifactScopeEnum scope, String artifactUri, int depth,
+ int pomOrder )
+ {
+ super();
+ this.version = version;
+ this.scope = scope;
+ this.artifactUri = artifactUri;
+ this.depth = depth;
+ this.resolved = resolved;
+ this.pomOrder = pomOrder;
+ }
+ //----------------------------------------------------------------------------
+ /**
+ * helper for equals
+ */
+ private static boolean objectsEqual( Object o1, Object o2 )
+ {
+ if ( o1 == null && o2 == null )
+ {
+ return true;
+ }
+ if ( o1 == null || o2 == null )
+ {
+ return false; // as they are not both null
+ }
+ return o1.equals( o2 );
+ }
+
+ //----------------------------------------------------------------------------
+ /**
+ * used to eliminate exact duplicates in the edge list
+ */
+ @Override
+ public boolean equals( Object o )
+ {
+ if ( o instanceof MetadataGraphEdge )
+ {
+ MetadataGraphEdge e = (MetadataGraphEdge) o;
+
+ return objectsEqual( version, e.version )
+ && ArtifactScopeEnum.checkScope( scope ).getScope().equals( ArtifactScopeEnum.checkScope( e.scope ).getScope() )
+ && depth == e.depth;
+ }
+ return false;
+ }
+
+ //----------------------------------------------------------------------------
+ public String getVersion()
+ {
+ return version;
+ }
+
+ public void setVersion( String version )
+ {
+ this.version = version;
+ }
+
+ public ArtifactScopeEnum getScope()
+ {
+ return scope;
+ }
+
+ public void setScope( ArtifactScopeEnum scope )
+ {
+ this.scope = scope;
+ }
+
+ public int getDepth()
+ {
+ return depth;
+ }
+
+ public void setDepth( int depth )
+ {
+ this.depth = depth;
+ }
+
+ public boolean isResolved()
+ {
+ return resolved;
+ }
+
+ public void setResolved( boolean resolved )
+ {
+ this.resolved = resolved;
+ }
+
+ public int getPomOrder()
+ {
+ return pomOrder;
+ }
+
+ public void setPomOrder( int pomOrder )
+ {
+ this.pomOrder = pomOrder;
+ }
+
+ public String getArtifactUri()
+ {
+ return artifactUri;
+ }
+
+ public void setArtifactUri( String artifactUri )
+ {
+ this.artifactUri = artifactUri;
+ }
+
+ public MetadataGraphVertex getSource()
+ {
+ return source;
+ }
+
+ public void setSource( MetadataGraphVertex source )
+ {
+ this.source = source;
+ }
+
+ public MetadataGraphVertex getTarget()
+ {
+ return target;
+ }
+
+ public void setTarget( MetadataGraphVertex target )
+ {
+ this.target = target;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "[ " + "FROM:("
+ + ( source == null ? "no source" : ( source.md == null ? "no source MD" : source.md.toString() ) ) + ") "
+ + "TO:(" + ( target == null ? "no target" : ( target.md == null ? "no target MD" : target.md.toString() ) )
+ + ") " + "version=" + version + ", scope=" + ( scope == null ? "null" : scope.getScope() ) + ", depth="
+ + depth + "]";
+ }
+ //----------------------------------------------------------------------------
+ //----------------------------------------------------------------------------
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphTransformationException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphTransformationException.java
new file mode 100644
index 00000000..16a34a8c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphTransformationException.java
@@ -0,0 +1,50 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
+public class MetadataGraphTransformationException
+ extends Exception
+{
+ private static final long serialVersionUID = -4029897098314019152L;
+
+ public MetadataGraphTransformationException()
+ {
+ }
+
+ public MetadataGraphTransformationException( String message )
+ {
+ super( message );
+ }
+
+ public MetadataGraphTransformationException( Throwable cause )
+ {
+ super( cause );
+ }
+
+ public MetadataGraphTransformationException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphVertex.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphVertex.java
new file mode 100644
index 00000000..bdccf6a5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphVertex.java
@@ -0,0 +1,216 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.ArtifactScopeEnum;
+
+/**
+ * metadata graph vertice - just a wrapper around artifact's metadata
+ *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ */
+public class MetadataGraphVertex
+ implements Comparable<MetadataGraphVertex>
+{
+ ArtifactMetadata md;
+
+ // indications to use these in comparrison
+ private boolean compareVersion = false;
+ private boolean compareScope = false;
+
+ public MetadataGraphVertex( ArtifactMetadata md )
+ {
+ super();
+ this.md = md;
+ }
+
+ public MetadataGraphVertex( ArtifactMetadata md, boolean compareVersion, boolean compareScope )
+ {
+ this( md );
+ this.compareVersion = compareVersion;
+ this.compareScope = compareScope;
+ }
+
+ public ArtifactMetadata getMd()
+ {
+ return md;
+ }
+
+ public void setMd( ArtifactMetadata md )
+ {
+ this.md = md;
+ }
+
+ // ---------------------------------------------------------------------
+ public boolean isCompareVersion()
+ {
+ return compareVersion;
+ }
+
+ public void setCompareVersion( boolean compareVersion )
+ {
+ this.compareVersion = compareVersion;
+ }
+
+ public boolean isCompareScope()
+ {
+ return compareScope;
+ }
+
+ public void setCompareScope( boolean compareScope )
+ {
+ this.compareScope = compareScope;
+ }
+
+ // ---------------------------------------------------------------------
+ @Override
+ public String toString()
+ {
+ return "[" + ( md == null ? "no metadata" : md.toString() ) + "]";
+ }
+
+ // ---------------------------------------------------------------------
+ private static int compareStrings( String s1, String s2 )
+ {
+ if ( s1 == null && s2 == null )
+ {
+ return 0;
+ }
+
+ if ( s1 == null /* && s2 != null */ )
+ {
+ return -1;
+ }
+
+ if ( /* s1 != null && */ s2 == null )
+ {
+ return 1;
+ }
+
+ return s1.compareTo( s2 );
+ }
+
+ // ---------------------------------------------------------------------
+ public int compareTo( MetadataGraphVertex vertex )
+ {
+ if ( vertex == null || vertex.getMd() == null )
+ {
+ return 1;
+ }
+
+ ArtifactMetadata vmd = vertex.getMd();
+
+ if ( vmd == null )
+ {
+ if ( md == null )
+ {
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+ }
+
+ int g = compareStrings( md.groupId, vmd.groupId );
+
+ if ( g == 0 )
+ {
+ int a = compareStrings( md.artifactId, vmd.artifactId );
+ if ( a == 0 )
+ {
+ if ( compareVersion )
+ {
+ int v = compareStrings( md.version, vmd.version );
+ if ( v == 0 )
+ {
+ if ( compareScope )
+ {
+ String s1 = ArtifactScopeEnum.checkScope( md.artifactScope ).getScope();
+ String s2 = ArtifactScopeEnum.checkScope( vmd.artifactScope ).getScope();
+ return s1.compareTo( s2 );
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ else
+ {
+ return v;
+ }
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ else
+ {
+ return a;
+ }
+ }
+
+ return g;
+ }
+
+ // ---------------------------------------------------------------------
+ @Override
+ public boolean equals( Object vo )
+ {
+ if ( vo == null || !( vo instanceof MetadataGraphVertex ) )
+ {
+ return false;
+ }
+ return compareTo( (MetadataGraphVertex) vo ) == 0;
+ }
+
+ // ---------------------------------------------------------------------
+
+ @Override
+ public int hashCode()
+ {
+ if ( md == null )
+ {
+ return super.hashCode();
+ }
+ StringBuilder hashString = new StringBuilder( 128 );
+ hashString.append( md.groupId ).append( "|" );
+ hashString.append( md.artifactId ).append( "|" );
+
+ if ( compareVersion )
+ {
+ hashString.append( md.version ).append( "|" );
+ }
+
+ if ( compareScope )
+ {
+ hashString.append( md.getArtifactScope() ).append( "|" );
+ }
+
+ return hashString.toString().hashCode();
+
+ // BASE64Encoder b64 = new BASE64Encoder();
+ // return b64.encode( hashString.toString().getBytes() ).hashCode();
+ }
+
+ // ---------------------------------------------------------------------
+ // ---------------------------------------------------------------------
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolution.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolution.java
new file mode 100644
index 00000000..9a9130b2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolution.java
@@ -0,0 +1,71 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/**
+ *
+ * @author Jason van Zyl
+ *
+ */
+public class MetadataResolution
+{
+ /** resolved MD */
+ private ArtifactMetadata artifactMetadata;
+
+ /** repositories, added by this POM */
+ private Collection<ArtifactRepository> metadataRepositories;
+ //-------------------------------------------------------------------
+ public MetadataResolution( ArtifactMetadata artifactMetadata )
+ {
+ this.artifactMetadata = artifactMetadata;
+ }
+ //-------------------------------------------------------------------
+ public MetadataResolution( ArtifactMetadata artifactMetadata, Collection<ArtifactRepository> metadataRepositories )
+ {
+ this( artifactMetadata );
+ this.metadataRepositories = metadataRepositories;
+ }
+ //-------------------------------------------------------------------
+ public Collection<ArtifactRepository> getMetadataRepositories()
+ {
+ return metadataRepositories;
+ }
+
+ public void setMetadataRepositories( Collection<ArtifactRepository> metadataRepositories )
+ {
+ this.metadataRepositories = metadataRepositories;
+ }
+ //-------------------------------------------------------------------
+ public ArtifactMetadata getArtifactMetadata()
+ {
+ return artifactMetadata;
+ }
+
+ public void setArtifactMetadata( ArtifactMetadata artifactMetadata )
+ {
+ this.artifactMetadata = artifactMetadata;
+ }
+ //-------------------------------------------------------------------
+ //-------------------------------------------------------------------
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionException.java
new file mode 100644
index 00000000..24f832ef
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionException.java
@@ -0,0 +1,49 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public class MetadataResolutionException
+ extends Exception
+{
+
+ public MetadataResolutionException()
+ {
+ // TODO Auto-generated constructor stub
+ }
+
+ public MetadataResolutionException( String message )
+ {
+ super( message );
+ // TODO Auto-generated constructor stub
+ }
+
+ public MetadataResolutionException( Throwable cause )
+ {
+ super( cause );
+ // TODO Auto-generated constructor stub
+ }
+
+ public MetadataResolutionException( String message, Throwable cause )
+ {
+ super( message, cause );
+ // TODO Auto-generated constructor stub
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionRequest.java
new file mode 100644
index 00000000..e1f6fe1e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionRequest.java
@@ -0,0 +1,79 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/** @author Oleg Gusakov */
+public class MetadataResolutionRequest
+{
+ protected ArtifactMetadata query;
+ protected ArtifactRepository localRepository;
+ protected List<ArtifactRepository> remoteRepositories;
+
+ //--------------------------------------------------------------------
+ public MetadataResolutionRequest()
+ {
+ }
+
+ //--------------------------------------------------------------------
+ public MetadataResolutionRequest( ArtifactMetadata query, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ {
+ this.query = query;
+ this.localRepository = localRepository;
+ this.remoteRepositories = remoteRepositories;
+ }
+
+ //--------------------------------------------------------------------
+ public ArtifactMetadata getQuery()
+ {
+ return query;
+ }
+
+ public void setQuery( ArtifactMetadata query )
+ {
+ this.query = query;
+ }
+
+ public ArtifactRepository getLocalRepository()
+ {
+ return localRepository;
+ }
+
+ public void setLocalRepository( ArtifactRepository localRepository )
+ {
+ this.localRepository = localRepository;
+ }
+
+ public List<ArtifactRepository> getRemoteRepositories()
+ {
+ return remoteRepositories;
+ }
+
+ public void setRemoteRepositories( List<ArtifactRepository> remoteRepositories )
+ {
+ this.remoteRepositories = remoteRepositories;
+ }
+ //--------------------------------------------------------------------
+ //--------------------------------------------------------------------
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionRequestTypeEnum.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionRequestTypeEnum.java
new file mode 100644
index 00000000..f305497a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionRequestTypeEnum.java
@@ -0,0 +1,45 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public enum MetadataResolutionRequestTypeEnum
+{
+ tree( 1 )
+ , graph( 2 )
+ , classpathCompile( 3 )
+ , classpathTest( 4 )
+ , classpathRuntime( 5 )
+ , versionedGraph( 6 )
+ , scopedGraph( 7 )
+ ;
+
+ private int id;
+
+ // Constructor
+ MetadataResolutionRequestTypeEnum( int id )
+ {
+ this.id = id;
+ }
+
+ int getId()
+ {
+ return id;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionResult.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionResult.java
new file mode 100644
index 00000000..1d9e9c46
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionResult.java
@@ -0,0 +1,172 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.ArtifactScopeEnum;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+
+/**
+ * This object is tinted with ClasspathTransformation and GraphConflictResolver.
+ * Get rid of them after debugging
+ *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ */
+public class MetadataResolutionResult
+{
+ MetadataTreeNode treeRoot;
+
+ /**
+ * these components are are initialized on demand by
+ * explicit call of the initTreeProcessing()
+ */
+ ClasspathTransformation classpathTransformation;
+ GraphConflictResolver conflictResolver;
+
+ //----------------------------------------------------------------------------
+ public MetadataResolutionResult( )
+ {
+ }
+ //----------------------------------------------------------------------------
+ public MetadataResolutionResult( MetadataTreeNode root )
+ {
+ this.treeRoot = root;
+ }
+ //----------------------------------------------------------------------------
+ public MetadataTreeNode getTree()
+ {
+ return treeRoot;
+ }
+ //----------------------------------------------------------------------------
+ public void setTree( MetadataTreeNode root )
+ {
+ this.treeRoot = root;
+ }
+
+ public void initTreeProcessing( PlexusContainer plexus )
+ throws ComponentLookupException
+ {
+ classpathTransformation = plexus.lookup( ClasspathTransformation.class );
+ conflictResolver = plexus.lookup( GraphConflictResolver.class );
+ }
+ //----------------------------------------------------------------------------
+ public MetadataGraph getGraph()
+ throws MetadataResolutionException
+ {
+ return treeRoot == null ? null : new MetadataGraph( treeRoot );
+ }
+ //----------------------------------------------------------------------------
+ public MetadataGraph getGraph( ArtifactScopeEnum scope )
+ throws MetadataResolutionException, GraphConflictResolutionException
+ {
+ if ( treeRoot == null )
+ {
+ return null;
+ }
+
+ if ( conflictResolver == null )
+ {
+ return null;
+ }
+
+ return conflictResolver.resolveConflicts( getGraph(), scope );
+ }
+ //----------------------------------------------------------------------------
+ public MetadataGraph getGraph( MetadataResolutionRequestTypeEnum requestType )
+ throws MetadataResolutionException, GraphConflictResolutionException
+ {
+ if ( requestType == null )
+ {
+ return null;
+ }
+
+ if ( treeRoot == null )
+ {
+ return null;
+ }
+
+ if ( conflictResolver == null )
+ {
+ return null;
+ }
+
+ if ( requestType.equals( MetadataResolutionRequestTypeEnum.classpathCompile ) )
+ {
+ return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.compile );
+ }
+ else if ( requestType.equals( MetadataResolutionRequestTypeEnum.classpathRuntime ) )
+ {
+ return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.runtime );
+ }
+ else if ( requestType.equals( MetadataResolutionRequestTypeEnum.classpathRuntime ) )
+ {
+ return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.test );
+ }
+ else if ( requestType.equals( MetadataResolutionRequestTypeEnum.classpathRuntime ) )
+ {
+ return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.test );
+ }
+ else if ( requestType.equals( MetadataResolutionRequestTypeEnum.graph ) )
+ {
+ return getGraph();
+ }
+ else if ( requestType.equals( MetadataResolutionRequestTypeEnum.versionedGraph ) )
+ {
+ return new MetadataGraph( getTree(), true, false );
+ }
+ else if ( requestType.equals( MetadataResolutionRequestTypeEnum.scopedGraph ) )
+ {
+ return new MetadataGraph( getTree(), true, true );
+ }
+ return null;
+ }
+ //----------------------------------------------------------------------------
+ public ClasspathContainer getClasspath( ArtifactScopeEnum scope )
+ throws MetadataGraphTransformationException, MetadataResolutionException
+ {
+ if ( classpathTransformation == null )
+ {
+ return null;
+ }
+
+ MetadataGraph dirtyGraph = getGraph();
+ if ( dirtyGraph == null )
+ {
+ return null;
+ }
+
+ return classpathTransformation.transform( dirtyGraph, scope, false );
+ }
+
+ //----------------------------------------------------------------------------
+ public MetadataTreeNode getClasspathTree( ArtifactScopeEnum scope )
+ throws MetadataGraphTransformationException, MetadataResolutionException
+ {
+ ClasspathContainer cpc = getClasspath( scope );
+ if ( cpc == null )
+ {
+ return null;
+ }
+
+ return cpc.getClasspathAsTree();
+ }
+ //----------------------------------------------------------------------------
+ //----------------------------------------------------------------------------
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataRetrievalException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataRetrievalException.java
new file mode 100644
index 00000000..f5461d71
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataRetrievalException.java
@@ -0,0 +1,59 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Error while retrieving repository metadata from the repository.
+ *
+ * @author Jason van Zyl
+ */
+public class MetadataRetrievalException
+ extends Exception
+{
+
+ private ArtifactMetadata artifact;
+
+ public MetadataRetrievalException( String message )
+ {
+ this( message, null, null );
+ }
+
+ public MetadataRetrievalException( Throwable cause )
+ {
+ this( null, cause, null );
+ }
+
+ public MetadataRetrievalException( String message, Throwable cause )
+ {
+ this( message, cause, null );
+ }
+
+ public MetadataRetrievalException( String message, Throwable cause, ArtifactMetadata artifact )
+ {
+ super( message, cause );
+
+ this.artifact = artifact;
+ }
+
+ public ArtifactMetadata getArtifactMetadata()
+ {
+ return artifact;
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataSource.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataSource.java
new file mode 100644
index 00000000..3ca6ce84
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataSource.java
@@ -0,0 +1,39 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/**
+ * Provides some metadata operations, like querying the remote repository for a list of versions available for an
+ * artifact.
+ *
+ * @author Jason van Zyl
+ */
+public interface MetadataSource
+{
+ String ROLE = MetadataSource.class.getName();
+
+ MetadataResolution retrieve( ArtifactMetadata artifact, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ throws MetadataRetrievalException;
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataTreeNode.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataTreeNode.java
new file mode 100644
index 00000000..dd720d38
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataTreeNode.java
@@ -0,0 +1,148 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactScopeEnum;
+
+/**
+ * metadata [dirty] Tree
+ *
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
+public class MetadataTreeNode
+{
+ ArtifactMetadata md; // this node
+
+ MetadataTreeNode parent; // papa
+
+ /** default # of children. Used for tree creation optimization only */
+ int nChildren = 8;
+
+ MetadataTreeNode[] children; // of cause
+
+ public int getNChildren()
+ {
+ return nChildren;
+ }
+
+ public void setNChildren( int children )
+ {
+ nChildren = children;
+ }
+
+ //------------------------------------------------------------------------
+ public MetadataTreeNode()
+ {
+ }
+ //------------------------------------------------------------------------
+ public MetadataTreeNode( ArtifactMetadata md, MetadataTreeNode parent, boolean resolved, ArtifactScopeEnum scope )
+ {
+ if ( md != null )
+ {
+ md.setArtifactScope( ArtifactScopeEnum.checkScope( scope ) );
+ md.setResolved( resolved );
+ }
+
+ this.md = md;
+ this.parent = parent;
+ }
+ //------------------------------------------------------------------------
+ public MetadataTreeNode( Artifact af, MetadataTreeNode parent, boolean resolved, ArtifactScopeEnum scope )
+ {
+ this( new ArtifactMetadata( af ), parent, resolved, scope );
+ }
+
+ // ------------------------------------------------------------------------
+ public void addChild( int index, MetadataTreeNode kid )
+ {
+ if ( kid == null )
+ {
+ return;
+ }
+
+ if ( children == null )
+ {
+ children = new MetadataTreeNode[nChildren];
+ }
+
+ children[index % nChildren] = kid;
+ }
+
+ //------------------------------------------------------------------
+ @Override
+ public String toString()
+ {
+ return md == null ? "no metadata" : md.toString();
+ }
+
+ //------------------------------------------------------------------
+ public String graphHash()
+ throws MetadataResolutionException
+ {
+ if ( md == null )
+ {
+ throw new MetadataResolutionException( "treenode without metadata, parent: "
+ + ( parent == null ? "null" : parent.toString() ) );
+ }
+
+ return md.groupId + ":" + md.artifactId;
+ }
+
+ //------------------------------------------------------------------------
+ public boolean hasChildren()
+ {
+ return children != null;
+ }
+ //------------------------------------------------------------------------
+ public ArtifactMetadata getMd()
+ {
+ return md;
+ }
+
+ public void setMd( ArtifactMetadata md )
+ {
+ this.md = md;
+ }
+
+ public MetadataTreeNode getParent()
+ {
+ return parent;
+ }
+
+ public void setParent( MetadataTreeNode parent )
+ {
+ this.parent = parent;
+ }
+
+ public MetadataTreeNode[] getChildren()
+ {
+ return children;
+ }
+
+ public void setChildren( MetadataTreeNode[] children )
+ {
+ this.children = children;
+ }
+ //------------------------------------------------------------------------
+ //------------------------------------------------------------------------
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumentationException.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumentationException.java
new file mode 100644
index 00000000..050d135c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumentationException.java
@@ -0,0 +1,37 @@
+package org.apache.maven.usability.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public class ExpressionDocumentationException
+ extends Exception
+{
+ static final long serialVersionUID = 1;
+
+ public ExpressionDocumentationException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ public ExpressionDocumentationException( String message )
+ {
+ super( message );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumenter.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumenter.java
new file mode 100644
index 00000000..0e98b0cb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumenter.java
@@ -0,0 +1,175 @@
+package org.apache.maven.usability.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.usability.plugin.io.xpp3.ParamdocXpp3Reader;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class ExpressionDocumenter
+{
+
+ private static final String[] EXPRESSION_ROOTS = { "project", "settings", "session", "plugin", "rootless" };
+
+ private static final String EXPRESSION_DOCO_ROOTPATH = "META-INF/maven/plugin-expressions/";
+
+ private static Map expressionDocumentation;
+
+ public static Map load()
+ throws ExpressionDocumentationException
+ {
+ if ( expressionDocumentation == null )
+ {
+ expressionDocumentation = new HashMap();
+
+ ClassLoader docLoader = initializeDocLoader();
+
+ for ( String EXPRESSION_ROOT : EXPRESSION_ROOTS )
+ {
+ InputStream docStream = null;
+ try
+ {
+ docStream =
+ docLoader.getResourceAsStream( EXPRESSION_DOCO_ROOTPATH + EXPRESSION_ROOT + ".paramdoc.xml" );
+
+ if ( docStream != null )
+ {
+ Map doco = parseExpressionDocumentation( docStream );
+
+ expressionDocumentation.putAll( doco );
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new ExpressionDocumentationException(
+ "Failed to read documentation for expression root: " + EXPRESSION_ROOT, e );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new ExpressionDocumentationException(
+ "Failed to parse documentation for expression root: " + EXPRESSION_ROOT, e );
+ }
+ finally
+ {
+ IOUtil.close( docStream );
+ }
+ }
+ }
+
+ return expressionDocumentation;
+ }
+
+ /**
+ * <expressions>
+ * <expression>
+ * <syntax>project.distributionManagementArtifactRepository</syntax>
+ * <origin><![CDATA[
+ * <distributionManagement>
+ * <repository>
+ * <id>some-repo</id>
+ * <url>scp://host/path</url>
+ * </repository>
+ * <snapshotRepository>
+ * <id>some-snap-repo</id>
+ * <url>scp://host/snapshot-path</url>
+ * </snapshotRepository>
+ * </distributionManagement>
+ * ]]></origin>
+ * <usage><![CDATA[
+ * The repositories onto which artifacts should be deployed.
+ * One is for releases, the other for snapshots.
+ * ]]></usage>
+ * </expression>
+ * <expressions>
+ * @throws IOException
+ * @throws XmlPullParserException
+ */
+ private static Map parseExpressionDocumentation( InputStream docStream )
+ throws IOException, XmlPullParserException
+ {
+ Reader reader = new BufferedReader( ReaderFactory.newXmlReader( docStream ) );
+
+ ParamdocXpp3Reader paramdocReader = new ParamdocXpp3Reader();
+
+ ExpressionDocumentation documentation = paramdocReader.read( reader, true );
+
+ List expressions = documentation.getExpressions();
+
+ Map bySyntax = new HashMap();
+
+ if ( expressions != null && !expressions.isEmpty() )
+ {
+ for ( Object expression : expressions )
+ {
+ Expression expr = (Expression) expression;
+
+ bySyntax.put( expr.getSyntax(), expr );
+ }
+ }
+
+ return bySyntax;
+ }
+
+ private static ClassLoader initializeDocLoader()
+ throws ExpressionDocumentationException
+ {
+ String myResourcePath = ExpressionDocumenter.class.getName().replace( '.', '/' ) + ".class";
+
+ URL myResource = ExpressionDocumenter.class.getClassLoader().getResource( myResourcePath );
+
+ assert myResource != null : "The resource is this class itself loaded by its own classloader and must exist";
+
+ String myClasspathEntry = myResource.getPath();
+
+ myClasspathEntry = myClasspathEntry.substring( 0, myClasspathEntry.length() - ( myResourcePath.length() + 2 ) );
+
+ if ( myClasspathEntry.startsWith( "file:" ) )
+ {
+ myClasspathEntry = myClasspathEntry.substring( "file:".length() );
+ }
+
+ URL docResource;
+ try
+ {
+ docResource = new File( myClasspathEntry ).toURL();
+ }
+ catch ( MalformedURLException e )
+ {
+ throw new ExpressionDocumentationException( "Cannot construct expression documentation classpath"
+ + " resource base.", e );
+ }
+
+ return new URLClassLoader( new URL[] { docResource } );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/mdo/paramdoc.mdo b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/mdo/paramdoc.mdo
new file mode 100644
index 00000000..ab253316
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/mdo/paramdoc.mdo
@@ -0,0 +1,154 @@
+<?xml version="1.0"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<model xmlns="http://modello.codehaus.org/MODELLO/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.0.0 http://modello.codehaus.org/xsd/modello-1.0.0.xsd"
+ xml.namespace="http://maven.apache.org/PARAMDOC/${version}"
+ xml.schemaLocation="http://maven.apache.org/xsd/paramdoc-${version}.xsd">
+ <id>paramdoc</id>
+ <name>Paramdoc</name>
+ <description><![CDATA[Documentation on parameter expressions supported by Maven for use in plugins.]]></description>
+ <defaults>
+ <default>
+ <key>package</key>
+ <value>org.apache.maven.usability.plugin</value>
+ </default>
+ </defaults>
+ <classes>
+ <class rootElement="true" xml.tagName="paramdoc">
+ <version>1.0.0</version>
+ <name>ExpressionDocumentation</name>
+ <description>The root of a parameter plugin expression document.</description>
+ <fields>
+ <field>
+ <version>1.0.0</version>
+ <name>expressions</name>
+ <description>The list of plugin parameter expressions described by this
+ document.</description>
+ <association>
+ <type>Expression</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0</version>
+ <code><![CDATA[ private java.util.Map expressionsBySyntax;
+
+ public java.util.Map getExpressionsBySyntax()
+ {
+ if ( expressionsBySyntax == null )
+ {
+ expressionsBySyntax = new java.util.HashMap();
+
+ java.util.List expressions = getExpressions();
+
+ if ( expressions != null && !expressions.isEmpty() )
+ {
+ for ( java.util.Iterator it = expressions.iterator(); it.hasNext(); )
+ {
+ Expression expr = (Expression) it.next();
+
+ expressionsBySyntax.put( expr.getSyntax(), expr );
+ }
+ }
+ }
+
+ return expressionsBySyntax;
+ }
+
+ public void flushExpressionsBySyntax()
+ {
+ expressionsBySyntax = null;
+ }
+]]></code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <version>1.0.0</version>
+ <name>Expression</name>
+ <description>A plugin parameter expression supported by Maven</description>
+ <fields>
+ <field>
+ <version>1.0.0</version>
+ <name>syntax</name>
+ <description>The syntax of the expression</description>
+ <type>String</type>
+ <required>true</required>
+ </field>
+ <field>
+ <version>1.0.0</version>
+ <name>description</name>
+ <description>The description of what this expression references, and what it's generally used for.</description>
+ <type>String</type>
+ <required>true</required>
+ </field>
+ <field>
+ <version>1.0.0</version>
+ <name>configuration</name>
+ <description>The place and syntax used to change the value of this expression.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <version>1.0.0</version>
+ <name>cliOptions</name>
+ <description>The command-line switches used to change the value of this expression.</description>
+ <type>Properties</type>
+ <association xml.mapStyle="explode">
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <version>1.0.0</version>
+ <name>apiMethods</name>
+ <description>The programmatic methods used to change the value of this expression.</description>
+ <type>Properties</type>
+ <association xml.mapStyle="explode">
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <version>1.0.0</version>
+ <name>deprecation</name>
+ <description>A preferred alternative to this expression, in the case where it's deprecated.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <version>1.0.0</version>
+ <name>ban</name>
+ <description>A preferred alternative to this expression, in the case where it's banned from use.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <version>1.0.0</version>
+ <name>editable</name>
+ <description>Whether the value of this expression can be changed.</description>
+ <type>boolean</type>
+ <defaultValue>true</defaultValue>
+ </field>
+ </fields>
+ </class>
+ </classes>
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/mdo/profiles.mdo b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/mdo/profiles.mdo
new file mode 100644
index 00000000..3dcc9962
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/mdo/profiles.mdo
@@ -0,0 +1,398 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<model xmlns="http://modello.codehaus.org/MODELLO/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.0.0 http://modello.codehaus.org/xsd/modello-1.0.0.xsd"
+ xml.namespace="http://maven.apache.org/PROFILES/${version}"
+ xml.schemaLocation="http://maven.apache.org/xsd/profiles-${version}.xsd">
+ <id>profiles</id>
+ <name>Profiles</name>
+ <description><![CDATA[
+ Project-local overrides to the build process based on detected or user-provided environmental parameters.
+ This is the model specification for ${basedir}/profiles.xml.
+ ]]></description>
+ <defaults>
+ <default>
+ <key>package</key>
+ <value>org.apache.maven.profiles</value>
+ </default>
+ </defaults>
+ <classes>
+ <class rootElement="true" xml.tagName="profilesXml">
+ <name>ProfilesRoot</name>
+ <version>1.0.0</version>
+ <description>Root element of the profiles.xml file.</description>
+ <fields>
+ <field>
+ <name>profiles</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ Configuration of build profiles for adjusting the build
+ according to environmental parameters
+ ]]></description>
+ <association>
+ <type>Profile</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>activeProfiles</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ List of manually-activated build profiles, specified in the order in which
+ they should be applied.
+ ]]></description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>Profile</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ Modifications to the build process which is keyed on some
+ sort of environmental parameter.
+ ]]></description>
+ <fields>
+ <field>
+ <name>id</name>
+ <required>true</required>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The ID of this build profile, for activation
+ purposes.</description>
+ </field>
+ <field>
+ <name>activation</name>
+ <version>1.0.0</version>
+ <description><![CDATA[The conditional logic which will automatically
+ trigger the inclusion of this profile.]]></description>
+ <association>
+ <type>Activation</type>
+ </association>
+ </field>
+ <field>
+ <name>properties</name>
+ <description>Extended configuration specific to this profile goes
+ here.</description>
+ <type>Properties</type>
+ <association xml.mapStyle="inline">
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>repositories</name>
+ <version>1.0.0</version>
+ <description><![CDATA[The lists of the remote repositories]]>
+ </description>
+ <association>
+ <type>Repository</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>pluginRepositories</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ The lists of the remote repositories for discovering plugins
+ ]]></description>
+ <association>
+ <type>Repository</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ <comment><![CDATA[ This may be removed or relocated in the near
+ future. It is undecided whether plugins really need a remote
+ repository set of their own. ]]></comment>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>Activation</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ The conditions within the build runtime environment which will trigger
+ the automatic inclusion of the parent build profile.
+ ]]></description>
+ <fields>
+ <field>
+ <name>activeByDefault</name>
+ <version>1.0.0</version>
+ <type>boolean</type>
+ <description>Flag specifying whether this profile is active as a default.</description>
+ </field>
+ <field>
+ <name>jdk</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description><![CDATA[
+ Specifies that this profile will be activated when a matching JDK is detected.
+ ]]></description>
+ </field>
+ <field>
+ <name>os</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ Specifies that this profile will be activated when matching OS attributes are detected.
+ ]]></description>
+ <association>
+ <type>ActivationOS</type>
+ </association>
+ </field>
+ <field>
+ <name>property</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ Specifies that this profile will be activated when this System property is specified.
+ ]]></description>
+ <association>
+ <type>ActivationProperty</type>
+ </association>
+ </field>
+ <field>
+ <name>file</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ Specifies that this profile will be activated based on existence of a file.
+ ]]></description>
+ <association>
+ <type>ActivationFile</type>
+ </association>
+ </field>
+ </fields>
+ </class>
+
+ <!-- TODO: reproduced from maven-model/maven.mdo, instead should inherit code and link to external docs -->
+ <class>
+ <name>RepositoryBase</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ Repository contains the information needed
+ for establishing connections with remote repoistory
+ ]]></description>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ A unique identifier for a repository.
+ ]]></description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>name</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ Human readable name of the repository
+ ]]></description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ The url of the repository
+ ]]></description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>layout</name>
+ <version>1.0.0</version>
+ <description>The type of layout this repository uses for locating and storing artifacts - can be "legacy" or
+ "default".</description>
+ <type>String</type>
+ <defaultValue>default</defaultValue>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0</version>
+ <code><![CDATA[
+ public boolean equals( Object obj )
+ {
+ RepositoryBase other = (RepositoryBase) obj;
+
+ boolean retValue = false;
+
+ if ( id != null )
+ {
+ retValue = id.equals( other.id );
+ }
+
+ return retValue;
+ }
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <name>Repository</name>
+ <superClass>RepositoryBase</superClass>
+ <version>1.0.0</version>
+ <description>
+ Repository contains the information needed for establishing connections with remote repoistory
+ </description>
+ <fields>
+ <field>
+ <name>releases</name>
+ <version>1.0.0</version>
+ <description>How to handle downloading of releases from this repository</description>
+ <association>
+ <type>RepositoryPolicy</type>
+ </association>
+ </field>
+ <field>
+ <name>snapshots</name>
+ <version>1.0.0</version>
+ <description>How to handle downloading of snapshots from this repository</description>
+ <association>
+ <type>RepositoryPolicy</type>
+ </association>
+ </field>
+ </fields>
+ <!-- prevent modello generation of an incorrect equals method. Could be avoided by using <identity/> tags to mark ID as the only identity field -->
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0</version>
+ <code><![CDATA[
+ public boolean equals( Object obj )
+ {
+ return super.equals( obj );
+ }
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+
+ <class>
+ <name>RepositoryPolicy</name>
+ <version>1.0.0</version>
+ <description>Download policy</description>
+ <fields>
+ <field>
+ <name>enabled</name>
+ <version>1.0.0</version>
+ <description>Whether to use this repository for downloading this type of artifact</description>
+ <type>boolean</type>
+ <defaultValue>true</defaultValue>
+ </field>
+ <field>
+ <name>updatePolicy</name>
+ <version>1.0.0</version>
+ <description>
+ The frequency for downloading updates - can be "always", "daily" (default), "interval:XXX" (in minutes) or
+ "never" (only if it doesn't exist locally).
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>checksumPolicy</name>
+ <version>1.0.0</version>
+ <description>What to do when verification of an artifact checksum fails - warn, fail, etc. Valid values are
+ "fail" or "warn"</description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>ActivationProperty</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ This is the property specification used to activate a profile. If the value field is empty,
+ then the existence of the named property will activate the profile, otherwise it does a case-sensitive
+ match against the property value as well.
+ ]]></description>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <required>true</required>
+ <description>The name of the property to be used to activate a profile</description>
+ </field>
+ <field>
+ <name>value</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The value of the property to be used to activate a profile</description>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>ActivationFile</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ This is the file specification used to activate a profile. The missing value will be a the location
+ of a file that needs to exist, and if it doesn't the profile must run. On the other hand exists will test
+ for the existence of the file and if it is there will run the profile.
+ ]]></description>
+ <fields>
+ <field>
+ <name>missing</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The name of the file that should be missing to activate a profile</description>
+ </field>
+ <field>
+ <name>exists</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The name of the file that should exist to activate a profile</description>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>ActivationOS</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ This is an activator which will detect an operating system's attributes in order to activate
+ its profile.
+ ]]></description>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The name of the OS to be used to activate a profile</description>
+ </field>
+ <field>
+ <name>family</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The general family of the OS to be used to activate a profile (e.g. 'windows')</description>
+ </field>
+ <field>
+ <name>arch</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The architecture of the OS to be used to activate a profile</description>
+ </field>
+ <field>
+ <name>version</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The version of the OS to be used to activate a profile</description>
+ </field>
+ </fields>
+ </class>
+ </classes>
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/project.paramdoc.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/project.paramdoc.xml
new file mode 100644
index 00000000..9acebefc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/project.paramdoc.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<paramdoc xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 ../../../../../../../maven-plugin-parameter-documenter/target/generated-site/xsd/paramdoc-1.0.0.xsd ">
+<expressions>
+ <expression>
+ <syntax>project.distributionManagementArtifactRepository</syntax>
+ <configuration>
+ <![CDATA[
+<distributionManagement>
+ <!-- use the following if you're not using a snapshot version. -->
+ <repository>
+ <id>repo</id>
+ <name>Repository Name</name>
+ <url>scp://host/path/to/repo</url>
+ </repository>
+ <!-- use the following if you ARE using a snapshot version. -->
+ <snapshotRepository>
+ <id>repo</id>
+ <name>Repository Name</name>
+ <url>scp://host/path/to/repo</url>
+ </snapshotRepository>
+</distributionManagement>
+ ]]></configuration>
+ <description> This is the ArtifactRepository used to deploy artifacts built by this
+ Maven.
+ </description>
+ </expression>
+ <expression>
+ <syntax>project.artifact</syntax>
+ <configuration>
+ <![CDATA[
+<groupId>project.group</groupId>
+<artifactId>project-artifact</artifactId>
+<version>0.0.0.0</version>
+<packaging>type</packaging>
+ ]]></configuration>
+ <description> This is the Artifact instance created from the essential project
+ attributes: groupId, artifactId, version, and packaging (with a default packaging of
+ 'jar').
+ </description>
+ </expression>
+ <expression>
+ <syntax>project.parent</syntax>
+ <configuration>
+ <![CDATA[
+<parent>
+ <groupId>project.group</groupId>
+ <artifactId>project-artifact</artifactId>
+ <version>0.0.0.0</version>
+</parent>
+ ]]></configuration>
+ <description> This is the MavenProject instance for the parent of the current POM.
+ </description>
+ </expression>
+ <expression>
+ <syntax>project.file</syntax>
+ <description> This is the File instance that refers to the location of the current POM on
+ disk.
+ </description>
+ </expression>
+ <expression>
+ <syntax>project.artifacts</syntax>
+ <configuration>
+ <![CDATA[
+<dependencies>
+ ...
+</dependencies>
+ ]]></configuration>
+ <description>
+ <![CDATA[
+ This is a set of Artifact instances resolved from the set of dependencies for
+ the current project.
+
+ NOTE: This will likely contain much more than the direct dependencies of the
+ current POM, since Maven uses transitive, or chained, dependency resolution.
+ ]]></description>
+ </expression>
+ <expression>
+ <syntax>project.parentArtifact</syntax>
+ <configuration>
+ <![CDATA[
+ <parent>
+ <groupId>project.group</groupId>
+ <artifactId>project-artifact</artifactId>
+ <version>0.0.0.0</version>
+ </parent>
+ ]]></configuration>
+ <description> This is the Artifact instance for the parent of the current POM.
+ </description>
+ </expression>
+ <expression>
+ <syntax>project.pluginArtifacts</syntax>
+ <configuration>
+ <![CDATA[
+<build>
+ <plugins>
+ ...
+ </plugins>
+</build>
+ ]]></configuration>
+ <description>
+ <![CDATA[
+ This is the list of Artifact instances for plugins used in the current build
+ for this project.
+
+ NOTE: This list may contain plugin Artifacts which are implied by the current POM's
+ packaging and the lifecycle phase being built.
+ ]]></description>
+ </expression>
+ <expression>
+ <syntax>project.remoteArtifactRepositories</syntax>
+ <configuration>
+ <![CDATA[
+<repositories>
+ ...
+</repositories>
+ ]]></configuration>
+ <description>
+ <![CDATA[
+ This is a list of ArtifactRepository instances used to resolve the Artifacts associated
+ with the current POM.
+
+ NOTE: This list will contain entries for repositories specified by ancestor POMs, including
+ the default built-in super-POM, which is the parent of all POMs.
+ ]]></description>
+ </expression>
+ <expression>
+ <syntax>project.pluginArtifactRepositories</syntax>
+ <configuration>
+ <![CDATA[
+<pluginRepositories>
+ ...
+</pluginRepositories>
+ ]]></configuration>
+ <description>
+ <![CDATA[
+ This is a list of ArtifactRepository instances used to resolve the Artifacts associated
+ with plugins used in building the current POM.
+
+ NOTE: This list will contain entries for repositories specified by ancestor POMs, including
+ the default built-in super-POM, which is the parent of all POMs.
+ ]]></description>
+ </expression>
+ <expression>
+ <syntax>project.attachedArtifacts</syntax>
+ <description>
+ <![CDATA[
+ This is a list of attachments to the main artifact produced by building the current POM.
+ Attachments are derived works, based on the main build process, such as an ejb-client jar,
+ project sources jar, etc.
+ ]]></description>
+ </expression>
+</expressions>
+</paramdoc> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/rootless.paramdoc.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/rootless.paramdoc.xml
new file mode 100644
index 00000000..27f03435
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/rootless.paramdoc.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<paramdoc xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 ../../../../../../../maven-plugin-parameter-documenter/target/generated-site/xsd/paramdoc-1.0.0.xsd ">
+ <expressions>
+ <expression>
+ <syntax>localRepository</syntax>
+ <configuration>
+ <![CDATA[
+ Inside ~/.m2/settings.xml:
+
+ <localRepository>/path/to/local/repository</localRepository>
+ ]]></configuration>
+ <description>The ArtifactRepository instance referencing the local artifact
+ repository.</description>
+ <cliOptions>
+ <cliOption>
+ <key>-Dmaven.repo.local=/path/to/local/repo</key>
+ <value>Override the local repository location on a per-build basis.</value>
+ </cliOption>
+ </cliOptions>
+ </expression>
+ <expression>
+ <syntax>reactorProjects</syntax>
+ <description>This is the current list of projects being built by
+ Maven.</description>
+ </expression>
+ </expressions>
+</paramdoc>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/settings.paramdoc.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/settings.paramdoc.xml
new file mode 100644
index 00000000..e058218a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/settings.paramdoc.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<paramdoc xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 ../../../../../../../maven-plugin-parameter-documenter/target/generated-site/xsd/paramdoc-1.0.0.xsd ">
+ <expressions>
+ <expression>
+ <syntax>settings.offline</syntax>
+ <configuration>
+ <![CDATA[
+ <offline>true</offline>
+ ]]></configuration>
+ <description>
+ <![CDATA[
+ Flags the system as offline, to prevent accessing the network to resolve artifacts or execute plugins.
+
+ NOTE: It's also possible to switch to offline mode on a per-build basis, using the '-o' command-line option.
+ ]]></description>
+ </expression>
+ <expression>
+ <syntax>settings.interactiveMode</syntax>
+ <configuration>
+ <![CDATA[
+ <interactiveMode>true</interactiveMode>
+ ]]></configuration>
+ <description>
+ <![CDATA[
+ If false, flags the system to skip prompting the user for any information, or holding up the build
+ waiting for any input.
+
+ NOTE: It's also possible to switch to batch (ie. non-interactive) mode using the '-B' command-line option.
+ ]]></description>
+ </expression>
+ </expressions>
+</paramdoc> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin.xml
new file mode 100644
index 00000000..da5a62c0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin.xml
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<plugin>
+ <description>Maven Internal State-Management Plugins</description>
+ <groupId>org.apache.maven.plugins.internal</groupId>
+ <artifactId>maven-state-management</artifactId>
+ <version>2.1</version>
+ <goalPrefix>statemgmt</goalPrefix>
+ <isolatedRealm>false</isolatedRealm>
+ <inheritedByDefault>true</inheritedByDefault>
+ <mojos>
+ <mojo>
+ <goal>start-fork</goal>
+ <description>Setup the appropriate build state to initiate a forked execution.</description>
+ <requiresDirectInvocation>false</requiresDirectInvocation>
+ <requiresProject>false</requiresProject>
+ <requiresReports>false</requiresReports>
+ <aggregator>false</aggregator>
+ <requiresOnline>false</requiresOnline>
+ <inheritedByDefault>true</inheritedByDefault>
+ <implementation>org.apache.maven.lifecycle.statemgmt.StartForkedExecutionMojo</implementation>
+ <language>java</language>
+ <instantiationStrategy>per-lookup</instantiationStrategy>
+ <executionStrategy>once-per-session</executionStrategy>
+ <parameters>
+ <parameter>
+ <name>project</name>
+ <type>org.apache.maven.project.MavenProject</type>
+ <required>true</required>
+ <editable>false</editable>
+ <description>The current MavenProject instance, which will have a new executionProject set after execution.</description>
+ </parameter>
+ <parameter>
+ <name>session</name>
+ <type>org.apache.maven.execution.MavenSession</type>
+ <required>true</required>
+ <editable>false</editable>
+ <description>The current MavenSession instance, which will handle the fork context.</description>
+ </parameter>
+ <parameter>
+ <name>forkId</name>
+ <type>int</type>
+ <required>true</required>
+ <editable>true</editable>
+ <description>The current fork identifier.</description>
+ </parameter>
+ </parameters>
+ <configuration>
+ <project implementation="org.apache.maven.project.MavenProject" default-value="${project}"/>
+ <session implementation="org.apache.maven.execution.MavenSession" default-value="${session}"/>
+ <forkId implementation="int" default-value="-1">${forkId}</forkId>
+ </configuration>
+ </mojo>
+ <mojo>
+ <goal>end-fork</goal>
+ <description>Restore the non-fork currentProject instance, for use in the forking mojo.</description>
+ <requiresDirectInvocation>false</requiresDirectInvocation>
+ <requiresProject>false</requiresProject>
+ <requiresReports>false</requiresReports>
+ <aggregator>false</aggregator>
+ <requiresOnline>false</requiresOnline>
+ <inheritedByDefault>true</inheritedByDefault>
+ <implementation>org.apache.maven.lifecycle.statemgmt.EndForkedExecutionMojo</implementation>
+ <language>java</language>
+ <instantiationStrategy>per-lookup</instantiationStrategy>
+ <executionStrategy>once-per-session</executionStrategy>
+ <parameters>
+ <parameter>
+ <name>session</name>
+ <type>org.apache.maven.execution.MavenSession</type>
+ <required>true</required>
+ <editable>false</editable>
+ <description>The current MavenSession instance, which will handle the fork context.</description>
+ </parameter>
+ <parameter>
+ <name>forkId</name>
+ <type>int</type>
+ <required>true</required>
+ <editable>true</editable>
+ <description>The current fork identifier.</description>
+ </parameter>
+ </parameters>
+ <configuration>
+ <session implementation="org.apache.maven.execution.MavenSession" default-value="${session}"/>
+ <forkId implementation="int" default-value="-1">${forkId}</forkId>
+ </configuration>
+ </mojo>
+ <mojo>
+ <goal>clear-fork-context</goal>
+ <description>Tear down any build state used during the previous forked execution.</description>
+ <requiresDirectInvocation>false</requiresDirectInvocation>
+ <requiresProject>false</requiresProject>
+ <requiresReports>false</requiresReports>
+ <aggregator>false</aggregator>
+ <requiresOnline>false</requiresOnline>
+ <inheritedByDefault>true</inheritedByDefault>
+ <implementation>org.apache.maven.lifecycle.statemgmt.ClearForkedContextMojo</implementation>
+ <language>java</language>
+ <instantiationStrategy>per-lookup</instantiationStrategy>
+ <executionStrategy>once-per-session</executionStrategy>
+ <parameters>
+ <parameter>
+ <name>project</name>
+ <type>org.apache.maven.project.MavenProject</type>
+ <required>true</required>
+ <editable>false</editable>
+ <description>The current MavenProject instance, which will have the current executionProject cleared after execution.</description>
+ </parameter>
+ <parameter>
+ <name>forkId</name>
+ <type>int</type>
+ <required>true</required>
+ <editable>true</editable>
+ <description>The current fork identifier.</description>
+ </parameter>
+ </parameters>
+ <configuration>
+ <project implementation="org.apache.maven.project.MavenProject" default-value="${project}"/>
+ <forkId implementation="int" default-value="-1">${forkId}</forkId>
+ </configuration>
+ </mojo>
+ <mojo>
+ <goal>resolve-late-bound-plugin</goal>
+ <description>Resolve a late-bound plugin during a build, right before it is to be used.</description>
+ <requiresDirectInvocation>false</requiresDirectInvocation>
+ <requiresProject>false</requiresProject>
+ <requiresReports>false</requiresReports>
+ <aggregator>false</aggregator>
+ <requiresOnline>false</requiresOnline>
+ <inheritedByDefault>true</inheritedByDefault>
+ <implementation>org.apache.maven.lifecycle.statemgmt.ResolveLateBoundPluginMojo</implementation>
+ <language>java</language>
+ <instantiationStrategy>per-lookup</instantiationStrategy>
+ <executionStrategy>once-per-session</executionStrategy>
+ <parameters>
+ <parameter>
+ <name>project</name>
+ <type>org.apache.maven.project.MavenProject</type>
+ <required>true</required>
+ <editable>false</editable>
+ <description>The current MavenProject instance, for building a new MojoBinding instance.</description>
+ </parameter>
+ <parameter>
+ <name>session</name>
+ <type>org.apache.maven.execution.MavenSession</type>
+ <required>true</required>
+ <editable>false</editable>
+ <description>The current MavenSession instance, which will handle the fork context.</description>
+ </parameter>
+ <parameter>
+ <name>groupId</name>
+ <type>java.lang.String</type>
+ <required>true</required>
+ <editable>true</editable>
+ <description>The plugin's groupId.</description>
+ </parameter>
+ <parameter>
+ <name>artifactId</name>
+ <type>java.lang.String</type>
+ <required>true</required>
+ <editable>true</editable>
+ <description>The plugin's artifactId.</description>
+ </parameter>
+ <parameter>
+ <name>version</name>
+ <type>java.lang.String</type>
+ <required>false</required>
+ <editable>true</editable>
+ <description>The plugin's version.</description>
+ </parameter>
+ <parameter>
+ <name>goal</name>
+ <type>java.lang.String</type>
+ <required>true</required>
+ <editable>true</editable>
+ <description>The mojo's goal that we're looking for, as an extra validation step.</description>
+ </parameter>
+ </parameters>
+ <configuration>
+ <project implementation="org.apache.maven.project.MavenProject" default-value="${project}"/>
+ <session implementation="org.apache.maven.execution.MavenSession" default-value="${session}"/>
+ <groupId implementation="java.lang.String">${groupId}</groupId>
+ <artifactId implementation="java.lang.String">${artifactId}</artifactId>
+ <version implementation="java.lang.String">${version}</version>
+ <goal implementation="java.lang.String">${goal}</goal>
+ </configuration>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.plugin.loader.PluginLoader</role>
+ <field-name>pluginLoader</field-name>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.lifecycle.binding.MojoBindingFactory</role>
+ <field-name>bindingFactory</field-name>
+ </requirement>
+ </requirements>
+ </mojo>
+ </mojos>
+</plugin> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/site/site.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/site/site.xml
new file mode 100644
index 00000000..3a16bf98
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/site/site.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
+ <body>
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ <item name="JavaDocs" href="apidocs/index.html"/>
+ <item name="Source Xref" href="xref/index.html"/>
+ <!--item name="FAQ" href="faq.html"/-->
+ </menu>
+
+ <menu ref="parent"/>
+ <menu ref="reports"/>
+ </body>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java
new file mode 100644
index 00000000..010c566b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java
@@ -0,0 +1,371 @@
+package org.apache.maven.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.repository.legacy.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.DefaultMavenExecutionResult;
+import org.apache.maven.execution.MavenSession;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusTestCase;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.collection.DependencyGraphTransformer;
+import org.eclipse.aether.collection.DependencyManager;
+import org.eclipse.aether.collection.DependencySelector;
+import org.eclipse.aether.collection.DependencyTraverser;
+import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.util.graph.manager.ClassicDependencyManager;
+import org.eclipse.aether.util.graph.selector.AndDependencySelector;
+import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
+import org.eclipse.aether.util.graph.selector.OptionalDependencySelector;
+import org.eclipse.aether.util.graph.selector.ScopeDependencySelector;
+import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
+import org.eclipse.aether.util.graph.transformer.ConflictResolver;
+import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver;
+import org.eclipse.aether.util.graph.transformer.JavaScopeSelector;
+import org.eclipse.aether.util.graph.transformer.JavaDependencyContextRefiner;
+import org.eclipse.aether.util.graph.transformer.NearestVersionSelector;
+import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector;
+import org.eclipse.aether.util.graph.traverser.FatArtifactTraverser;
+import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy;
+
+/**
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
+ */
+public abstract class AbstractArtifactComponentTestCase
+ extends PlexusTestCase
+{
+ protected ArtifactFactory artifactFactory;
+
+ protected ArtifactRepositoryFactory artifactRepositoryFactory;
+
+ @Override
+ protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration )
+ {
+ super.customizeContainerConfiguration( containerConfiguration );
+ containerConfiguration.setAutoWiring( true );
+ containerConfiguration.setClassPathScanning( PlexusConstants.SCANNING_INDEX );
+ }
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ artifactFactory = lookup( ArtifactFactory.class);
+ artifactRepositoryFactory = lookup( ArtifactRepositoryFactory.class );
+
+ RepositorySystemSession repoSession = initRepoSession();
+ MavenSession session =
+ new MavenSession( getContainer(), repoSession, new DefaultMavenExecutionRequest(),
+ new DefaultMavenExecutionResult() );
+
+ LegacySupport legacySupport = lookup(LegacySupport.class);
+ legacySupport.setSession( session );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ release( artifactFactory );
+
+ super.tearDown();
+ }
+
+ protected abstract String component();
+
+ /**
+ * Return an existing file, not a directory - causes creation to fail.
+ *
+ * @throws Exception
+ */
+ protected ArtifactRepository badLocalRepository()
+ throws Exception
+ {
+ String path = "target/test-repositories/" + component() + "/bad-local-repository";
+
+ File f = new File( getBasedir(), path );
+
+ f.createNewFile();
+
+ ArtifactRepositoryLayout repoLayout =
+ (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
+
+ return artifactRepositoryFactory.createArtifactRepository( "test", "file://" + f.getPath(), repoLayout, null, null );
+ }
+
+ protected String getRepositoryLayout()
+ {
+ return "default";
+ }
+
+ protected ArtifactRepository localRepository()
+ throws Exception
+ {
+ String path = "target/test-repositories/" + component() + "/local-repository";
+
+ File f = new File( getBasedir(), path );
+
+ ArtifactRepositoryLayout repoLayout =
+ (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
+
+ return artifactRepositoryFactory.createArtifactRepository( "local", "file://" + f.getPath(), repoLayout, null, null );
+ }
+
+ protected ArtifactRepository remoteRepository()
+ throws Exception
+ {
+ String path = "target/test-repositories/" + component() + "/remote-repository";
+
+ File f = new File( getBasedir(), path );
+
+ ArtifactRepositoryLayout repoLayout =
+ (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
+
+ return artifactRepositoryFactory.createArtifactRepository( "test", "file://" + f.getPath(), repoLayout,
+ new ArtifactRepositoryPolicy(), new ArtifactRepositoryPolicy() );
+ }
+
+ protected ArtifactRepository badRemoteRepository()
+ throws Exception
+ {
+ ArtifactRepositoryLayout repoLayout =
+ (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
+
+ return artifactRepositoryFactory.createArtifactRepository( "test", "http://foo.bar/repository", repoLayout, null, null );
+ }
+
+ protected void assertRemoteArtifactPresent( Artifact artifact )
+ throws Exception
+ {
+ ArtifactRepository remoteRepo = remoteRepository();
+
+ String path = remoteRepo.pathOf( artifact );
+
+ File file = new File( remoteRepo.getBasedir(), path );
+
+ if ( !file.exists() )
+ {
+ fail( "Remote artifact " + file + " should be present." );
+ }
+ }
+
+ protected void assertLocalArtifactPresent( Artifact artifact )
+ throws Exception
+ {
+ ArtifactRepository localRepo = localRepository();
+
+ String path = localRepo.pathOf( artifact );
+
+ File file = new File( localRepo.getBasedir(), path );
+
+ if ( !file.exists() )
+ {
+ fail( "Local artifact " + file + " should be present." );
+ }
+ }
+
+ protected void assertRemoteArtifactNotPresent( Artifact artifact )
+ throws Exception
+ {
+ ArtifactRepository remoteRepo = remoteRepository();
+
+ String path = remoteRepo.pathOf( artifact );
+
+ File file = new File( remoteRepo.getBasedir(), path );
+
+ if ( file.exists() )
+ {
+ fail( "Remote artifact " + file + " should not be present." );
+ }
+ }
+
+ protected void assertLocalArtifactNotPresent( Artifact artifact )
+ throws Exception
+ {
+ ArtifactRepository localRepo = localRepository();
+
+ String path = localRepo.pathOf( artifact );
+
+ File file = new File( localRepo.getBasedir(), path );
+
+ if ( file.exists() )
+ {
+ fail( "Local artifact " + file + " should not be present." );
+ }
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ protected List<ArtifactRepository> remoteRepositories()
+ throws Exception
+ {
+ List<ArtifactRepository> remoteRepositories = new ArrayList<ArtifactRepository>();
+
+ remoteRepositories.add( remoteRepository() );
+
+ return remoteRepositories;
+ }
+
+ // ----------------------------------------------------------------------
+ // Test artifact generation for unit tests
+ // ----------------------------------------------------------------------
+
+ protected Artifact createLocalArtifact( String artifactId, String version )
+ throws Exception
+ {
+ Artifact artifact = createArtifact( artifactId, version );
+
+ createArtifact( artifact, localRepository() );
+
+ return artifact;
+ }
+
+ protected Artifact createRemoteArtifact( String artifactId, String version )
+ throws Exception
+ {
+ Artifact artifact = createArtifact( artifactId, version );
+
+ createArtifact( artifact, remoteRepository() );
+
+ return artifact;
+ }
+
+ protected void createLocalArtifact( Artifact artifact )
+ throws Exception
+ {
+ createArtifact( artifact, localRepository() );
+ }
+
+ protected void createRemoteArtifact( Artifact artifact )
+ throws Exception
+ {
+ createArtifact( artifact, remoteRepository() );
+ }
+
+ protected void createArtifact( Artifact artifact, ArtifactRepository repository )
+ throws Exception
+ {
+ String path = repository.pathOf( artifact );
+
+ File artifactFile = new File( repository.getBasedir(), path );
+
+ if ( !artifactFile.getParentFile().exists() )
+ {
+ artifactFile.getParentFile().mkdirs();
+ }
+
+ Writer writer = new OutputStreamWriter( new FileOutputStream( artifactFile ), "ISO-8859-1" );
+
+ writer.write( artifact.getId() );
+
+ writer.close();
+ }
+
+ protected Artifact createArtifact( String artifactId, String version )
+ throws Exception
+ {
+ return createArtifact( artifactId, version, "jar" );
+ }
+
+ protected Artifact createArtifact( String artifactId, String version, String type )
+ throws Exception
+ {
+ return createArtifact( "org.apache.maven", artifactId, version, type );
+ }
+
+ protected Artifact createArtifact( String groupId, String artifactId, String version, String type )
+ throws Exception
+ {
+ Artifact a = artifactFactory.createBuildArtifact( groupId, artifactId, version, type );
+
+ return a;
+ }
+
+ protected void deleteLocalArtifact( Artifact artifact )
+ throws Exception
+ {
+ deleteArtifact( artifact, localRepository() );
+ }
+
+ protected void deleteArtifact( Artifact artifact, ArtifactRepository repository )
+ throws Exception
+ {
+ String path = repository.pathOf( artifact );
+
+ File artifactFile = new File( repository.getBasedir(), path );
+
+ if ( artifactFile.exists() )
+ {
+ if ( !artifactFile.delete() )
+ {
+ throw new IOException( "Failure while attempting to delete artifact " + artifactFile );
+ }
+ }
+ }
+
+ protected RepositorySystemSession initRepoSession()
+ throws Exception
+ {
+ DefaultRepositorySystemSession session = new DefaultRepositorySystemSession();
+ session.setArtifactDescriptorPolicy( new SimpleArtifactDescriptorPolicy( true, true ) );
+ DependencyTraverser depTraverser = new FatArtifactTraverser();
+ session.setDependencyTraverser( depTraverser );
+
+ DependencyManager depManager = new ClassicDependencyManager();
+ session.setDependencyManager( depManager );
+
+ DependencySelector depFilter =
+ new AndDependencySelector( new ScopeDependencySelector( "test", "provided" ),
+ new OptionalDependencySelector(), new ExclusionDependencySelector() );
+ session.setDependencySelector( depFilter );
+
+ DependencyGraphTransformer transformer =
+ new ConflictResolver( new NearestVersionSelector(), new JavaScopeSelector(),
+ new SimpleOptionalitySelector(), new JavaScopeDeriver() );
+ new ChainedDependencyGraphTransformer( transformer, new JavaDependencyContextRefiner() );
+ session.setDependencyGraphTransformer( transformer );
+
+ LocalRepository localRepo = new LocalRepository( localRepository().getBasedir() );
+ session.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( session, localRepo ) );
+
+ return session;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/ArtifactUtilsTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/ArtifactUtilsTest.java
new file mode 100644
index 00000000..7b20eb5d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/ArtifactUtilsTest.java
@@ -0,0 +1,79 @@
+package org.apache.maven.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.artifact.versioning.VersionRange;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@link ArtifactUtils}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ArtifactUtilsTest
+ extends TestCase
+{
+
+ private Artifact newArtifact( String aid )
+ {
+ return new DefaultArtifact( "group", aid, VersionRange.createFromVersion( "1.0" ), "test", "jar", "tests", null );
+ }
+
+ public void testIsSnapshot()
+ {
+ assertEquals( false, ArtifactUtils.isSnapshot( null ) );
+ assertEquals( false, ArtifactUtils.isSnapshot( "" ) );
+ assertEquals( false, ArtifactUtils.isSnapshot( "1.2.3" ) );
+ assertEquals( true, ArtifactUtils.isSnapshot( "1.2.3-SNAPSHOT" ) );
+ assertEquals( true, ArtifactUtils.isSnapshot( "1.2.3-snapshot" ) );
+ assertEquals( true, ArtifactUtils.isSnapshot( "1.2.3-20090413.094722-2" ) );
+ }
+
+ public void testToSnapshotVersion()
+ {
+ assertEquals( "1.2.3", ArtifactUtils.toSnapshotVersion( "1.2.3" ) );
+ assertEquals( "1.2.3-SNAPSHOT", ArtifactUtils.toSnapshotVersion( "1.2.3-SNAPSHOT" ) );
+ assertEquals( "1.2.3-SNAPSHOT", ArtifactUtils.toSnapshotVersion( "1.2.3-20090413.094722-2" ) );
+ }
+
+ /**
+ * Tests that the ordering of the map resembles the ordering of the input collection of artifacts.
+ */
+ public void testArtifactMapByVersionlessIdOrdering()
+ throws Exception
+ {
+ List<Artifact> list = new ArrayList<Artifact>();
+ list.add( newArtifact( "b" ) );
+ list.add( newArtifact( "a" ) );
+ list.add( newArtifact( "c" ) );
+ list.add( newArtifact( "e" ) );
+ list.add( newArtifact( "d" ) );
+
+ Map<String, Artifact> map = ArtifactUtils.artifactMapByVersionlessId( list );
+ assertNotNull( map );
+ assertEquals( list, new ArrayList<Artifact>( map.values() ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/DefaultArtifactTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/DefaultArtifactTest.java
new file mode 100644
index 00000000..fbd01191
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/DefaultArtifactTest.java
@@ -0,0 +1,140 @@
+package org.apache.maven.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+import org.apache.maven.artifact.handler.ArtifactHandlerMock;
+import org.apache.maven.artifact.versioning.VersionRange;
+
+public class DefaultArtifactTest
+ extends TestCase
+{
+
+ private DefaultArtifact artifact;
+
+ private DefaultArtifact snapshotArtifact;
+
+ private String groupId = "groupid", artifactId = "artifactId", version = "1.0", scope = "artifactScope", type = "type",
+ classifier = "classifier";
+
+ private String snapshotSpecVersion = "1.0-SNAPSHOT";
+ private String snapshotResolvedVersion = "1.0-20070606.010101-1";
+
+ private VersionRange versionRange;
+ private VersionRange snapshotVersionRange;
+
+ private ArtifactHandlerMock artifactHandler;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ artifactHandler = new ArtifactHandlerMock();
+ versionRange = VersionRange.createFromVersion( version );
+ artifact = new DefaultArtifact( groupId, artifactId, versionRange, scope, type, classifier, artifactHandler );
+
+ snapshotVersionRange = VersionRange.createFromVersion( snapshotResolvedVersion );
+ snapshotArtifact = new DefaultArtifact( groupId, artifactId, snapshotVersionRange, scope, type, classifier, artifactHandler );
+ }
+
+ public void testGetVersionReturnsResolvedVersionOnSnapshot()
+ {
+ assertEquals( snapshotResolvedVersion, snapshotArtifact.getVersion() );
+
+ // this is FOUL!
+// snapshotArtifact.isSnapshot();
+
+ assertEquals( snapshotSpecVersion, snapshotArtifact.getBaseVersion() );
+ }
+
+ public void testGetDependencyConflictId()
+ {
+ assertEquals( groupId + ":" + artifactId + ":" + type + ":" + classifier, artifact.getDependencyConflictId() );
+ }
+
+ public void testGetDependencyConflictIdNullGroupId()
+ {
+ artifact.setGroupId( null );
+ assertEquals( null + ":" + artifactId + ":" + type + ":" + classifier, artifact.getDependencyConflictId() );
+ }
+
+ public void testGetDependencyConflictIdNullClassifier()
+ {
+ artifact = new DefaultArtifact( groupId, artifactId, versionRange, scope, type, null, artifactHandler );
+ assertEquals( groupId + ":" + artifactId + ":" + type, artifact.getDependencyConflictId() );
+ }
+
+ public void testGetDependencyConflictIdNullScope()
+ {
+ artifact.setScope( null );
+ assertEquals( groupId + ":" + artifactId + ":" + type + ":" + classifier, artifact.getDependencyConflictId() );
+ }
+
+ public void testToString()
+ {
+ assertEquals( groupId + ":" + artifactId + ":" + type + ":" + classifier + ":" + version + ":" + scope,
+ artifact.toString() );
+ }
+
+ public void testToStringNullGroupId()
+ {
+ artifact.setGroupId( null );
+ assertEquals( artifactId + ":" + type + ":" + classifier + ":" + version + ":" + scope, artifact.toString() );
+ }
+
+ public void testToStringNullClassifier()
+ {
+ artifact = new DefaultArtifact( groupId, artifactId, versionRange, scope, type, null, artifactHandler );
+ assertEquals( groupId + ":" + artifactId + ":" + type + ":" + version + ":" + scope, artifact.toString() );
+ }
+
+ public void testToStringNullScope()
+ {
+ artifact.setScope( null );
+ assertEquals( groupId + ":" + artifactId + ":" + type + ":" + classifier + ":" + version, artifact.toString() );
+ }
+
+ public void testComparisonByVersion()
+ {
+ Artifact artifact1 = new DefaultArtifact( groupId, artifactId, VersionRange.createFromVersion( "5.0" ), scope,
+ type, classifier, artifactHandler );
+ Artifact artifact2 = new DefaultArtifact( groupId, artifactId, VersionRange.createFromVersion( "12.0" ), scope,
+ type, classifier, artifactHandler );
+
+ assertTrue( artifact1.compareTo( artifact2 ) < 0 );
+ assertTrue( artifact2.compareTo( artifact1 ) > 0 );
+
+ Artifact artifact = new DefaultArtifact( groupId, artifactId, VersionRange.createFromVersion( "5.0" ), scope,
+ type, classifier, artifactHandler );
+ assertTrue( artifact.compareTo( artifact1 ) == 0 );
+ assertTrue( artifact1.compareTo( artifact ) == 0 );
+ }
+
+ public void testNonResolvedVersionRangeConsistentlyYieldsNullVersions()
+ throws Exception
+ {
+ VersionRange vr = VersionRange.createFromVersionSpec( "[1.0,2.0)" );
+ artifact = new DefaultArtifact( groupId, artifactId, vr, scope, type, null, artifactHandler );
+ assertEquals( null, artifact.getVersion() );
+ assertEquals( null, artifact.getBaseVersion() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/deployer/ArtifactDeployerTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/deployer/ArtifactDeployerTest.java
new file mode 100644
index 00000000..f929f480
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/deployer/ArtifactDeployerTest.java
@@ -0,0 +1,67 @@
+package org.apache.maven.artifact.deployer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.artifact.AbstractArtifactComponentTestCase;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.codehaus.plexus.util.FileUtils;
+
+/**
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ */
+public class ArtifactDeployerTest
+ extends AbstractArtifactComponentTestCase
+{
+ private ArtifactDeployer artifactDeployer;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ artifactDeployer = (ArtifactDeployer) lookup( ArtifactDeployer.ROLE );
+ }
+
+ protected String component()
+ {
+ return "deployer";
+ }
+
+ public void testArtifactInstallation()
+ throws Exception
+ {
+ String artifactBasedir = new File( getBasedir(), "src/test/resources/artifact-install" ).getAbsolutePath();
+
+ Artifact artifact = createArtifact( "artifact", "1.0" );
+
+ File file = new File( artifactBasedir, "artifact-1.0.jar" );
+ assertEquals( "dummy", FileUtils.fileRead( file, "UTF-8" ).trim() );
+
+ artifactDeployer.deploy( file, artifact, remoteRepository(), localRepository() );
+
+ ArtifactRepository remoteRepository = remoteRepository();
+ File deployedFile = new File( remoteRepository.getBasedir(), remoteRepository.pathOf( artifact ) );
+ assertTrue( deployedFile.exists() );
+ assertEquals( "dummy", FileUtils.fileRead( deployedFile, "UTF-8" ).trim() );
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/deployer/SimpleArtifactMetadataSource.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/deployer/SimpleArtifactMetadataSource.java
new file mode 100644
index 00000000..f6bebcba
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/deployer/SimpleArtifactMetadataSource.java
@@ -0,0 +1,66 @@
+package org.apache.maven.artifact.deployer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.repository.legacy.metadata.ArtifactMetadataRetrievalException;
+import org.apache.maven.repository.legacy.metadata.ArtifactMetadataSource;
+import org.apache.maven.repository.legacy.metadata.MetadataResolutionRequest;
+import org.apache.maven.repository.legacy.metadata.ResolutionGroup;
+
+/** @author Jason van Zyl */
+public class SimpleArtifactMetadataSource
+ implements ArtifactMetadataSource
+{
+ public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ throw new UnsupportedOperationException( "Cannot retrieve metadata in this test case" );
+ }
+
+ public List<ArtifactVersion> retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ return Collections.<ArtifactVersion>singletonList( new DefaultArtifactVersion( "10.1.3" ) );
+ }
+
+ public List<ArtifactVersion> retrieveAvailableVersionsFromDeploymentRepository( Artifact artifact,
+ ArtifactRepository localRepository,
+ ArtifactRepository remoteRepository )
+ throws ArtifactMetadataRetrievalException
+ {
+ return Collections.<ArtifactVersion>singletonList( new DefaultArtifactVersion( "10.1.3" ) );
+ }
+
+ public ResolutionGroup retrieve( MetadataResolutionRequest request )
+ throws ArtifactMetadataRetrievalException
+ {
+ return retrieve( request.getArtifact(), request.getLocalRepository(), request.getRemoteRepositories() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/factory/DefaultArtifactFactoryTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/factory/DefaultArtifactFactoryTest.java
new file mode 100644
index 00000000..0d109acb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/factory/DefaultArtifactFactoryTest.java
@@ -0,0 +1,49 @@
+package org.apache.maven.artifact.factory;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.codehaus.plexus.PlexusTestCase;
+
+public class DefaultArtifactFactoryTest
+ extends PlexusTestCase
+{
+
+ public void testPropagationOfSystemScopeRegardlessOfInheritedScope() throws Exception
+ {
+ ArtifactFactory factory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
+
+ Artifact artifact = factory.createDependencyArtifact( "test-grp", "test-artifact", VersionRange.createFromVersion("1.0"), "type", null, "system", "provided" );
+ Artifact artifact2 = factory.createDependencyArtifact( "test-grp", "test-artifact-2", VersionRange.createFromVersion("1.0"), "type", null, "system", "test" );
+ Artifact artifact3 = factory.createDependencyArtifact( "test-grp", "test-artifact-3", VersionRange.createFromVersion("1.0"), "type", null, "system", "runtime" );
+ Artifact artifact4 = factory.createDependencyArtifact( "test-grp", "test-artifact-4", VersionRange.createFromVersion("1.0"), "type", null, "system", "compile" );
+
+ // this one should never happen in practice...
+ Artifact artifact5 = factory.createDependencyArtifact( "test-grp", "test-artifact-5", VersionRange.createFromVersion("1.0"), "type", null, "system", "system" );
+
+ assertEquals( "system", artifact.getScope() );
+ assertEquals( "system", artifact2.getScope() );
+ assertEquals( "system", artifact3.getScope() );
+ assertEquals( "system", artifact4.getScope() );
+ assertEquals( "system", artifact5.getScope() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/handler/ArtifactHandlerMock.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/handler/ArtifactHandlerMock.java
new file mode 100644
index 00000000..a9f335e6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/handler/ArtifactHandlerMock.java
@@ -0,0 +1,100 @@
+package org.apache.maven.artifact.handler;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public class ArtifactHandlerMock
+ implements ArtifactHandler
+{
+
+ private String extension, directory, classifier, packaging, language;
+
+ private boolean includesDependencies, addedToClasspath;
+
+ public void setExtension( String extension )
+ {
+ this.extension = extension;
+ }
+
+ public String getExtension()
+ {
+ return extension;
+ }
+
+ public void setDirectory( String directory )
+ {
+ this.directory = directory;
+ }
+
+ public String getDirectory()
+ {
+ return directory;
+ }
+
+ public void setClassifier( String classifier )
+ {
+ this.classifier = classifier;
+ }
+
+ public String getClassifier()
+ {
+ return classifier;
+ }
+
+ public void setPackaging( String packaging )
+ {
+ this.packaging = packaging;
+ }
+
+ public String getPackaging()
+ {
+ return packaging;
+ }
+
+ public void setIncludesDependencies( boolean includesDependencies )
+ {
+ this.includesDependencies = includesDependencies;
+ }
+
+ public boolean isIncludesDependencies()
+ {
+ return includesDependencies;
+ }
+
+ public void setLanguage( String language )
+ {
+ this.language = language;
+ }
+
+ public String getLanguage()
+ {
+ return language;
+ }
+
+ public void setAddedToClasspath( boolean addedToClasspath )
+ {
+ this.addedToClasspath = addedToClasspath;
+ }
+
+ public boolean isAddedToClasspath()
+ {
+ return addedToClasspath;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/installer/ArtifactInstallerTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/installer/ArtifactInstallerTest.java
new file mode 100644
index 00000000..21bfb2b7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/installer/ArtifactInstallerTest.java
@@ -0,0 +1,61 @@
+package org.apache.maven.artifact.installer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.artifact.AbstractArtifactComponentTestCase;
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ */
+public class ArtifactInstallerTest
+ extends AbstractArtifactComponentTestCase
+{
+ private ArtifactInstaller artifactInstaller;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ artifactInstaller = (ArtifactInstaller) lookup( ArtifactInstaller.ROLE );
+ }
+
+ protected String component()
+ {
+ return "installer";
+ }
+
+ public void testArtifactInstallation()
+ throws Exception
+ {
+ String artifactBasedir = new File( getBasedir(), "src/test/resources/artifact-install" ).getAbsolutePath();
+
+ Artifact artifact = createArtifact( "artifact", "1.0" );
+
+ File source = new File( artifactBasedir, "artifact-1.0.jar" );
+
+ artifactInstaller.install( source, artifact, localRepository() );
+
+ assertLocalArtifactPresent( artifact );
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/metadata/TestMetadataSource.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/metadata/TestMetadataSource.java
new file mode 100644
index 00000000..f8bb1677
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/metadata/TestMetadataSource.java
@@ -0,0 +1,102 @@
+package org.apache.maven.artifact.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.repository.legacy.metadata.MetadataResolutionRequest;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+@Component(role = ArtifactMetadataSource.class, hint="test")
+public class TestMetadataSource
+ implements ArtifactMetadataSource
+{
+ @Requirement
+ private ArtifactFactory factory;
+
+ public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ Set dependencies = new HashSet();
+
+ if ( "g".equals( artifact.getArtifactId() ) )
+ {
+ Artifact a = null;
+ try
+ {
+ a = factory.createBuildArtifact( "org.apache.maven", "h", "1.0", "jar" );
+ dependencies.add( a );
+ }
+ catch ( Exception e )
+ {
+ throw new ArtifactMetadataRetrievalException( "Error retrieving metadata", e, a );
+ }
+ }
+
+ if ( "i".equals( artifact.getArtifactId() ) )
+ {
+ Artifact a = null;
+ try
+ {
+ a = factory.createBuildArtifact( "org.apache.maven", "j", "1.0-SNAPSHOT", "jar" );
+ dependencies.add( a );
+ }
+ catch ( Exception e )
+ {
+ throw new ArtifactMetadataRetrievalException( "Error retrieving metadata", e, a );
+ }
+ }
+
+
+ return new ResolutionGroup( artifact, dependencies, remoteRepositories );
+ }
+
+ public List<ArtifactVersion> retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ throw new UnsupportedOperationException( "Cannot get available versions in this test case" );
+ }
+
+ public List<ArtifactVersion> retrieveAvailableVersionsFromDeploymentRepository( Artifact artifact, ArtifactRepository localRepository, ArtifactRepository remoteRepository )
+ throws ArtifactMetadataRetrievalException
+ {
+ throw new UnsupportedOperationException( "Cannot get available versions in this test case" );
+ }
+
+ public ResolutionGroup retrieve( MetadataResolutionRequest request )
+ throws ArtifactMetadataRetrievalException
+ {
+ return retrieve( request.getArtifact(), request.getLocalRepository(), request.getRemoteRepositories() );
+ }
+
+ public List<ArtifactVersion> retrieveAvailableVersions( MetadataResolutionRequest request )
+ throws ArtifactMetadataRetrievalException
+ {
+ return retrieveAvailableVersions( request.getArtifact(), request.getLocalRepository(), request.getRemoteRepositories() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/repository/MavenArtifactRepositoryTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/repository/MavenArtifactRepositoryTest.java
new file mode 100644
index 00000000..533f3042
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/repository/MavenArtifactRepositoryTest.java
@@ -0,0 +1,59 @@
+package org.apache.maven.artifact.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import junit.framework.TestCase;
+
+public class MavenArtifactRepositoryTest
+ extends TestCase
+{
+ private static class MavenArtifactRepositorySubclass extends MavenArtifactRepository
+ {
+ String id;
+
+ public MavenArtifactRepositorySubclass(String id)
+ {
+ this.id = id;
+ }
+
+ @Override
+ public String getId()
+ {
+ return id;
+ }
+ }
+
+ public void testHashCodeEquals()
+ {
+ MavenArtifactRepositorySubclass r1 = new MavenArtifactRepositorySubclass( "foo" );
+ MavenArtifactRepositorySubclass r2 = new MavenArtifactRepositorySubclass( "foo" );
+ MavenArtifactRepositorySubclass r3 = new MavenArtifactRepositorySubclass( "bar" );
+
+ assertTrue( r1.hashCode() == r2.hashCode() );
+ assertFalse( r1.hashCode() == r3.hashCode() );
+
+ assertTrue( r1.equals( r2 ) );
+ assertTrue( r2.equals( r1 ) );
+
+ assertFalse( r1.equals( r3 ) );
+ assertFalse( r3.equals( r1 ) );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolutionExceptionTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolutionExceptionTest.java
new file mode 100644
index 00000000..aeacfb81
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolutionExceptionTest.java
@@ -0,0 +1,64 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Arrays;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+/**
+ * Test the artifact resolution exception message
+ *
+ * @author Mauro Talevi
+ */
+public class ArtifactResolutionExceptionTest
+ extends TestCase
+{
+ private static final String LS = System.getProperty( "line.separator" );
+
+ public void testMissingArtifactMessageFormat()
+ {
+ String message = "Missing artifact";
+ String indentation = " ";
+ String groupId = "aGroupId";
+ String artifactId = "anArtifactId";
+ String version = "aVersion";
+ String type = "jar";
+ String classifier = "aClassifier";
+ String downloadUrl = "http://somewhere.com/download";
+ List path = Arrays.asList( "dependency1", "dependency2" );
+ String expected =
+ "Missing artifact" + LS + LS + " Try downloading the file manually from: " + LS
+ + " http://somewhere.com/download" + LS + LS + " Then, install it using the command: " + LS
+ + " mvn install:install-file -DgroupId=aGroupId -DartifactId=anArtifactId -Dversion=aVersion "
+ + "-Dclassifier=aClassifier -Dpackaging=jar -Dfile=/path/to/file" + LS + LS
+ + " Alternatively, if you host your own repository you can deploy the file there: " + LS
+ + " mvn deploy:deploy-file -DgroupId=aGroupId -DartifactId=anArtifactId"
+ + " -Dversion=aVersion -Dclassifier=aClassifier -Dpackaging=jar -Dfile=/path/to/file"
+ + " -Durl=[url] -DrepositoryId=[id]" + LS + LS + " Path to dependency: " + LS + " \t1) dependency1"
+ + LS + " \t2) dependency2" + LS + LS;
+ String actual =
+ AbstractArtifactResolutionException.constructMissingArtifactMessage( message, indentation, groupId,
+ artifactId, version, type, classifier,
+ downloadUrl, path );
+ assertEquals( expected, actual );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java
new file mode 100644
index 00000000..117c0e22
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java
@@ -0,0 +1,283 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.AbstractArtifactComponentTestCase;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.metadata.ResolutionGroup;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.repository.legacy.metadata.MetadataResolutionRequest;
+import org.codehaus.plexus.component.repository.ComponentDescriptor;
+
+// It would be cool if there was a hook that i could use to setup a test environment.
+// I want to setup a local/remote repositories for testing but i don't want to have
+// to change them when i change the layout of the repositories. So i want to generate
+// the structure i want to test by using the artifact handler manager which dictates
+// the layout used for a particular artifact type.
+
+/**
+ * @author Jason van Zyl
+ */
+public class ArtifactResolverTest
+ extends AbstractArtifactComponentTestCase
+{
+ private DefaultArtifactResolver artifactResolver;
+
+ private Artifact projectArtifact;
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ artifactResolver = (DefaultArtifactResolver) lookup( ArtifactResolver.class );
+
+ projectArtifact = createLocalArtifact( "project", "3.0" );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ artifactFactory = null;
+ projectArtifact = null;
+ super.tearDown();
+ }
+
+ @Override
+ protected String component()
+ {
+ return "resolver";
+ }
+
+ public void testResolutionOfASingleArtifactWhereTheArtifactIsPresentInTheLocalRepository()
+ throws Exception
+ {
+ Artifact a = createLocalArtifact( "a", "1.0" );
+
+ artifactResolver.resolve( a, remoteRepositories(), localRepository() );
+
+ assertLocalArtifactPresent( a );
+ }
+
+ public void testResolutionOfASingleArtifactWhereTheArtifactIsNotPresentLocallyAndMustBeRetrievedFromTheRemoteRepository()
+ throws Exception
+ {
+ Artifact b = createRemoteArtifact( "b", "1.0-SNAPSHOT" );
+ deleteLocalArtifact( b );
+ artifactResolver.resolve( b, remoteRepositories(), localRepository() );
+ assertLocalArtifactPresent( b );
+ }
+
+ @Override
+ protected Artifact createArtifact( String groupId, String artifactId, String version, String type )
+ throws Exception
+ {
+ // for the anonymous classes
+ return super.createArtifact( groupId, artifactId, version, type );
+ }
+
+ public void testTransitiveResolutionWhereAllArtifactsArePresentInTheLocalRepository()
+ throws Exception
+ {
+ Artifact g = createLocalArtifact( "g", "1.0" );
+
+ Artifact h = createLocalArtifact( "h", "1.0" );
+
+ ArtifactResolutionResult result = artifactResolver.resolveTransitively( Collections.singleton( g ), projectArtifact, remoteRepositories(), localRepository(), null );
+
+ printErrors( result );
+
+ assertEquals( 2, result.getArtifacts().size() );
+
+ assertTrue( result.getArtifacts().contains( g ) );
+
+ assertTrue( result.getArtifacts().contains( h ) );
+
+ assertLocalArtifactPresent( g );
+
+ assertLocalArtifactPresent( h );
+ }
+
+ public void testTransitiveResolutionWhereAllArtifactsAreNotPresentInTheLocalRepositoryAndMustBeRetrievedFromTheRemoteRepository()
+ throws Exception
+ {
+ Artifact i = createRemoteArtifact( "i", "1.0-SNAPSHOT" );
+ deleteLocalArtifact( i );
+
+ Artifact j = createRemoteArtifact( "j", "1.0-SNAPSHOT" );
+ deleteLocalArtifact( j );
+
+ ArtifactResolutionResult result = artifactResolver.resolveTransitively( Collections.singleton( i ), projectArtifact, remoteRepositories(), localRepository(), null );
+
+ printErrors( result );
+
+ assertEquals( 2, result.getArtifacts().size() );
+
+ assertTrue( result.getArtifacts().contains( i ) );
+
+ assertTrue( result.getArtifacts().contains( j ) );
+
+ assertLocalArtifactPresent( i );
+
+ assertLocalArtifactPresent( j );
+ }
+
+ public void testResolutionFailureWhenArtifactNotPresentInRemoteRepository()
+ throws Exception
+ {
+ Artifact k = createArtifact( "k", "1.0" );
+
+ try
+ {
+ artifactResolver.resolve( k, remoteRepositories(), localRepository() );
+ fail( "Resolution succeeded when it should have failed" );
+ }
+ catch ( ArtifactNotFoundException expected )
+ {
+ assertTrue( true );
+ }
+ }
+
+ public void testResolutionOfAnArtifactWhereOneRemoteRepositoryIsBadButOneIsGood()
+ throws Exception
+ {
+ Artifact l = createRemoteArtifact( "l", "1.0-SNAPSHOT" );
+ deleteLocalArtifact( l );
+
+ List<ArtifactRepository> repositories = new ArrayList<ArtifactRepository>();
+ repositories.add( remoteRepository() );
+ repositories.add( badRemoteRepository() );
+
+ artifactResolver.resolve( l, repositories, localRepository() );
+
+ assertLocalArtifactPresent( l );
+ }
+
+ public void testTransitiveResolutionOrder()
+ throws Exception
+ {
+ Artifact m = createLocalArtifact( "m", "1.0" );
+
+ Artifact n = createLocalArtifact( "n", "1.0" );
+
+ ArtifactMetadataSource mds = new ArtifactMetadataSource()
+ {
+ public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ Set dependencies = new HashSet();
+
+ return new ResolutionGroup( artifact, dependencies, remoteRepositories );
+ }
+
+ public List<ArtifactVersion> retrieveAvailableVersions( Artifact artifact,
+ ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ throw new UnsupportedOperationException( "Cannot get available versions in this test case" );
+ }
+
+ public List<ArtifactVersion> retrieveAvailableVersionsFromDeploymentRepository(
+ Artifact artifact,
+ ArtifactRepository localRepository,
+ ArtifactRepository remoteRepository )
+ throws ArtifactMetadataRetrievalException
+ {
+ throw new UnsupportedOperationException( "Cannot get available versions in this test case" );
+ }
+
+ public ResolutionGroup retrieve( MetadataResolutionRequest request )
+ throws ArtifactMetadataRetrievalException
+ {
+ return retrieve( request.getArtifact(), request.getLocalRepository(), request.getRemoteRepositories() );
+ }
+
+ public List<ArtifactVersion> retrieveAvailableVersions( MetadataResolutionRequest request )
+ throws ArtifactMetadataRetrievalException
+ {
+ return retrieveAvailableVersions( request.getArtifact(), request.getLocalRepository(), request.getRemoteRepositories() );
+ }
+ };
+
+ ArtifactResolutionResult result = null;
+
+ Set set = new LinkedHashSet();
+ set.add( n );
+ set.add( m );
+
+ result =
+ artifactResolver.resolveTransitively( set, projectArtifact, remoteRepositories(), localRepository(), mds );
+
+ printErrors( result );
+
+ Iterator i = result.getArtifacts().iterator();
+ assertEquals( "n should be first", n, i.next() );
+ assertEquals( "m should be second", m, i.next() );
+
+ // inverse order
+ set = new LinkedHashSet();
+ set.add( m );
+ set.add( n );
+
+ result =
+ artifactResolver.resolveTransitively( set, projectArtifact, remoteRepositories(), localRepository(), mds );
+
+ printErrors( result );
+
+ i = result.getArtifacts().iterator();
+ assertEquals( "m should be first", m, i.next() );
+ assertEquals( "n should be second", n, i.next() );
+ }
+
+ private void printErrors( ArtifactResolutionResult result )
+ {
+ if ( result.hasMissingArtifacts() )
+ {
+ for ( Artifact artifact : result.getMissingArtifacts() )
+ {
+ System.err.println( "Missing: " + artifact );
+ }
+ }
+
+ if ( result.hasExceptions() )
+ {
+ for ( Exception e : result.getExceptions() )
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactResolverTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactResolverTest.java
new file mode 100644
index 00000000..914d9d1c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactResolverTest.java
@@ -0,0 +1,111 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+
+import org.apache.maven.artifact.AbstractArtifactComponentTestCase;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.resolver.DefaultArtifactResolver.DaemonThreadCreator;
+
+public class DefaultArtifactResolverTest
+ extends AbstractArtifactComponentTestCase
+{
+ private DefaultArtifactResolver artifactResolver;
+
+ private Artifact projectArtifact;
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ artifactResolver = (DefaultArtifactResolver) lookup( ArtifactResolver.class );
+
+ projectArtifact = createLocalArtifact( "project", "3.0" );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ artifactFactory = null;
+ projectArtifact = null;
+ super.tearDown();
+ }
+
+ @Override
+ protected String component()
+ {
+ return "resolver";
+ }
+
+ public void testMNG4738()
+ throws Exception
+ {
+ Artifact g = createLocalArtifact( "g", "1.0" );
+ createLocalArtifact( "h", "1.0" );
+ artifactResolver.resolveTransitively( Collections.singleton( g ), projectArtifact, remoteRepositories(),
+ localRepository(), null );
+
+ // we want to see all top-level thread groups
+ ThreadGroup tg = Thread.currentThread().getThreadGroup();
+ while ( tg.getParent() == null )
+ {
+ tg = tg.getParent();
+ }
+
+ ThreadGroup[] tgList = new ThreadGroup[tg.activeGroupCount()];
+ tg.enumerate( tgList );
+
+ boolean seen = false;
+
+ for ( ThreadGroup aTgList : tgList )
+ {
+ if ( !aTgList.getName().equals( DaemonThreadCreator.THREADGROUP_NAME ) )
+ {
+ continue;
+ }
+
+ seen = true;
+
+ tg = aTgList;
+ Thread[] ts = new Thread[tg.activeCount()];
+ tg.enumerate( ts );
+
+ for ( Thread active : ts )
+ {
+ String name = active.getName();
+ boolean daemon = active.isDaemon();
+ assertTrue( name + " is no daemon Thread.", daemon );
+ }
+
+ }
+
+ assertTrue( "Could not find ThreadGroup: " + DaemonThreadCreator.THREADGROUP_NAME, seen );
+ }
+
+ public void testLookup()
+ throws Exception
+ {
+ ArtifactResolver resolver = lookup( ArtifactResolver.class, "default" );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/TestFileWagon.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/TestFileWagon.java
new file mode 100644
index 00000000..c78c1901
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/TestFileWagon.java
@@ -0,0 +1,94 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.InputStream;
+
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.events.TransferListener;
+import org.apache.maven.wagon.providers.file.FileWagon;
+import org.apache.maven.wagon.resource.Resource;
+
+/**
+ * Wagon used for test cases that annotates some methods. Note that this is not a thread-safe implementation.
+ */
+public class TestFileWagon
+ extends FileWagon
+{
+ private TestTransferListener testTransferListener;
+ private boolean insideGet;
+
+ protected void getTransfer( Resource resource,
+ File destination,
+ InputStream input,
+ boolean closeInput,
+ int maxSize )
+ throws TransferFailedException
+ {
+ addTransfer( "getTransfer " + resource.getName() );
+ super.getTransfer( resource, destination, input, closeInput, maxSize );
+ }
+
+ public void get( String resourceName, File destination )
+ throws TransferFailedException,
+ ResourceDoesNotExistException,
+ AuthorizationException
+ {
+ addTransfer( "get " + resourceName );
+
+ insideGet = true;
+
+ super.get( resourceName, destination );
+
+ insideGet = false;
+ }
+
+ private void addTransfer( String resourceName )
+ {
+ if ( testTransferListener != null )
+ {
+ testTransferListener.addTransfer( resourceName );
+ }
+ }
+
+ public boolean getIfNewer( String resourceName, File destination, long timestamp )
+ throws TransferFailedException,
+ ResourceDoesNotExistException,
+ AuthorizationException
+ {
+ if ( !insideGet )
+ {
+ addTransfer( "getIfNewer " + resourceName );
+ }
+ return super.getIfNewer( resourceName, destination, timestamp );
+ }
+
+ public void addTransferListener( TransferListener listener )
+ {
+ if ( listener instanceof TestTransferListener )
+ {
+ testTransferListener = (TestTransferListener) listener;
+ }
+ super.addTransferListener( listener );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/TestTransferListener.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/TestTransferListener.java
new file mode 100644
index 00000000..afec3ef5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/TestTransferListener.java
@@ -0,0 +1,43 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.wagon.observers.AbstractTransferListener;
+
+public class TestTransferListener
+ extends AbstractTransferListener
+{
+
+ private final List<String> transfers = new ArrayList<String>();
+
+ public List<String> getTransfers()
+ {
+ return transfers;
+ }
+
+ public void addTransfer( String name )
+ {
+ transfers.add( name );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/AndArtifactFilterTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/AndArtifactFilterTest.java
new file mode 100644
index 00000000..bca112b8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/AndArtifactFilterTest.java
@@ -0,0 +1,62 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Arrays;
+
+import org.apache.maven.artifact.Artifact;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@link AndArtifactFilter}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class AndArtifactFilterTest
+ extends TestCase
+{
+
+ private ArtifactFilter newSubFilter()
+ {
+ return new ArtifactFilter()
+ {
+ public boolean include( Artifact artifact )
+ {
+ return false;
+ }
+ };
+ }
+
+ public void testEquals()
+ {
+ AndArtifactFilter filter1 = new AndArtifactFilter();
+
+ AndArtifactFilter filter2 = new AndArtifactFilter( Arrays.asList( newSubFilter() ) );
+
+ assertFalse( filter1.equals( null ) );
+ assertTrue( filter1.equals( filter1 ) );
+ assertEquals( filter1.hashCode(), filter1.hashCode() );
+
+ assertFalse( filter1.equals( filter2 ) );
+ assertFalse( filter2.equals( filter1 ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/FilterHashEqualsTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/FilterHashEqualsTest.java
new file mode 100644
index 00000000..fb465663
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/FilterHashEqualsTest.java
@@ -0,0 +1,50 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Arrays;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Igor Fedorenko
+ */
+public class FilterHashEqualsTest
+ extends TestCase
+{
+
+ public void testIncludesExcludesArtifactFilter()
+ {
+ List<String> patterns = Arrays.asList( "c", "d", "e" );
+
+ IncludesArtifactFilter f1 = new IncludesArtifactFilter( patterns );
+
+ IncludesArtifactFilter f2 = new IncludesArtifactFilter( patterns );
+
+ assertTrue( f1.equals(f2) );
+ assertTrue( f2.equals(f1) );
+ assertTrue( f1.hashCode() == f2.hashCode() );
+
+ IncludesArtifactFilter f3 = new IncludesArtifactFilter( Arrays.asList( "d", "c", "e" ) );
+ assertTrue( f1.equals( f3 ) );
+ assertTrue( f1.hashCode() == f3.hashCode() );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilterTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilterTest.java
new file mode 100644
index 00000000..e161437f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilterTest.java
@@ -0,0 +1,62 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Arrays;
+
+import org.apache.maven.artifact.Artifact;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@link OrArtifactFilter}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class OrArtifactFilterTest
+ extends TestCase
+{
+
+ private ArtifactFilter newSubFilter()
+ {
+ return new ArtifactFilter()
+ {
+ public boolean include( Artifact artifact )
+ {
+ return false;
+ }
+ };
+ }
+
+ public void testEquals()
+ {
+ OrArtifactFilter filter1 = new OrArtifactFilter();
+
+ OrArtifactFilter filter2 = new OrArtifactFilter( Arrays.asList( newSubFilter() ) );
+
+ assertFalse( filter1.equals( null ) );
+ assertTrue( filter1.equals( filter1 ) );
+ assertEquals( filter1.hashCode(), filter1.hashCode() );
+
+ assertFalse( filter1.equals( filter2 ) );
+ assertFalse( filter2.equals( filter1 ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilterTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilterTest.java
new file mode 100644
index 00000000..1a65eca0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilterTest.java
@@ -0,0 +1,96 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@link ScopeArtifactFilter}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ScopeArtifactFilterTest
+ extends TestCase
+{
+
+ private Artifact newArtifact( String scope )
+ {
+ return new DefaultArtifact( "g", "a", "1.0", scope, "jar", "", null );
+ }
+
+ public void testInclude_Compile()
+ {
+ ScopeArtifactFilter filter = new ScopeArtifactFilter( Artifact.SCOPE_COMPILE );
+
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_COMPILE ) ) );
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_SYSTEM ) ) );
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_PROVIDED ) ) );
+ assertFalse( filter.include( newArtifact( Artifact.SCOPE_RUNTIME ) ) );
+ assertFalse( filter.include( newArtifact( Artifact.SCOPE_TEST ) ) );
+ }
+
+ public void testInclude_CompilePlusRuntime()
+ {
+ ScopeArtifactFilter filter = new ScopeArtifactFilter( Artifact.SCOPE_COMPILE_PLUS_RUNTIME );
+
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_COMPILE ) ) );
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_SYSTEM ) ) );
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_PROVIDED ) ) );
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_RUNTIME ) ) );
+ assertFalse( filter.include( newArtifact( Artifact.SCOPE_TEST ) ) );
+ }
+
+ public void testInclude_Runtime()
+ {
+ ScopeArtifactFilter filter = new ScopeArtifactFilter( Artifact.SCOPE_RUNTIME );
+
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_COMPILE ) ) );
+ assertFalse( filter.include( newArtifact( Artifact.SCOPE_SYSTEM ) ) );
+ assertFalse( filter.include( newArtifact( Artifact.SCOPE_PROVIDED ) ) );
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_RUNTIME ) ) );
+ assertFalse( filter.include( newArtifact( Artifact.SCOPE_TEST ) ) );
+ }
+
+ public void testInclude_RuntimePlusSystem()
+ {
+ ScopeArtifactFilter filter = new ScopeArtifactFilter( Artifact.SCOPE_RUNTIME_PLUS_SYSTEM );
+
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_COMPILE ) ) );
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_SYSTEM ) ) );
+ assertFalse( filter.include( newArtifact( Artifact.SCOPE_PROVIDED ) ) );
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_RUNTIME ) ) );
+ assertFalse( filter.include( newArtifact( Artifact.SCOPE_TEST ) ) );
+ }
+
+ public void testInclude_Test()
+ {
+ ScopeArtifactFilter filter = new ScopeArtifactFilter( Artifact.SCOPE_TEST );
+
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_COMPILE ) ) );
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_SYSTEM ) ) );
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_PROVIDED ) ) );
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_RUNTIME ) ) );
+ assertTrue( filter.include( newArtifact( Artifact.SCOPE_TEST ) ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/testutils/TestFileManager.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/testutils/TestFileManager.java
new file mode 100644
index 00000000..a9f1ab7d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/testutils/TestFileManager.java
@@ -0,0 +1,224 @@
+package org.apache.maven.artifact.testutils;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.codehaus.plexus.util.FileUtils;
+
+public class TestFileManager
+{
+
+ public static final String TEMP_DIR_PATH = System.getProperty( "java.io.tmpdir" );
+
+ private List<File> filesToDelete = new ArrayList<File>();
+
+ private final String baseFilename;
+
+ private final String fileSuffix;
+
+ private StackTraceElement callerInfo;
+
+ private Thread cleanupWarning;
+
+ private boolean warnAboutCleanup = false;
+
+ public TestFileManager( String baseFilename, String fileSuffix )
+ {
+ this.baseFilename = baseFilename;
+ this.fileSuffix = fileSuffix;
+
+ initializeCleanupMonitoring();
+ }
+
+ private void initializeCleanupMonitoring()
+ {
+ callerInfo = new NullPointerException().getStackTrace()[2];
+
+ Runnable warning = new Runnable()
+ {
+
+ public void run()
+ {
+ maybeWarnAboutCleanUp();
+ }
+
+ };
+
+ cleanupWarning = new Thread( warning );
+
+ Runtime.getRuntime().addShutdownHook( cleanupWarning );
+ }
+
+ private void maybeWarnAboutCleanUp()
+ {
+ if ( warnAboutCleanup )
+ {
+ System.out.println( "[WARNING] TestFileManager from: " + callerInfo.getClassName() + " not cleaned up!" );
+ }
+ }
+
+ public void markForDeletion( File toDelete )
+ {
+ filesToDelete.add( toDelete );
+ warnAboutCleanup = true;
+ }
+
+ public synchronized File createTempDir()
+ {
+ try
+ {
+ Thread.sleep( 20 );
+ }
+ catch ( InterruptedException e )
+ {
+ // ignore
+ }
+
+ File dir = new File( TEMP_DIR_PATH, baseFilename + System.currentTimeMillis() );
+
+ dir.mkdirs();
+ markForDeletion( dir );
+
+ return dir;
+ }
+
+ public synchronized File createTempFile()
+ throws IOException
+ {
+ File tempFile = File.createTempFile( baseFilename, fileSuffix );
+ tempFile.deleteOnExit();
+ markForDeletion( tempFile );
+
+ return tempFile;
+ }
+
+ public void cleanUp()
+ throws IOException
+ {
+ for ( Iterator it = filesToDelete.iterator(); it.hasNext(); )
+ {
+ File file = (File) it.next();
+
+ if ( file.exists() )
+ {
+ if ( file.isDirectory() )
+ {
+ FileUtils.deleteDirectory( file );
+ }
+ else
+ {
+ file.delete();
+ }
+ }
+
+ it.remove();
+ }
+
+ warnAboutCleanup = false;
+ }
+
+ public void assertFileExistence( File dir, String filename, boolean shouldExist )
+ {
+ File file = new File( dir, filename );
+
+ if ( shouldExist )
+ {
+ Assert.assertTrue( file.exists() );
+ }
+ else
+ {
+ Assert.assertFalse( file.exists() );
+ }
+ }
+
+ public void assertFileContents( File dir, String filename, String contentsTest, String encoding )
+ throws IOException
+ {
+ assertFileExistence( dir, filename, true );
+
+ File file = new File( dir, filename );
+
+ String contents = FileUtils.fileRead( file, encoding );
+
+ Assert.assertEquals( contentsTest, contents );
+ }
+
+ public File createFile( File dir, String filename, String contents, String encoding )
+ throws IOException
+ {
+ File file = new File( dir, filename );
+
+ file.getParentFile().mkdirs();
+
+ FileUtils.fileWrite( file.getPath(), encoding, contents );
+
+ markForDeletion( file );
+
+ return file;
+ }
+
+ public String getFileContents( File file, String encoding )
+ throws IOException
+ {
+ return FileUtils.fileRead( file, encoding );
+ }
+
+ protected void finalize()
+ throws Throwable
+ {
+ maybeWarnAboutCleanUp();
+
+ super.finalize();
+ }
+
+ public File createFile( String filename, String content, String encoding )
+ throws IOException
+ {
+ File dir = createTempDir();
+ return createFile( dir, filename, content, encoding );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/transform/TransformationManagerTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/transform/TransformationManagerTest.java
new file mode 100644
index 00000000..38450929
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/transform/TransformationManagerTest.java
@@ -0,0 +1,46 @@
+package org.apache.maven.artifact.transform;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.repository.legacy.resolver.transform.ArtifactTransformationManager;
+import org.apache.maven.repository.legacy.resolver.transform.LatestArtifactTransformation;
+import org.apache.maven.repository.legacy.resolver.transform.ReleaseArtifactTransformation;
+import org.apache.maven.repository.legacy.resolver.transform.SnapshotTransformation;
+import org.codehaus.plexus.PlexusTestCase;
+
+/** @author Jason van Zyl */
+public class TransformationManagerTest
+ extends PlexusTestCase
+{
+ public void testTransformationManager()
+ throws Exception
+ {
+ ArtifactTransformationManager tm = lookup( ArtifactTransformationManager.class );
+
+ List tms = tm.getArtifactTransformations();
+
+ assertEquals( 3, tms.size() );
+
+ assertTrue( "We expected the release transformation and got " + tms.get(0), tms.get(0) instanceof ReleaseArtifactTransformation );
+
+ assertTrue( "We expected the latest transformation and got " + tms.get(1), tms.get(1) instanceof LatestArtifactTransformation );
+
+ assertTrue( "We expected the snapshot transformation and got " + tms.get(2), tms.get(2) instanceof SnapshotTransformation );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/profiles/manager/DefaultProfileManagerTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/profiles/manager/DefaultProfileManagerTest.java
new file mode 100644
index 00000000..8e3b86a6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/profiles/manager/DefaultProfileManagerTest.java
@@ -0,0 +1,232 @@
+package org.apache.maven.profiles.manager;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.ActivationProperty;
+import org.apache.maven.model.Profile;
+import org.apache.maven.profiles.DefaultProfileManager;
+import org.apache.maven.profiles.ProfileManager;
+import org.codehaus.plexus.PlexusTestCase;
+
+public class DefaultProfileManagerTest
+ extends PlexusTestCase
+{
+
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+ }
+
+ public void testShouldActivateDefaultProfile()
+ throws Exception
+ {
+ Profile notActivated = new Profile();
+ notActivated.setId( "notActivated" );
+
+ Activation nonActivation = new Activation();
+
+ nonActivation.setJdk( "19.2" );
+
+ notActivated.setActivation( nonActivation );
+
+ Profile defaultActivated = new Profile();
+ defaultActivated.setId( "defaultActivated" );
+
+ Activation defaultActivation = new Activation();
+
+ defaultActivation.setActiveByDefault( true );
+
+ defaultActivated.setActivation( defaultActivation );
+
+ Properties props = System.getProperties();
+
+ ProfileManager profileManager = new DefaultProfileManager( getContainer(), props );
+
+ profileManager.addProfile( notActivated );
+ profileManager.addProfile( defaultActivated );
+
+ List active = profileManager.getActiveProfiles();
+
+ assertNotNull( active );
+ assertEquals( 1, active.size() );
+ assertEquals( "defaultActivated", ( (Profile) active.get( 0 ) ).getId() );
+ }
+
+ public void testShouldNotActivateDefaultProfile()
+ throws Exception
+ {
+ Profile syspropActivated = new Profile();
+ syspropActivated.setId( "syspropActivated" );
+
+ Activation syspropActivation = new Activation();
+
+ ActivationProperty syspropProperty = new ActivationProperty();
+ syspropProperty.setName( "java.version" );
+
+ syspropActivation.setProperty( syspropProperty );
+
+ syspropActivated.setActivation( syspropActivation );
+
+ Profile defaultActivated = new Profile();
+ defaultActivated.setId( "defaultActivated" );
+
+ Activation defaultActivation = new Activation();
+
+ defaultActivation.setActiveByDefault( true );
+
+ defaultActivated.setActivation( defaultActivation );
+
+ Properties props = System.getProperties();
+
+ ProfileManager profileManager = new DefaultProfileManager( getContainer(), props );
+
+ profileManager.addProfile( syspropActivated );
+ profileManager.addProfile( defaultActivated );
+
+ List active = profileManager.getActiveProfiles();
+
+ assertNotNull( active );
+ assertEquals( 1, active.size() );
+ assertEquals( "syspropActivated", ( (Profile) active.get( 0 ) ).getId() );
+ }
+
+
+ public void testShouldNotActivateReversalOfPresentSystemProperty()
+ throws Exception
+ {
+ Profile syspropActivated = new Profile();
+ syspropActivated.setId( "syspropActivated" );
+
+ Activation syspropActivation = new Activation();
+
+ ActivationProperty syspropProperty = new ActivationProperty();
+ syspropProperty.setName( "!java.version" );
+
+ syspropActivation.setProperty( syspropProperty );
+
+ syspropActivated.setActivation( syspropActivation );
+
+ Properties props = System.getProperties();
+
+ ProfileManager profileManager = new DefaultProfileManager( getContainer(), props );
+
+ profileManager.addProfile( syspropActivated );
+
+ List active = profileManager.getActiveProfiles();
+
+ assertNotNull( active );
+ assertEquals( 0, active.size() );
+ }
+
+ public void testShouldOverrideAndActivateInactiveProfile()
+ throws Exception
+ {
+ Profile syspropActivated = new Profile();
+ syspropActivated.setId( "syspropActivated" );
+
+ Activation syspropActivation = new Activation();
+
+ ActivationProperty syspropProperty = new ActivationProperty();
+ syspropProperty.setName( "!java.version" );
+
+ syspropActivation.setProperty( syspropProperty );
+
+ syspropActivated.setActivation( syspropActivation );
+
+ Properties props = System.getProperties();
+
+ ProfileManager profileManager = new DefaultProfileManager( getContainer(), props );
+
+ profileManager.addProfile( syspropActivated );
+
+ profileManager.explicitlyActivate( "syspropActivated" );
+
+ List active = profileManager.getActiveProfiles();
+
+ assertNotNull( active );
+ assertEquals( 1, active.size() );
+ assertEquals( "syspropActivated", ( (Profile) active.get( 0 ) ).getId() );
+ }
+
+ public void testShouldOverrideAndDeactivateActiveProfile()
+ throws Exception
+ {
+ Profile syspropActivated = new Profile();
+ syspropActivated.setId( "syspropActivated" );
+
+ Activation syspropActivation = new Activation();
+
+ ActivationProperty syspropProperty = new ActivationProperty();
+ syspropProperty.setName( "java.version" );
+
+ syspropActivation.setProperty( syspropProperty );
+
+ syspropActivated.setActivation( syspropActivation );
+
+ Properties props = System.getProperties();
+
+ ProfileManager profileManager = new DefaultProfileManager( getContainer(), props );
+
+ profileManager.addProfile( syspropActivated );
+
+ profileManager.explicitlyDeactivate( "syspropActivated" );
+
+ List active = profileManager.getActiveProfiles();
+
+ assertNotNull( active );
+ assertEquals( 0, active.size() );
+ }
+/*
+ public void testOsActivationProfile()
+ throws Exception
+ {
+ Profile osActivated = new Profile();
+ osActivated.setId( "os-profile" );
+
+ Activation osActivation = new Activation();
+
+ ActivationOS activationOS = new ActivationOS();
+
+ activationOS.setName( "!dddd" );
+
+ osActivation.setOs( activationOS );
+
+ osActivated.setActivation( osActivation );
+
+ Properties props = System.getProperties();
+ ProfileActivationContext ctx = new ProfileActivationContext( props, false );
+
+ ProfileManager profileManager = new DefaultProfileManager( getContainer(), props );
+
+ profileManager.addProfile( osActivated );
+
+ List active = profileManager.getActiveProfiles( null );
+
+ assertNotNull( active );
+ assertEquals( 1, active.size() );
+ }
+ */
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
new file mode 100644
index 00000000..7e3f7e6b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
@@ -0,0 +1,185 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Arrays;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.model.building.ModelBuildingException;
+import org.apache.maven.model.building.ModelProblem;
+import org.apache.maven.repository.RepositorySystem;
+import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusTestCase;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+
+/**
+ * @author Jason van Zyl
+ */
+public abstract class AbstractMavenProjectTestCase
+ extends PlexusTestCase
+{
+ protected ProjectBuilder projectBuilder;
+
+ protected RepositorySystem repositorySystem;
+
+ @Override
+ protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration )
+ {
+ super.customizeContainerConfiguration( containerConfiguration );
+ containerConfiguration.setAutoWiring( true );
+ containerConfiguration.setClassPathScanning( PlexusConstants.SCANNING_INDEX );
+ }
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ if ( getContainer().hasComponent( ProjectBuilder.class, "test" ) )
+ {
+ projectBuilder = lookup( ProjectBuilder.class, "test" );
+ }
+ else
+ {
+ // default over to the main project builder...
+ projectBuilder = lookup( ProjectBuilder.class );
+ }
+
+ repositorySystem = lookup( RepositorySystem.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ projectBuilder = null;
+
+ super.tearDown();
+ }
+
+ protected ProjectBuilder getProjectBuilder()
+ {
+ return projectBuilder;
+ }
+
+ @Override
+ protected String getCustomConfigurationName()
+ {
+ String name = AbstractMavenProjectTestCase.class.getName().replace( '.', '/' ) + ".xml";
+ System.out.println( name );
+ return name;
+ }
+
+ // ----------------------------------------------------------------------
+ // Local repository
+ // ----------------------------------------------------------------------
+
+ protected File getLocalRepositoryPath()
+ throws FileNotFoundException, URISyntaxException
+ {
+ File markerFile = getFileForClasspathResource( "local-repo/marker.txt" );
+
+ return markerFile.getAbsoluteFile().getParentFile();
+ }
+
+ protected static File getFileForClasspathResource( String resource )
+ throws FileNotFoundException
+ {
+ ClassLoader cloader = Thread.currentThread().getContextClassLoader();
+
+ URL resourceUrl = cloader.getResource( resource );
+
+ if ( resourceUrl == null )
+ {
+ throw new FileNotFoundException( "Unable to find: " + resource );
+ }
+
+ return new File( URI.create( resourceUrl.toString().replaceAll( " ", "%20" ) ) );
+ }
+
+ protected ArtifactRepository getLocalRepository()
+ throws Exception
+ {
+ ArtifactRepositoryLayout repoLayout = lookup( ArtifactRepositoryLayout.class, "legacy" );
+
+ ArtifactRepository r = repositorySystem.createArtifactRepository( "local", "file://" + getLocalRepositoryPath().getAbsolutePath(), repoLayout, null, null );
+
+ return r;
+ }
+
+ // ----------------------------------------------------------------------
+ // Project building
+ // ----------------------------------------------------------------------
+
+ protected MavenProject getProjectWithDependencies( File pom )
+ throws Exception
+ {
+ ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest();
+ configuration.setLocalRepository( getLocalRepository() );
+ configuration.setRemoteRepositories( Arrays.asList( new ArtifactRepository[] {} ) );
+ configuration.setProcessPlugins( false );
+ configuration.setResolveDependencies( true );
+ initRepoSession( configuration );
+
+ try
+ {
+ return projectBuilder.build( pom, configuration ).getProject();
+ }
+ catch ( Exception e )
+ {
+ Throwable cause = e.getCause();
+ if ( cause instanceof ModelBuildingException )
+ {
+ String message = "In: " + pom + "\n\n";
+ for ( ModelProblem problem : ( (ModelBuildingException) cause ).getProblems() )
+ {
+ message += problem + "\n";
+ }
+ System.out.println( message );
+ fail( message );
+ }
+
+ throw e;
+ }
+ }
+
+ protected MavenProject getProject( File pom )
+ throws Exception
+ {
+ ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest();
+ configuration.setLocalRepository( getLocalRepository() );
+ initRepoSession( configuration );
+
+ return projectBuilder.build( pom, configuration ).getProject();
+ }
+
+ protected void initRepoSession( ProjectBuildingRequest request )
+ {
+ File localRepo = new File( request.getLocalRepository().getBasedir() );
+ DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
+ session.setLocalRepositoryManager( new LegacyLocalRepositoryManager( localRepo ) );
+ request.setRepositorySession( session );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/ClasspathArtifactResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/ClasspathArtifactResolver.java
new file mode 100644
index 00000000..36eaee8f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/ClasspathArtifactResolver.java
@@ -0,0 +1,89 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import org.codehaus.plexus.component.annotations.Component;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.impl.ArtifactResolver;
+import org.eclipse.aether.resolution.ArtifactRequest;
+import org.eclipse.aether.resolution.ArtifactResolutionException;
+import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.transfer.ArtifactNotFoundException;
+
+/**
+ * @author Benjamin Bentmann
+ */
+@Component( role = ArtifactResolver.class, hint = "classpath" )
+public class ClasspathArtifactResolver
+ implements ArtifactResolver
+{
+
+ public List<ArtifactResult> resolveArtifacts( RepositorySystemSession session,
+ Collection<? extends ArtifactRequest> requests )
+ throws ArtifactResolutionException
+ {
+ List<ArtifactResult> results = new ArrayList<ArtifactResult>();
+
+ for ( ArtifactRequest request : requests )
+ {
+ ArtifactResult result = new ArtifactResult( request );
+ results.add( result );
+
+ Artifact artifact = request.getArtifact();
+ if ( "maven-test".equals( artifact.getGroupId() ) )
+ {
+ String scope = artifact.getArtifactId().substring( "scope-".length() );
+
+ try
+ {
+ artifact =
+ artifact.setFile( ProjectClasspathTest.getFileForClasspathResource( ProjectClasspathTest.dir
+ + "transitive-" + scope + "-dep.xml" ) );
+ result.setArtifact( artifact );
+ }
+ catch ( FileNotFoundException e )
+ {
+ throw new IllegalStateException( "Missing test POM for " + artifact );
+ }
+ }
+ else
+ {
+ result.addException( new ArtifactNotFoundException( artifact, null ) );
+ throw new ArtifactResolutionException( results );
+ }
+ }
+
+ return results;
+ }
+
+ public ArtifactResult resolveArtifact( RepositorySystemSession session, ArtifactRequest request )
+ throws ArtifactResolutionException
+ {
+ return resolveArtifacts( session, Collections.singleton( request ) ).get( 0 );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java
new file mode 100644
index 00000000..024917de
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java
@@ -0,0 +1,110 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.DefaultLifecycles;
+import org.apache.maven.lifecycle.LifecycleExecutor;
+import org.apache.maven.lifecycle.MavenExecutionPlan;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.plugin.MojoExecution;
+
+/**
+ * A stub implementation that assumes an empty lifecycle to bypass interaction with the plugin manager and to avoid
+ * plugin artifact resolution from repositories.
+ *
+ * @author Benjamin Bentmann
+ */
+public class EmptyLifecycleExecutor
+ implements LifecycleExecutor
+{
+
+ public MavenExecutionPlan calculateExecutionPlan( MavenSession session, String... tasks )
+ {
+ return new MavenExecutionPlan( null, new DefaultLifecycles() );
+ }
+
+ public MavenExecutionPlan calculateExecutionPlan( MavenSession session, boolean setup, String... tasks )
+ {
+ return new MavenExecutionPlan( null, new DefaultLifecycles() );
+ }
+
+ public void execute( MavenSession session )
+ {
+ }
+
+ public Set<Plugin> getPluginsBoundByDefaultToAllLifecycles( String packaging )
+ {
+ Set<Plugin> plugins;
+
+ // NOTE: The upper-case packaging name is intentional, that's a special hinting mode used for certain tests
+ if ( "JAR".equals( packaging ) )
+ {
+ plugins = new LinkedHashSet<Plugin>();
+
+ plugins.add( newPlugin( "maven-compiler-plugin", "compile", "testCompile" ) );
+ plugins.add( newPlugin( "maven-resources-plugin", "resources", "testResources" ) );
+ plugins.add( newPlugin( "maven-surefire-plugin", "test" ) );
+ plugins.add( newPlugin( "maven-jar-plugin", "jar" ) );
+ plugins.add( newPlugin( "maven-install-plugin", "install" ) );
+ plugins.add( newPlugin( "maven-deploy-plugin", "deploy" ) );
+ }
+ else
+ {
+ plugins = Collections.emptySet();
+ }
+
+ return plugins;
+ }
+
+ private Plugin newPlugin( String artifactId, String... goals )
+ {
+ Plugin plugin = new Plugin();
+
+ plugin.setGroupId( "org.apache.maven.plugins" );
+ plugin.setArtifactId( artifactId );
+
+ for ( String goal : goals )
+ {
+ PluginExecution pluginExecution = new PluginExecution();
+ pluginExecution.setId( "default-" + goal );
+ pluginExecution.addGoal( goal );
+ plugin.addExecution( pluginExecution );
+ }
+
+ return plugin;
+ }
+
+ public void calculateForkedExecutions( MojoExecution mojoExecution, MavenSession session )
+ {
+ }
+
+ public List<MavenProject> executeForkedExecutions( MojoExecution mojoExecution, MavenSession session )
+ {
+ return Collections.emptyList();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecyclePluginAnalyzer.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecyclePluginAnalyzer.java
new file mode 100644
index 00000000..5a78a7e5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecyclePluginAnalyzer.java
@@ -0,0 +1,78 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import org.apache.maven.lifecycle.LifeCyclePluginAnalyzer;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class EmptyLifecyclePluginAnalyzer
+ implements LifeCyclePluginAnalyzer
+{
+ public Set<Plugin> getPluginsBoundByDefaultToAllLifecycles( String packaging )
+ {
+ Set<Plugin> plugins;
+
+ // NOTE: The upper-case packaging name is intentional, that's a special hinting mode used for certain tests
+ if ( "JAR".equals( packaging ) )
+ {
+ plugins = new LinkedHashSet<Plugin>();
+
+ plugins.add( newPlugin( "maven-compiler-plugin", "compile", "testCompile" ) );
+ plugins.add( newPlugin( "maven-resources-plugin", "resources", "testResources" ) );
+ plugins.add( newPlugin( "maven-surefire-plugin", "test" ) );
+ plugins.add( newPlugin( "maven-jar-plugin", "jar" ) );
+ plugins.add( newPlugin( "maven-install-plugin", "install" ) );
+ plugins.add( newPlugin( "maven-deploy-plugin", "deploy" ) );
+ }
+ else
+ {
+ plugins = Collections.emptySet();
+ }
+
+ return plugins;
+ }
+
+ private Plugin newPlugin( String artifactId, String... goals )
+ {
+ Plugin plugin = new Plugin();
+
+ plugin.setGroupId( "org.apache.maven.plugins" );
+ plugin.setArtifactId( artifactId );
+
+ for ( String goal : goals )
+ {
+ PluginExecution pluginExecution = new PluginExecution();
+ pluginExecution.setId( "default-" + goal );
+ pluginExecution.addGoal( goal );
+ plugin.addExecution( pluginExecution );
+ }
+
+ return plugin;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java
new file mode 100644
index 00000000..52fdd804
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java
@@ -0,0 +1,192 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.metadata.Metadata;
+import org.eclipse.aether.repository.LocalArtifactRegistration;
+import org.eclipse.aether.repository.LocalArtifactRequest;
+import org.eclipse.aether.repository.LocalArtifactResult;
+import org.eclipse.aether.repository.LocalMetadataRegistration;
+import org.eclipse.aether.repository.LocalMetadataRequest;
+import org.eclipse.aether.repository.LocalMetadataResult;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.LocalRepositoryManager;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class LegacyLocalRepositoryManager
+ implements LocalRepositoryManager
+{
+
+ private final LocalRepository repository;
+
+ public LegacyLocalRepositoryManager( File basedir )
+ {
+ this.repository = new LocalRepository( basedir.getAbsoluteFile(), "legacy" );
+ }
+
+ public LocalRepository getRepository()
+ {
+ return repository;
+ }
+
+ public String getPathForLocalArtifact( Artifact artifact )
+ {
+ StringBuilder path = new StringBuilder( 128 );
+
+ path.append( artifact.getGroupId() ).append( '/' );
+
+ path.append( artifact.getExtension() ).append( 's' ).append( '/' );
+
+ path.append( artifact.getArtifactId() ).append( '-' ).append( artifact.getVersion() );
+
+ if ( artifact.getClassifier().length() > 0 )
+ {
+ path.append( '-' ).append( artifact.getClassifier() );
+ }
+
+ path.append( '.' ).append( artifact.getExtension() );
+
+ return path.toString();
+ }
+
+ public String getPathForRemoteArtifact( Artifact artifact, RemoteRepository repository, String context )
+ {
+ return getPathForLocalArtifact( artifact );
+ }
+
+ public String getPathForLocalMetadata( Metadata metadata )
+ {
+ return getPath( metadata, "local" );
+ }
+
+ public String getPathForRemoteMetadata( Metadata metadata, RemoteRepository repository, String context )
+ {
+ return getPath( metadata, getRepositoryKey( repository, context ) );
+ }
+
+ String getRepositoryKey( RemoteRepository repository, String context )
+ {
+ return repository.getId();
+ }
+
+ private String getPath( Metadata metadata, String repositoryKey )
+ {
+ StringBuilder path = new StringBuilder( 128 );
+
+ if ( metadata.getGroupId().length() > 0 )
+ {
+ path.append( metadata.getGroupId().replace( '.', '/' ) ).append( '/' );
+
+ if ( metadata.getArtifactId().length() > 0 )
+ {
+ path.append( metadata.getArtifactId() ).append( '/' );
+
+ if ( metadata.getVersion().length() > 0 )
+ {
+ path.append( metadata.getVersion() ).append( '/' );
+ }
+ }
+ }
+
+ path.append( insertRepositoryKey( metadata.getType(), repositoryKey ) );
+
+ return path.toString();
+ }
+
+ private String insertRepositoryKey( String filename, String repositoryKey )
+ {
+ String result;
+ int idx = filename.indexOf( '.' );
+ if ( idx < 0 )
+ {
+ result = filename + '-' + repositoryKey;
+ }
+ else
+ {
+ result = filename.substring( 0, idx ) + '-' + repositoryKey + filename.substring( idx );
+ }
+ return result;
+ }
+
+ public LocalArtifactResult find( RepositorySystemSession session, LocalArtifactRequest request )
+ {
+ String path = getPathForLocalArtifact( request.getArtifact() );
+ File file = new File( getRepository().getBasedir(), path );
+
+ LocalArtifactResult result = new LocalArtifactResult( request );
+ if ( file.isFile() )
+ {
+ result.setFile( file );
+ result.setAvailable( true );
+ }
+
+ return result;
+ }
+
+ public void add( RepositorySystemSession session, LocalArtifactRegistration request )
+ {
+ // noop
+ }
+
+ public LocalMetadataResult find( RepositorySystemSession session, LocalMetadataRequest request )
+ {
+ LocalMetadataResult result = new LocalMetadataResult( request );
+
+ String path;
+
+ Metadata metadata = request.getMetadata();
+ String context = request.getContext();
+ RemoteRepository remote = request.getRepository();
+
+ if ( remote != null )
+ {
+ path = getPathForRemoteMetadata( metadata, remote, context );
+ }
+ else
+ {
+ path = getPathForLocalMetadata( metadata );
+ }
+
+ File file = new File( getRepository().getBasedir(), path );
+ if ( file.isFile() )
+ {
+ result.setFile( file );
+ }
+
+ return result;
+ }
+
+ public void add( RepositorySystemSession session, LocalMetadataRegistration request )
+ {
+ // noop
+ }
+
+ public String toString()
+ {
+ return String.valueOf( getRepository() );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/ModelUtilsTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/ModelUtilsTest.java
new file mode 100644
index 00000000..6c3df9a0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/ModelUtilsTest.java
@@ -0,0 +1,616 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginContainer;
+import org.apache.maven.model.PluginExecution;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+public class ModelUtilsTest
+ extends TestCase
+{
+
+ public void testShouldUseMainPluginDependencyVersionOverManagedDepVersion()
+ {
+ Plugin mgtPlugin = createPlugin( "group", "artifact", "1", Collections.EMPTY_MAP );
+ Dependency mgtDep = createDependency( "g", "a", "2" );
+ mgtPlugin.addDependency( mgtDep );
+
+ Plugin plugin = createPlugin( "group", "artifact", "1", Collections.EMPTY_MAP );
+ Dependency dep = createDependency( "g", "a", "1" );
+ plugin.addDependency( dep );
+
+ ModelUtils.mergePluginDefinitions( plugin, mgtPlugin, false );
+
+ assertEquals( dep.getVersion(), plugin.getDependencies().get( 0 ).getVersion() );
+ }
+
+ private Dependency createDependency( String gid,
+ String aid,
+ String ver )
+ {
+ Dependency dep = new Dependency();
+ dep.setGroupId( gid );
+ dep.setArtifactId( aid );
+ dep.setVersion( ver );
+
+ return dep;
+ }
+
+ public void testShouldNotInheritPluginWithInheritanceSetToFalse()
+ {
+ PluginContainer parent = new PluginContainer();
+
+ Plugin parentPlugin = createPlugin( "group", "artifact", "1.0", Collections.EMPTY_MAP );
+ parentPlugin.setInherited( "false" );
+
+ parent.addPlugin( parentPlugin );
+
+ PluginContainer child = new PluginContainer();
+
+ child.addPlugin( createPlugin( "group3", "artifact3", "1.0", Collections.EMPTY_MAP ) );
+
+ ModelUtils.mergePluginLists( child, parent, true );
+
+ List results = child.getPlugins();
+
+ assertEquals( 1, results.size() );
+
+ Plugin result1 = (Plugin) results.get( 0 );
+ assertEquals( "group3", result1.getGroupId() );
+ assertEquals( "artifact3", result1.getArtifactId() );
+ }
+
+ /**
+ * Test that this is the resulting ordering of plugins after merging:
+ *
+ * Given:
+ *
+ * parent: X -> A -> B -> D -> E
+ * child: Y -> A -> C -> D -> F
+ *
+ * Result:
+ *
+ * X -> Y -> A -> B -> C -> D -> E -> F
+ */
+ public void testShouldPreserveChildOrderingOfPluginsAfterParentMerge()
+ {
+ PluginContainer parent = new PluginContainer();
+
+ parent.addPlugin( createPlugin( "group", "artifact", "1.0", Collections.EMPTY_MAP ) );
+ parent.addPlugin( createPlugin( "group2", "artifact2", "1.0", Collections.singletonMap( "key", "value" ) ) );
+
+ PluginContainer child = new PluginContainer();
+
+ child.addPlugin( createPlugin( "group3", "artifact3", "1.0", Collections.EMPTY_MAP ) );
+ child.addPlugin( createPlugin( "group2", "artifact2", "1.0", Collections.singletonMap( "key2", "value2" ) ) );
+
+ ModelUtils.mergePluginLists( child, parent, true );
+
+ List results = child.getPlugins();
+
+ assertEquals( 3, results.size() );
+
+ Plugin result1 = (Plugin) results.get( 0 );
+
+ assertEquals( "group", result1.getGroupId() );
+ assertEquals( "artifact", result1.getArtifactId() );
+
+ Plugin result2 = (Plugin) results.get( 1 );
+
+ assertEquals( "group3", result2.getGroupId() );
+ assertEquals( "artifact3", result2.getArtifactId() );
+
+ Plugin result3 = (Plugin) results.get( 2 );
+
+ assertEquals( "group2", result3.getGroupId() );
+ assertEquals( "artifact2", result3.getArtifactId() );
+
+ Xpp3Dom result3Config = (Xpp3Dom) result3.getConfiguration();
+
+ assertNotNull( result3Config );
+
+ assertEquals( "value", result3Config.getChild( "key" ).getValue() );
+ assertEquals( "value2", result3Config.getChild( "key2" ).getValue() );
+ }
+
+ private Plugin createPlugin( String groupId, String artifactId, String version, Map configuration )
+ {
+ Plugin plugin = new Plugin();
+ plugin.setGroupId( groupId );
+ plugin.setArtifactId( artifactId );
+ plugin.setVersion( version );
+
+ Xpp3Dom config = new Xpp3Dom( "configuration" );
+
+ if( configuration != null )
+ {
+ for ( Object o : configuration.entrySet() )
+ {
+ Map.Entry entry = (Map.Entry) o;
+
+ Xpp3Dom param = new Xpp3Dom( String.valueOf( entry.getKey() ) );
+ param.setValue( String.valueOf( entry.getValue() ) );
+
+ config.addChild( param );
+ }
+ }
+
+ plugin.setConfiguration( config );
+
+ return plugin;
+ }
+
+ public void testShouldInheritOnePluginWithExecution()
+ {
+ Plugin parent = new Plugin();
+ parent.setArtifactId( "testArtifact" );
+ parent.setGroupId( "testGroup" );
+ parent.setVersion( "1.0" );
+
+ PluginExecution parentExecution = new PluginExecution();
+ parentExecution.setId( "testExecution" );
+
+ parent.addExecution( parentExecution );
+
+ Plugin child = new Plugin();
+ child.setArtifactId( "testArtifact" );
+ child.setGroupId( "testGroup" );
+ child.setVersion( "1.0" );
+
+ ModelUtils.mergePluginDefinitions( child, parent, false );
+
+ assertEquals( 1, child.getExecutions().size() );
+ }
+
+ public void testShouldMergeInheritedPluginHavingExecutionWithLocalPlugin()
+ {
+ Plugin parent = new Plugin();
+ parent.setArtifactId( "testArtifact" );
+ parent.setGroupId( "testGroup" );
+ parent.setVersion( "1.0" );
+
+ PluginExecution parentExecution = new PluginExecution();
+ parentExecution.setId( "testExecution" );
+
+ parent.addExecution( parentExecution );
+
+ Plugin child = new Plugin();
+ child.setArtifactId( "testArtifact" );
+ child.setGroupId( "testGroup" );
+ child.setVersion( "1.0" );
+
+ PluginExecution childExecution = new PluginExecution();
+ childExecution.setId( "testExecution2" );
+
+ child.addExecution( childExecution );
+
+ ModelUtils.mergePluginDefinitions( child, parent, false );
+
+ assertEquals( 2, child.getExecutions().size() );
+ }
+
+ public void testShouldMergeOnePluginWithInheritExecutionWithoutDuplicatingPluginInList()
+ {
+ Plugin parent = new Plugin();
+ parent.setArtifactId( "testArtifact" );
+ parent.setGroupId( "testGroup" );
+ parent.setVersion( "1.0" );
+
+ PluginExecution parentExecution = new PluginExecution();
+ parentExecution.setId( "testExecution" );
+
+ parent.addExecution( parentExecution );
+
+ Build parentContainer = new Build();
+ parentContainer.addPlugin( parent );
+
+ Plugin child = new Plugin();
+ child.setArtifactId( "testArtifact" );
+ child.setGroupId( "testGroup" );
+ child.setVersion( "1.0" );
+
+ Build childContainer = new Build();
+ childContainer.addPlugin( child );
+
+ ModelUtils.mergePluginLists( childContainer, parentContainer, true );
+
+ List plugins = childContainer.getPlugins();
+
+ assertEquals( 1, plugins.size() );
+
+ Plugin plugin = (Plugin) plugins.get( 0 );
+
+ assertEquals( 1, plugin.getExecutions().size() );
+ }
+
+ public void testShouldMergePluginWithDifferentExecutionFromParentWithoutDuplicatingPluginInList()
+ {
+ Plugin parent = new Plugin();
+ parent.setArtifactId( "testArtifact" );
+ parent.setGroupId( "testGroup" );
+ parent.setVersion( "1.0" );
+
+ PluginExecution parentExecution = new PluginExecution();
+ parentExecution.setId( "testExecution" );
+
+ parent.addExecution( parentExecution );
+
+ Build parentContainer = new Build();
+ parentContainer.addPlugin( parent );
+
+ Plugin child = new Plugin();
+ child.setArtifactId( "testArtifact" );
+ child.setGroupId( "testGroup" );
+ child.setVersion( "1.0" );
+
+ PluginExecution childExecution = new PluginExecution();
+ childExecution.setId( "testExecution2" );
+
+ child.addExecution( childExecution );
+
+
+ Build childContainer = new Build();
+ childContainer.addPlugin( child );
+
+ ModelUtils.mergePluginLists( childContainer, parentContainer, true );
+
+ List plugins = childContainer.getPlugins();
+
+ assertEquals( 1, plugins.size() );
+
+ Plugin plugin = (Plugin) plugins.get( 0 );
+
+ assertEquals( 2, plugin.getExecutions().size() );
+ }
+
+ public void testShouldNOTMergeInheritedPluginHavingInheritEqualFalse()
+ {
+ Plugin parent = new Plugin();
+ parent.setArtifactId( "testArtifact" );
+ parent.setGroupId( "testGroup" );
+ parent.setVersion( "1.0" );
+ parent.setInherited( "false" );
+
+ PluginExecution parentExecution = new PluginExecution();
+ parentExecution.setId( "testExecution" );
+
+ parent.addExecution( parentExecution );
+
+ Plugin child = new Plugin();
+ child.setArtifactId( "testArtifact" );
+ child.setGroupId( "testGroup" );
+ child.setVersion( "1.0" );
+
+ ModelUtils.mergePluginDefinitions( child, parent, true );
+
+ assertEquals( 0, child.getExecutions().size() );
+ }
+
+ /**
+ * Verifies MNG-1499: The order of the merged list should be the plugins specified by the parent followed by the
+ * child list.
+ */
+ public void testShouldKeepOriginalPluginOrdering()
+ {
+ Plugin parentPlugin1 = new Plugin();
+ parentPlugin1.setArtifactId( "testArtifact" );
+ parentPlugin1.setGroupId( "zzz" ); // This will put this plugin last in the sorted map
+ parentPlugin1.setVersion( "1.0" );
+
+ PluginExecution parentExecution1 = new PluginExecution();
+ parentExecution1.setId( "testExecution" );
+
+ parentPlugin1.addExecution( parentExecution1 );
+
+ Plugin parentPlugin2 = new Plugin();
+ parentPlugin2.setArtifactId( "testArtifact" );
+ parentPlugin2.setGroupId( "yyy" );
+ parentPlugin2.setVersion( "1.0" );
+
+ PluginExecution parentExecution2 = new PluginExecution();
+ parentExecution2.setId( "testExecution" );
+
+ parentPlugin2.addExecution( parentExecution2 );
+
+ PluginContainer parentContainer = new PluginContainer();
+ parentContainer.addPlugin(parentPlugin1);
+ parentContainer.addPlugin(parentPlugin2);
+
+
+ Plugin childPlugin1 = new Plugin();
+ childPlugin1.setArtifactId( "testArtifact" );
+ childPlugin1.setGroupId( "bbb" );
+ childPlugin1.setVersion( "1.0" );
+
+ PluginExecution childExecution1 = new PluginExecution();
+ childExecution1.setId( "testExecution" );
+
+ childPlugin1.addExecution( childExecution1 );
+
+ Plugin childPlugin2 = new Plugin();
+ childPlugin2.setArtifactId( "testArtifact" );
+ childPlugin2.setGroupId( "aaa" );
+ childPlugin2.setVersion( "1.0" );
+
+ PluginExecution childExecution2 = new PluginExecution();
+ childExecution2.setId( "testExecution" );
+
+ childPlugin2.addExecution( childExecution2 );
+
+ PluginContainer childContainer = new PluginContainer();
+ childContainer.addPlugin(childPlugin1);
+ childContainer.addPlugin(childPlugin2);
+
+
+ ModelUtils.mergePluginLists(childContainer, parentContainer, true);
+
+ assertEquals( 4, childContainer.getPlugins().size() );
+ assertSame(parentPlugin1, childContainer.getPlugins().get(0));
+ assertSame(parentPlugin2, childContainer.getPlugins().get(1));
+ assertSame(childPlugin1, childContainer.getPlugins().get(2));
+ assertSame(childPlugin2, childContainer.getPlugins().get(3));
+ }
+
+ /**
+ * Verifies MNG-1499: The ordering of plugin executions should also be in the specified order.
+ */
+ public void testShouldKeepOriginalPluginExecutionOrdering()
+ {
+ Plugin parent = new Plugin();
+ parent.setArtifactId( "testArtifact" );
+ parent.setGroupId( "testGroup" );
+ parent.setVersion( "1.0" );
+
+ PluginExecution parentExecution1 = new PluginExecution();
+ parentExecution1.setId( "zzz" ); // Will show up last in the sorted map
+ PluginExecution parentExecution2 = new PluginExecution();
+ parentExecution2.setId( "yyy" ); // Will show up last in the sorted map
+
+ parent.addExecution( parentExecution1 );
+ parent.addExecution( parentExecution2 );
+
+ // this block verifies MNG-1703
+ Dependency dep = new Dependency();
+ dep.setGroupId( "depGroupId" );
+ dep.setArtifactId( "depArtifactId" );
+ dep.setVersion( "depVersion" );
+ parent.setDependencies( Collections.singletonList( dep ) );
+
+ Plugin child = new Plugin();
+ child.setArtifactId( "testArtifact" );
+ child.setGroupId( "testGroup" );
+ child.setVersion( "1.0" );
+
+ PluginExecution childExecution1 = new PluginExecution();
+ childExecution1.setId( "bbb" );
+ PluginExecution childExecution2 = new PluginExecution();
+ childExecution2.setId( "aaa" );
+
+ child.addExecution( childExecution1 );
+ child.addExecution( childExecution2 );
+
+ ModelUtils.mergePluginDefinitions( child, parent, false );
+
+ assertEquals( 4, child.getExecutions().size() );
+ assertSame(parentExecution1, child.getExecutions().get(0));
+ assertSame(parentExecution2, child.getExecutions().get(1));
+ assertSame(childExecution1, child.getExecutions().get(2));
+ assertSame(childExecution2, child.getExecutions().get(3));
+
+ // this block prevents MNG-1703
+ assertEquals( 1, child.getDependencies().size() );
+ Dependency dep2 = child.getDependencies().get( 0 );
+ assertEquals( dep.getManagementKey(), dep2.getManagementKey() );
+ }
+
+ public void testShouldOverwritePluginConfigurationSubItemsByDefault()
+ throws XmlPullParserException, IOException
+ {
+ String parentConfigStr = "<configuration><items><item>one</item><item>two</item></items></configuration>";
+ Xpp3Dom parentConfig = Xpp3DomBuilder.build( new StringReader( parentConfigStr ) );
+
+ Plugin parentPlugin = createPlugin( "group", "artifact", "1", null );
+ parentPlugin.setConfiguration( parentConfig );
+
+ String childConfigStr = "<configuration><items><item>three</item></items></configuration>";
+ Xpp3Dom childConfig = Xpp3DomBuilder.build( new StringReader( childConfigStr ) );
+
+ Plugin childPlugin = createPlugin( "group", "artifact", "1", null );
+ childPlugin.setConfiguration( childConfig );
+
+ ModelUtils.mergePluginDefinitions( childPlugin, parentPlugin, true );
+
+ Xpp3Dom result = (Xpp3Dom) childPlugin.getConfiguration();
+ Xpp3Dom items = result.getChild( "items" );
+
+ assertEquals( 1, items.getChildCount() );
+
+ Xpp3Dom item = items.getChild( 0 );
+ assertEquals( "three", item.getValue() );
+ }
+
+ public void testShouldMergePluginConfigurationSubItemsWithMergeAttributeSet()
+ throws XmlPullParserException, IOException
+ {
+ String parentConfigStr = "<configuration><items><item>one</item><item>two</item></items></configuration>";
+ Xpp3Dom parentConfig = Xpp3DomBuilder.build( new StringReader( parentConfigStr ) );
+
+ Plugin parentPlugin = createPlugin( "group", "artifact", "1", null );
+ parentPlugin.setConfiguration( parentConfig );
+
+ String childConfigStr = "<configuration><items combine.children=\"append\"><item>three</item></items></configuration>";
+ Xpp3Dom childConfig = Xpp3DomBuilder.build( new StringReader( childConfigStr ) );
+
+ Plugin childPlugin = createPlugin( "group", "artifact", "1", null );
+ childPlugin.setConfiguration( childConfig );
+
+ ModelUtils.mergePluginDefinitions( childPlugin, parentPlugin, true );
+
+ Xpp3Dom result = (Xpp3Dom) childPlugin.getConfiguration();
+ Xpp3Dom items = result.getChild( "items" );
+
+ assertEquals( 3, items.getChildCount() );
+
+ Xpp3Dom[] item = items.getChildren();
+
+ List<String> actual = Arrays.asList( item[0].getValue(), item[1].getValue(), item[2].getValue() );
+ List<String> expected = Arrays.asList( "one", "two", "three" );
+ Collections.sort( actual );
+ Collections.sort( expected );
+ assertEquals( expected, actual );
+ }
+
+ public void testShouldNotMergePluginExecutionWhenExecInheritedIsFalseAndTreatAsInheritanceIsTrue()
+ {
+ String gid = "group";
+ String aid = "artifact";
+ String ver = "1";
+
+ PluginContainer parent = new PluginContainer();
+ Plugin pParent = createPlugin( gid, aid, ver, Collections.EMPTY_MAP );
+
+ pParent.setInherited( Boolean.toString( true ) );
+
+ PluginExecution eParent = new PluginExecution();
+
+ String testId = "test";
+
+ eParent.setId( testId );
+ eParent.addGoal( "run" );
+ eParent.setPhase( "initialize" );
+ eParent.setInherited( Boolean.toString( false ) );
+
+ pParent.addExecution( eParent );
+ parent.addPlugin( pParent );
+
+ PluginContainer child = new PluginContainer();
+ Plugin pChild = createPlugin( gid, aid, ver, Collections.EMPTY_MAP );
+ PluginExecution eChild = new PluginExecution();
+
+ eChild.setId( "child-specified" );
+ eChild.addGoal( "child" );
+ eChild.setPhase( "compile" );
+
+ pChild.addExecution( eChild );
+ child.addPlugin( pChild );
+
+ ModelUtils.mergePluginDefinitions( pChild, pParent, true );
+
+ Map executionMap = pChild.getExecutionsAsMap();
+ assertNull( "test execution should not be inherited from parent.", executionMap.get( testId ) );
+ }
+
+ public void testShouldNotMergePluginExecutionWhenPluginInheritedIsFalseAndTreatAsInheritanceIsTrue()
+ {
+ String gid = "group";
+ String aid = "artifact";
+ String ver = "1";
+
+ PluginContainer parent = new PluginContainer();
+ Plugin pParent = createPlugin( gid, aid, ver, Collections.EMPTY_MAP );
+
+ pParent.setInherited( Boolean.toString( false ) );
+
+ PluginExecution eParent = new PluginExecution();
+
+ String testId = "test";
+
+ eParent.setId( testId );
+ eParent.addGoal( "run" );
+ eParent.setPhase( "initialize" );
+ eParent.setInherited( Boolean.toString( true ) );
+
+ pParent.addExecution( eParent );
+ parent.addPlugin( pParent );
+
+ PluginContainer child = new PluginContainer();
+ Plugin pChild = createPlugin( gid, aid, ver, Collections.EMPTY_MAP );
+ PluginExecution eChild = new PluginExecution();
+
+ eChild.setId( "child-specified" );
+ eChild.addGoal( "child" );
+ eChild.setPhase( "compile" );
+
+ pChild.addExecution( eChild );
+ child.addPlugin( pChild );
+
+ ModelUtils.mergePluginDefinitions( pChild, pParent, true );
+
+ Map executionMap = pChild.getExecutionsAsMap();
+ assertNull( "test execution should not be inherited from parent.", executionMap.get( testId ) );
+ }
+
+ public void testShouldMergePluginExecutionWhenExecInheritedIsTrueAndTreatAsInheritanceIsTrue()
+ {
+ String gid = "group";
+ String aid = "artifact";
+ String ver = "1";
+
+ PluginContainer parent = new PluginContainer();
+ Plugin pParent = createPlugin( gid, aid, ver, Collections.EMPTY_MAP );
+
+ pParent.setInherited( Boolean.toString( true ) );
+
+ PluginExecution eParent = new PluginExecution();
+
+ String testId = "test";
+
+ eParent.setId( testId );
+ eParent.addGoal( "run" );
+ eParent.setPhase( "initialize" );
+ eParent.setInherited( Boolean.toString( true ) );
+
+ pParent.addExecution( eParent );
+ parent.addPlugin( pParent );
+
+ PluginContainer child = new PluginContainer();
+ Plugin pChild = createPlugin( gid, aid, ver, Collections.EMPTY_MAP );
+ PluginExecution eChild = new PluginExecution();
+
+ eChild.setId( "child-specified" );
+ eChild.addGoal( "child" );
+ eChild.setPhase( "compile" );
+
+ pChild.addExecution( eChild );
+ child.addPlugin( pChild );
+
+ ModelUtils.mergePluginDefinitions( pChild, pParent, true );
+
+ Map executionMap = pChild.getExecutionsAsMap();
+ assertNotNull( "test execution should be inherited from parent.", executionMap.get( testId ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java
new file mode 100644
index 00000000..d9e7beb2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java
@@ -0,0 +1,149 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Iterator;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.repository.RepositorySystem;
+import org.apache.maven.repository.internal.DefaultArtifactDescriptorReader;
+import org.eclipse.aether.impl.ArtifactDescriptorReader;
+import org.eclipse.aether.impl.ArtifactResolver;
+
+public class ProjectClasspathTest
+ extends AbstractMavenProjectTestCase
+{
+ static final String dir = "projects/scope/";
+
+ public void setUp()
+ throws Exception
+ {
+ ArtifactResolver resolver = lookup( ArtifactResolver.class, "classpath" );
+ DefaultArtifactDescriptorReader pomReader = (DefaultArtifactDescriptorReader)lookup(ArtifactDescriptorReader.class);
+ pomReader.setArtifactResolver( resolver );
+
+ projectBuilder = lookup( ProjectBuilder.class, "classpath" );
+
+ // the metadata source looks up the default impl, so we have to trick it
+ getContainer().addComponent( projectBuilder, ProjectBuilder.class, "default" );
+
+ repositorySystem = lookup( RepositorySystem.class );
+ }
+
+ @Override
+ protected String getCustomConfigurationName()
+ {
+ return null;
+ }
+
+ public void testProjectClasspath()
+ throws Exception
+ {
+ File f = getFileForClasspathResource( dir + "project-with-scoped-dependencies.xml" );
+
+ MavenProject project = getProjectWithDependencies( f );
+
+ Artifact artifact;
+
+ assertNotNull( "Test project can't be null!", project );
+
+ checkArtifactIdScope( project, "provided", "provided" );
+ checkArtifactIdScope( project, "test", "test" );
+ checkArtifactIdScope( project, "compile", "compile" );
+ checkArtifactIdScope( project, "runtime", "runtime" );
+ checkArtifactIdScope( project, "default", "compile" );
+
+ // check all transitive deps of a test dependency are test, except test and provided which is skipped
+ artifact = getArtifact( project, "maven-test-test", "scope-provided" );
+ assertNull( "Check no provided dependencies are transitive", artifact );
+ artifact = getArtifact( project, "maven-test-test", "scope-test" );
+ assertNull( "Check no test dependencies are transitive", artifact );
+
+ artifact = getArtifact( project, "maven-test-test", "scope-compile" );
+ assertNotNull( artifact );
+
+ System.out.println( "a = " + artifact );
+ System.out.println( "b = " + artifact.getScope() );
+ assertEquals( "Check scope", "test", artifact.getScope() );
+ artifact = getArtifact( project, "maven-test-test", "scope-default" );
+ assertEquals( "Check scope", "test", artifact.getScope() );
+ artifact = getArtifact( project, "maven-test-test", "scope-runtime" );
+ assertEquals( "Check scope", "test", artifact.getScope() );
+
+ // check all transitive deps of a provided dependency are provided scope, except for test
+ checkGroupIdScope( project, "provided", "maven-test-provided" );
+ artifact = getArtifact( project, "maven-test-provided", "scope-runtime" );
+ assertEquals( "Check scope", "provided", artifact.getScope() );
+
+ // check all transitive deps of a runtime dependency are runtime scope, except for test
+ checkGroupIdScope( project, "runtime", "maven-test-runtime" );
+ artifact = getArtifact( project, "maven-test-runtime", "scope-runtime" );
+ assertEquals( "Check scope", "runtime", artifact.getScope() );
+
+ // check all transitive deps of a compile dependency are compile scope, except for runtime and test
+ checkGroupIdScope( project, "compile", "maven-test-compile" );
+ artifact = getArtifact( project, "maven-test-compile", "scope-runtime" );
+ assertEquals( "Check scope", "runtime", artifact.getScope() );
+
+ // check all transitive deps of a default dependency are compile scope, except for runtime and test
+ checkGroupIdScope( project, "compile", "maven-test-default" );
+ artifact = getArtifact( project, "maven-test-default", "scope-runtime" );
+ assertEquals( "Check scope", "runtime", artifact.getScope() );
+ }
+
+ private void checkGroupIdScope( MavenProject project, String scopeValue, String groupId )
+ {
+ Artifact artifact;
+ artifact = getArtifact( project, groupId, "scope-compile" );
+ assertEquals( "Check scope", scopeValue, artifact.getScope() );
+ artifact = getArtifact( project, groupId, "scope-test" );
+ assertNull( "Check test dependency is not transitive", artifact );
+ artifact = getArtifact( project, groupId, "scope-provided" );
+ assertNull( "Check provided dependency is not transitive", artifact );
+ artifact = getArtifact( project, groupId, "scope-default" );
+ assertEquals( "Check scope", scopeValue, artifact.getScope() );
+ }
+
+ private void checkArtifactIdScope( MavenProject project, String scope, String scopeValue )
+ {
+ String artifactId = "scope-" + scope;
+ Artifact artifact = getArtifact( project, "maven-test", artifactId );
+ assertNotNull( artifact );
+ assertEquals( "Check scope", scopeValue, artifact.getScope() );
+ }
+
+ private Artifact getArtifact( MavenProject project, String groupId, String artifactId )
+ {
+ System.out.println( "[ Looking for " + groupId + ":" + artifactId + " ]" );
+ for ( Artifact a : project.getArtifacts() )
+ {
+ System.out.println( a.toString() );
+ if ( artifactId.equals( a.getArtifactId() ) && a.getGroupId().equals( groupId ) )
+ {
+ System.out.println( "RETURN" );
+ return a;
+ }
+ }
+ System.out.println( "Return null" );
+ return null;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/TestArtifactResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/TestArtifactResolver.java
new file mode 100644
index 00000000..9f389d6d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/TestArtifactResolver.java
@@ -0,0 +1,30 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.resolver.DefaultArtifactResolver;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+@Component(role=ArtifactResolver.class,hint="classpath")
+public class TestArtifactResolver
+ extends DefaultArtifactResolver
+{
+ @Requirement(hint="classpath")
+ private ArtifactMetadataSource source;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/TestMavenRepositorySystem.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/TestMavenRepositorySystem.java
new file mode 100644
index 00000000..2818df06
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/TestMavenRepositorySystem.java
@@ -0,0 +1,30 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.repository.RepositorySystem;
+import org.apache.maven.repository.legacy.LegacyRepositorySystem;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+@Component(role = RepositorySystem.class, hint = "classpath")
+public class TestMavenRepositorySystem
+ extends LegacyRepositorySystem
+{
+ @Requirement(hint="classpath")
+ private ArtifactResolver artifactResolver;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java
new file mode 100644
index 00000000..754487f4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java
@@ -0,0 +1,68 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.Collections;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.codehaus.plexus.component.annotations.Component;
+
+@Component(role=ProjectBuilder.class,hint="classpath")
+public class TestProjectBuilder
+ extends DefaultProjectBuilder
+{
+
+ @Override
+ public ProjectBuildingResult build( Artifact artifact, ProjectBuildingRequest request )
+ throws ProjectBuildingException
+ {
+ if ( "maven-test".equals( artifact.getGroupId() ) )
+ {
+ String scope = artifact.getArtifactId().substring( "scope-".length() );
+
+ try
+ {
+ artifact.setFile( ProjectClasspathTest.getFileForClasspathResource( ProjectClasspathTest.dir + "transitive-" + scope + "-dep.xml" ) );
+ }
+ catch ( FileNotFoundException e )
+ {
+ throw new IllegalStateException( "Missing test POM for " + artifact );
+ }
+ }
+ if ( artifact.getFile() == null )
+ {
+ MavenProject project = new MavenProject();
+ project.setArtifact( artifact );
+ return new DefaultProjectBuildingResult( project, null, null );
+ }
+ return build( artifact.getFile(), request );
+ }
+
+ @Override
+ public ProjectBuildingResult build( File pomFile, ProjectBuildingRequest configuration )
+ throws ProjectBuildingException
+ {
+ ProjectBuildingResult result = super.build( pomFile, configuration );
+
+ result.getProject().setRemoteArtifactRepositories( Collections.<ArtifactRepository> emptyList() );
+
+ return result;
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/AbstractProjectInheritanceTestCase.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/AbstractProjectInheritanceTestCase.java
new file mode 100644
index 00000000..413d6fea
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/AbstractProjectInheritanceTestCase.java
@@ -0,0 +1,57 @@
+package org.apache.maven.project.inheritance;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.project.AbstractMavenProjectTestCase;
+
+/**
+ * @author Jason van Zyl
+ */
+public abstract class AbstractProjectInheritanceTestCase
+ extends AbstractMavenProjectTestCase
+{
+ protected String getTestSeries()
+ {
+ String className = getClass().getPackage().getName();
+
+ return className.substring( className.lastIndexOf( "." ) + 1 );
+ }
+
+ protected File projectFile( String name )
+ {
+ return projectFile( "maven", name );
+ }
+
+ protected File projectFile( String groupId, String artifactId )
+ {
+ return new File( getLocalRepositoryPath(), "/" + groupId + "/poms/" + artifactId + "-1.0.pom" );
+ }
+
+ // ----------------------------------------------------------------------
+ // The local repository for this category of tests
+ // ----------------------------------------------------------------------
+
+ protected File getLocalRepositoryPath()
+ {
+ return getTestFile("src/test/resources/inheritance-repo/" + getTestSeries() );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t00/ProjectInheritanceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t00/ProjectInheritanceTest.java
new file mode 100644
index 00000000..0ee79807
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t00/ProjectInheritanceTest.java
@@ -0,0 +1,93 @@
+package org.apache.maven.project.inheritance.t00;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.MailingList;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
+
+/**
+ * A test which demonstrates maven's recursive inheritance where
+ * a distinct value is taken from each parent contributing to the
+ * the final model of the project being assembled. There is no
+ * overriding going on amongst the models being used in this test:
+ * each model in the lineage is providing a value that is not present
+ * anywhere else in the lineage. We are just making sure that values
+ * down in the lineage are bubbling up where they should.
+ *
+ * @author Jason van Zyl
+ */
+public class ProjectInheritanceTest
+ extends AbstractProjectInheritanceTestCase
+{
+ // ----------------------------------------------------------------------
+ //
+ // p4 inherits from p3
+ // p3 inherits from p2
+ // p2 inherits from p1
+ // p1 inherits from p0
+ // p0 inhertis from super model
+ //
+ // or we can show it graphically as:
+ //
+ // p4 ---> p3 ---> p2 ---> p1 ---> p0 --> super model
+ //
+ // ----------------------------------------------------------------------
+
+ public void testProjectInheritance()
+ throws Exception
+ {
+ MavenProject p4 = getProject( projectFile( "p4" ) );
+
+ assertEquals( "p4", p4.getName() );
+
+ // ----------------------------------------------------------------------
+ // Value inherited from p3
+ // ----------------------------------------------------------------------
+
+ assertEquals( "2000", p4.getInceptionYear() );
+
+ // ----------------------------------------------------------------------
+ // Value taken from p2
+ // ----------------------------------------------------------------------
+
+ assertEquals( "mailing-list", p4.getMailingLists().get( 0 ).getName() );
+
+ // ----------------------------------------------------------------------
+ // Value taken from p1
+ // ----------------------------------------------------------------------
+
+ assertEquals( "scm-url/p2/p3/p4", p4.getScm().getUrl() );
+
+ // ----------------------------------------------------------------------
+ // Value taken from p4
+ // ----------------------------------------------------------------------
+
+ assertEquals( "Codehaus", p4.getOrganization().getName() );
+
+ // ----------------------------------------------------------------------
+ // Value taken from super model
+ // ----------------------------------------------------------------------
+
+ assertEquals( "4.0.0", p4.getModelVersion() );
+
+ assertEquals( "4.0.0", p4.getModelVersion() );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t01/ProjectInheritanceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t01/ProjectInheritanceTest.java
new file mode 100644
index 00000000..e6efcc4d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t01/ProjectInheritanceTest.java
@@ -0,0 +1,92 @@
+package org.apache.maven.project.inheritance.t01;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
+
+/**
+ * A test which demonstrates maven's recursive inheritance where
+ * we are testing to make sure that elements stated in a model are
+ * not clobbered by the same elements elsewhere in the lineage.
+ *
+ * @author Jason van Zyl
+ */
+public class ProjectInheritanceTest
+ extends AbstractProjectInheritanceTestCase
+{
+ // ----------------------------------------------------------------------
+ //
+ // p4 inherits from p3
+ // p3 inherits from p2
+ // p2 inherits from p1
+ // p1 inherits from p0
+ // p0 inhertis from super model
+ //
+ // or we can show it graphically as:
+ //
+ // p4 ---> p3 ---> p2 ---> p1 ---> p0 --> super model
+ //
+ // ----------------------------------------------------------------------
+
+ public void testProjectInheritance()
+ throws Exception
+ {
+ // ----------------------------------------------------------------------
+ // Check p0 value for org name
+ // ----------------------------------------------------------------------
+
+ MavenProject p0 = getProject( projectFile( "maven.t01", "p0" ) );
+
+ assertEquals( "p0-org", p0.getOrganization().getName() );
+
+ // ----------------------------------------------------------------------
+ // Check p1 value for org name
+ // ----------------------------------------------------------------------
+
+ MavenProject p1 = getProject( projectFile( "maven.t01", "p1" ) );
+
+ assertEquals( "p1-org", p1.getOrganization().getName() );
+
+ // ----------------------------------------------------------------------
+ // Check p2 value for org name
+ // ----------------------------------------------------------------------
+
+ MavenProject p2 = getProject( projectFile( "maven.t01", "p2" ) );
+
+ assertEquals( "p2-org", p2.getOrganization().getName() );
+
+ // ----------------------------------------------------------------------
+ // Check p2 value for org name
+ // ----------------------------------------------------------------------
+
+ MavenProject p3 = getProject( projectFile( "maven.t01", "p3" ) );
+
+ assertEquals( "p3-org", p3.getOrganization().getName() );
+
+ // ----------------------------------------------------------------------
+ // Check p4 value for org name
+ // ----------------------------------------------------------------------
+
+ MavenProject p4 = getProject( projectFile( "maven.t01", "p4" ) );
+
+ assertEquals( "p4-org", p4.getOrganization().getName() );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t02/ProjectInheritanceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t02/ProjectInheritanceTest.java
new file mode 100644
index 00000000..339c81ff
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t02/ProjectInheritanceTest.java
@@ -0,0 +1,169 @@
+package org.apache.maven.project.inheritance.t02;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.MailingList;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
+
+/**
+ * A test which demonstrates maven's recursive inheritance where
+ * a distinct value is taken from each parent contributing to the
+ * the final model of the project being assembled. There is no
+ * overriding going on amongst the models being used in this test:
+ * each model in the lineage is providing a value that is not present
+ * anywhere else in the lineage. We are just making sure that values
+ * down in the lineage are bubbling up where they should.
+ *
+ * @author Jason van Zyl
+ */
+public class ProjectInheritanceTest
+ extends AbstractProjectInheritanceTestCase
+{
+ // ----------------------------------------------------------------------
+ //
+ // p4 inherits from p3
+ // p3 inherits from p2
+ // p2 inherits from p1
+ // p1 inherits from p0
+ // p0 inhertis from super model
+ //
+ // or we can show it graphically as:
+ //
+ // p4 ---> p3 ---> p2 ---> p1 ---> p0 --> super model
+ //
+ // ----------------------------------------------------------------------
+
+ public void testProjectInheritance()
+ throws Exception
+ {
+ File localRepo = getLocalRepositoryPath();
+
+ System.out.println( "Local repository is at: " + localRepo.getAbsolutePath() );
+
+ File pom0 = new File( localRepo, "p0/pom.xml" );
+ File pom1 = new File( pom0.getParentFile(), "p1/pom.xml" );
+ File pom2 = new File( pom1.getParentFile(), "p2/pom.xml" );
+ File pom3 = new File( pom2.getParentFile(), "p3/pom.xml" );
+ File pom4 = new File( pom3.getParentFile(), "p4/pom.xml" );
+ File pom5 = new File( pom4.getParentFile(), "p5/pom.xml" );
+
+ System.out.println( "Location of project-4's POM: " + pom4.getPath() );
+
+ // load everything...
+ MavenProject project0 = getProject( pom0 );
+ MavenProject project1 = getProject( pom1 );
+ MavenProject project2 = getProject( pom2 );
+ MavenProject project3 = getProject( pom3 );
+ MavenProject project4 = getProject( pom4 );
+ MavenProject project5 = getProject( pom5 );
+
+ assertEquals( "p4", project4.getName() );
+
+ // ----------------------------------------------------------------------
+ // Value inherited from p3
+ // ----------------------------------------------------------------------
+
+ assertEquals( "2000", project4.getInceptionYear() );
+
+ // ----------------------------------------------------------------------
+ // Value taken from p2
+ // ----------------------------------------------------------------------
+
+ assertEquals( "mailing-list", project4.getMailingLists().get( 0 ).getName() );
+
+ // ----------------------------------------------------------------------
+ // Value taken from p1
+ // ----------------------------------------------------------------------
+
+ assertEquals( "scm-url/p2/p3/p4", project4.getScm().getUrl() );
+
+ // ----------------------------------------------------------------------
+ // Value taken from p4
+ // ----------------------------------------------------------------------
+
+ assertEquals( "Codehaus", project4.getOrganization().getName() );
+
+ // ----------------------------------------------------------------------
+ // Value taken from super model
+ // ----------------------------------------------------------------------
+
+ assertEquals( "4.0.0", project4.getModelVersion() );
+
+ Build build = project4.getBuild();
+ List<Plugin> plugins = build.getPlugins();
+
+ Map validPluginCounts = new HashMap();
+
+ String testPluginArtifactId = "maven-compiler-plugin";
+
+ // this is the plugin we're looking for.
+ validPluginCounts.put( testPluginArtifactId, 0 );
+
+ // these are injected if -DperformRelease=true
+ validPluginCounts.put( "maven-deploy-plugin", 0 );
+ validPluginCounts.put( "maven-javadoc-plugin", 0 );
+ validPluginCounts.put( "maven-source-plugin", 0 );
+
+ Plugin testPlugin = null;
+
+ for ( Plugin plugin : plugins )
+ {
+ String pluginArtifactId = plugin.getArtifactId();
+
+ if ( !validPluginCounts.containsKey( pluginArtifactId ) )
+ {
+ fail( "Illegal plugin found: " + pluginArtifactId );
+ }
+ else
+ {
+ if ( pluginArtifactId.equals( testPluginArtifactId ) )
+ {
+ testPlugin = plugin;
+ }
+
+ Integer count = (Integer) validPluginCounts.get( pluginArtifactId );
+
+ if ( count > 0 )
+ {
+ fail( "Multiple copies of plugin: " + pluginArtifactId + " found in POM." );
+ }
+ else
+ {
+ count = count + 1;
+
+ validPluginCounts.put( pluginArtifactId, count );
+ }
+ }
+ }
+
+ List executions = testPlugin.getExecutions();
+
+ assertEquals( 1, executions.size() );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t03/ProjectInheritanceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t03/ProjectInheritanceTest.java
new file mode 100644
index 00000000..73f518e4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t03/ProjectInheritanceTest.java
@@ -0,0 +1,68 @@
+package org.apache.maven.project.inheritance.t03;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
+
+/**
+ * A test which demonstrates maven's recursive inheritance where
+ * a distinct value is taken from each parent contributing to the
+ * the final model of the project being assembled. There is no
+ * overriding going on amongst the models being used in this test:
+ * each model in the lineage is providing a value that is not present
+ * anywhere else in the lineage. We are just making sure that values
+ * down in the lineage are bubbling up where they should.
+ *
+ * @author Jason van Zyl
+ */
+public class ProjectInheritanceTest
+ extends AbstractProjectInheritanceTestCase
+{
+ // ----------------------------------------------------------------------
+ //
+ // p1 inherits from p0
+ // p0 inhertis from super model
+ //
+ // or we can show it graphically as:
+ //
+ // p1 ---> p0 --> super model
+ //
+ // ----------------------------------------------------------------------
+
+ public void testProjectInheritance()
+ throws Exception
+ {
+ File localRepo = getLocalRepositoryPath();
+ File pom0 = new File( localRepo, "p0/pom.xml" );
+
+ File pom0Basedir = pom0.getParentFile();
+
+ File pom1 = new File( pom0Basedir, "p1/pom.xml" );
+
+ // load everything...
+ MavenProject project0 = getProject( pom0 );
+ MavenProject project1 = getProject( pom1 );
+
+ assertEquals( pom0Basedir, project1.getParent().getBasedir() );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t04/ProjectInheritanceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t04/ProjectInheritanceTest.java
new file mode 100644
index 00000000..e24262f1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t04/ProjectInheritanceTest.java
@@ -0,0 +1,86 @@
+package org.apache.maven.project.inheritance.t04;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
+
+/**
+ * Verifies the version of a dependency listed in a parent's
+ * dependencyManagement section is chosen over another version of the same
+ * dependency, listed transitively.
+ *
+ * @author <a href="mailto:pschneider@gmail.com">Patrick Schneider</a>
+ */
+public class ProjectInheritanceTest
+ extends AbstractProjectInheritanceTestCase
+{
+ // ----------------------------------------------------------------------
+ //
+ // p1 inherits from p0
+ // p0 inhertis from super model
+ //
+ // or we can show it graphically as:
+ //
+ // p1 ---> p0 --> super model
+ //
+ // p1 has a depMgmt section that specifies versions 1.0 of jars "a" & "b"
+ // jar "a" has a transitive dependency on 2.0 of jar "b", but maven should
+ // prefer to use version 1.0.
+ //
+ // ----------------------------------------------------------------------
+
+ public void testDependencyManagementOverridesTransitiveDependencyVersion()
+ throws Exception
+ {
+ File localRepo = getLocalRepositoryPath();
+ File pom0 = new File( localRepo, "p0/pom.xml" );
+ File pom0Basedir = pom0.getParentFile();
+ File pom1 = new File( pom0Basedir, "p1/pom.xml" );
+
+ // load the child project, which inherits from p0...
+ MavenProject project0 = getProjectWithDependencies( pom0 );
+ MavenProject project1 = getProjectWithDependencies( pom1 );
+
+ assertEquals( pom0Basedir, project1.getParent().getBasedir() );
+ Set set = project1.getArtifacts();
+ assertNotNull( "No artifacts", set );
+ assertTrue( "No Artifacts", set.size() > 0 );
+ assertTrue( "Set size should be 3, is " + set.size(), set.size() == 3 );
+
+ for ( Object aSet : set )
+ {
+ Artifact artifact = (Artifact) aSet;
+ System.out.println(
+ "Artifact: " + artifact.getDependencyConflictId() + " " + artifact.getVersion() + " Optional=" + (
+ artifact.isOptional()
+ ? "true"
+ : "false" ) );
+ assertTrue( "Incorrect version for " + artifact.getDependencyConflictId(),
+ artifact.getVersion().equals( "1.0" ) );
+ }
+
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t05/ProjectInheritanceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t05/ProjectInheritanceTest.java
new file mode 100644
index 00000000..1d2bd182
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t05/ProjectInheritanceTest.java
@@ -0,0 +1,79 @@
+package org.apache.maven.project.inheritance.t05;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
+
+/**
+ * A test which demonstrates maven's dependency management
+ *
+ * @author <a href="rgoers@apache.org">Ralph Goers</a>
+ */
+public class ProjectInheritanceTest
+ extends AbstractProjectInheritanceTestCase
+{
+ // ----------------------------------------------------------------------
+ //
+ // p1 inherits from p0
+ // p0 inhertis from super model
+ //
+ // or we can show it graphically as:
+ //
+ // p1 ---> p0 --> super model
+ //
+ // ----------------------------------------------------------------------
+
+ public void testDependencyManagement()
+ throws Exception
+ {
+ File localRepo = getLocalRepositoryPath();
+ File pom0 = new File( localRepo, "p0/pom.xml" );
+
+ File pom0Basedir = pom0.getParentFile();
+
+ File pom1 = new File( pom0Basedir, "p1/pom.xml" );
+
+ // load everything...
+ MavenProject project0 = getProjectWithDependencies( pom0 );
+ MavenProject project1 = getProjectWithDependencies( pom1 );
+
+ assertEquals( pom0Basedir, project1.getParent().getBasedir() );
+ Set set = project1.getArtifacts();
+ assertNotNull( "No artifacts", set );
+ assertTrue( "No Artifacts", set.size() > 0 );
+
+ for ( Object aSet : set )
+ {
+ Artifact artifact = (Artifact) aSet;
+ System.out.println(
+ "Artifact: " + artifact.getDependencyConflictId() + " " + artifact.getVersion() + " Scope: "
+ + artifact.getScope() );
+ assertTrue( "Incorrect version for " + artifact.getDependencyConflictId(),
+ artifact.getVersion().equals( "1.0" ) );
+ }
+
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t06/ProjectInheritanceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t06/ProjectInheritanceTest.java
new file mode 100644
index 00000000..1b80dfeb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t06/ProjectInheritanceTest.java
@@ -0,0 +1,80 @@
+package org.apache.maven.project.inheritance.t06;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
+
+/**
+ * A test which demonstrates maven's dependency management
+ *
+ * @author <a href="rgoers@apache.org">Ralph Goers</a>
+ */
+public class ProjectInheritanceTest
+ extends AbstractProjectInheritanceTestCase
+{
+ // ----------------------------------------------------------------------
+ //
+ // p1 inherits from p0
+ // p0 inhertis from super model
+ //
+ // or we can show it graphically as:
+ //
+ // p1 ---> p0 --> super model
+ //
+ // ----------------------------------------------------------------------
+
+ public void testDependencyManagement()
+ throws Exception
+ {
+ File localRepo = getLocalRepositoryPath();
+ File pom0 = new File( localRepo, "p0/pom.xml" );
+
+ File pom0Basedir = pom0.getParentFile();
+
+ File pom1 = new File( pom0Basedir, "p1/pom.xml" );
+
+ // load everything...
+ MavenProject project0 = getProjectWithDependencies( pom0 );
+ MavenProject project1 = getProjectWithDependencies( pom1 );
+
+ assertEquals( pom0Basedir, project1.getParent().getBasedir() );
+ Set set = project1.getArtifacts();
+ assertNotNull( "No artifacts", set );
+ assertTrue( "No Artifacts", set.size() > 0 );
+ Iterator iter = set.iterator();
+ assertTrue( "Set size should be 4, is " + set.size(), set.size() == 4 );
+
+ while ( iter.hasNext() )
+ {
+ Artifact artifact = (Artifact) iter.next();
+ System.out.println( "Artifact: " + artifact.getDependencyConflictId() + " " + artifact.getVersion()
+ + " Optional=" + ( artifact.isOptional() ? "true" : "false" ) );
+ assertTrue( "Incorrect version for " + artifact.getDependencyConflictId(),
+ artifact.getVersion().equals( "1.0" ) );
+ }
+
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t07/ProjectInheritanceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t07/ProjectInheritanceTest.java
new file mode 100644
index 00000000..68586aaf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t07/ProjectInheritanceTest.java
@@ -0,0 +1,82 @@
+package org.apache.maven.project.inheritance.t07;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
+
+/**
+ * A test which demonstrates maven's dependency management
+ *
+ * @author Jason van Zyl
+ */
+public class ProjectInheritanceTest
+ extends AbstractProjectInheritanceTestCase
+{
+ // ----------------------------------------------------------------------
+ //
+ // p1 inherits from p0
+ // p0 inhertis from super model
+ //
+ // or we can show it graphically as:
+ //
+ // p1 ---> p0 --> super model
+ //
+ // ----------------------------------------------------------------------
+
+ public void testDependencyManagement()
+ throws Exception
+ {
+ File localRepo = getLocalRepositoryPath();
+ File pom0 = new File( localRepo, "p0/pom.xml" );
+
+ File pom0Basedir = pom0.getParentFile();
+
+ File pom1 = new File( pom0Basedir, "p1/pom.xml" );
+
+ // load everything...
+ MavenProject project1 = getProjectWithDependencies( pom1 );
+
+ assertEquals( pom0Basedir, project1.getParent().getBasedir() );
+ System.out.println("Project " + project1.getId() + " " + project1);
+ Set set = project1.getArtifacts();
+ assertNotNull("No artifacts", set);
+ assertTrue("No Artifacts", set.size() > 0);
+ assertTrue("Set size should be 3, is " + set.size(), set.size() == 3 );
+
+ for ( Object aSet : set )
+ {
+ Artifact artifact = (Artifact) aSet;
+ assertFalse( "", artifact.getArtifactId().equals( "t07-d" ) );
+ System.out.println(
+ "Artifact: " + artifact.getDependencyConflictId() + " " + artifact.getVersion() + " Optional=" + (
+ artifact.isOptional()
+ ? "true"
+ : "false" ) );
+ assertTrue( "Incorrect version for " + artifact.getDependencyConflictId(),
+ artifact.getVersion().equals( "1.0" ) );
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t08/ProjectInheritanceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t08/ProjectInheritanceTest.java
new file mode 100644
index 00000000..1afb8e8e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t08/ProjectInheritanceTest.java
@@ -0,0 +1,81 @@
+package org.apache.maven.project.inheritance.t08;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
+
+/**
+ * A test which demonstrates maven's dependency management
+ *
+ * @author <a href="rgoers@apache.org">Ralph Goers</a>
+ */
+public class ProjectInheritanceTest
+ extends AbstractProjectInheritanceTestCase
+{
+ // ----------------------------------------------------------------------
+ //
+ // p1 inherits from p0
+ // p0 inhertis from super model
+ //
+ // or we can show it graphically as:
+ //
+ // p1 ---> p0 --> super model
+ //
+ // ----------------------------------------------------------------------
+
+ public void testDependencyManagement()
+ throws Exception
+ {
+ File localRepo = getLocalRepositoryPath();
+ File pom0 = new File( localRepo, "p0/pom.xml" );
+
+ File pom0Basedir = pom0.getParentFile();
+
+ File pom1 = new File( pom0Basedir, "p1/pom.xml" );
+
+ // load everything...
+ MavenProject project0 = getProjectWithDependencies( pom0 );
+ MavenProject project1 = getProjectWithDependencies( pom1 );
+
+ assertEquals( pom0Basedir, project1.getParent().getBasedir() );
+ System.out.println( "Project " + project1.getId() + " " + project1 );
+ Set set = project1.getArtifacts();
+ assertNotNull( "No artifacts", set );
+ assertTrue( "No Artifacts", set.size() > 0 );
+ Iterator iter = set.iterator();
+ assertTrue( "Set size should be 4, is " + set.size(), set.size() == 4 );
+
+ while ( iter.hasNext() )
+ {
+ Artifact artifact = (Artifact) iter.next();
+ System.out.println( "Artifact: " + artifact.getDependencyConflictId() + " " + artifact.getVersion()
+ + " Optional=" + ( artifact.isOptional() ? "true" : "false" ) );
+ assertTrue( "Incorrect version for " + artifact.getDependencyConflictId(),
+ artifact.getVersion().equals( "1.0" ) );
+ }
+
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t09/ProjectInheritanceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t09/ProjectInheritanceTest.java
new file mode 100644
index 00000000..6a29b732
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t09/ProjectInheritanceTest.java
@@ -0,0 +1,119 @@
+package org.apache.maven.project.inheritance.t09;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import java.io.File;
+import java.util.Map;
+
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
+
+/**
+ * Verifies exclusions listed in dependencyManagement are valid for
+ * transitive dependencies.
+ *
+ * @author <a href="mailto:pschneider@gmail.com">Patrick Schneider</a>
+ */
+public class ProjectInheritanceTest
+ extends AbstractProjectInheritanceTestCase
+{
+ // ----------------------------------------------------------------------
+ //
+ // p1 inherits from p0
+ // p0 inhertis from super model
+ //
+ // or we can show it graphically as:
+ //
+ // p1 ---> p0 --> super model
+ //
+ // ----------------------------------------------------------------------
+
+ /**
+ * How the test project is set up:
+ *
+ * 1. dependencyManagement lists dependencies on a & b,
+ * with an exclusion on c in b.
+ * 2. the child project lists a dependency on project a only
+ * 3. a depends on b (which is transitive to the child project),
+ * and b depends on c.
+ *
+ * We should see that the resulting size of collected artifacts is two:
+ * a & b only.
+ */
+ public void testDependencyManagementExclusionsExcludeTransitively()
+ throws Exception
+ {
+ File localRepo = getLocalRepositoryPath();
+
+ File pom0 = new File( localRepo, "p0/pom.xml" );
+ File pom0Basedir = pom0.getParentFile();
+ File pom1 = new File( pom0Basedir, "p1/pom.xml" );
+
+ // load the child project, which inherits from p0...
+ MavenProject project0 = getProjectWithDependencies( pom0 );
+ MavenProject project1 = getProjectWithDependencies( pom1 );
+
+ assertNotNull("Parent is null", project1.getParent());
+ assertEquals( pom0Basedir, project1.getParent().getBasedir() );
+ Map map = project1.getArtifactMap();
+
+ assertNotNull("No artifacts", map);
+ assertTrue("No Artifacts", map.size() > 0);
+ assertTrue("Set size should be 2, is " + map.size(), map.size() == 2);
+
+ assertTrue("maven-test:t09-a is not in the project", map.containsKey( "maven-test:t09-a" ));
+ assertTrue("maven-test:t09-b is not in the project", map.containsKey( "maven-test:t09-b" ));
+ assertFalse("maven-test:t09-c is in the project", map.containsKey( "maven-test:t09-c" ));
+ }
+
+ /**
+ * Setup exactly the same as the above test, except that the child project
+ * now depends upon d, which has a transitive dependency on c. Even though
+ * we did list an exclusion on c, it was only from within the context of
+ * project b. We will pick up project c in this case because no
+ * restrictions were placed on d. This demonstrates that a, b, c, & d will
+ * all be collected.
+ *
+ * @throws Exception
+ */
+ public void testDependencyManagementExclusionDoesNotOverrideGloballyForTransitives()
+ throws Exception
+ {
+ File localRepo = getLocalRepositoryPath();
+
+ File pom0 = new File( localRepo, "p0/pom.xml" );
+ File pom0Basedir = pom0.getParentFile();
+ File pom2 = new File( pom0Basedir, "p2/pom.xml" );
+
+ // load the child project, which inherits from p0...
+ MavenProject project0 = getProjectWithDependencies( pom0 );
+ MavenProject project2 = getProjectWithDependencies( pom2 );
+
+ assertEquals( pom0Basedir, project2.getParent().getBasedir() );
+ Map map = project2.getArtifactMap();
+ assertNotNull( "No artifacts", map );
+ assertTrue( "No Artifacts", map.size() > 0 );
+ assertTrue( "Set size should be 4, is " + map.size(), map.size() == 4 );
+
+ assertTrue( "maven-test:t09-a is not in the project", map.containsKey( "maven-test:t09-a" ) );
+ assertTrue( "maven-test:t09-b is not in the project", map.containsKey( "maven-test:t09-b" ) );
+ assertTrue( "maven-test:t09-c is not in the project", map.containsKey( "maven-test:t09-c" ) );
+ assertTrue( "maven-test:t09-d is not in the project", map.containsKey( "maven-test:t09-d" ) );
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t10/ProjectInheritanceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t10/ProjectInheritanceTest.java
new file mode 100644
index 00000000..9e5137f2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t10/ProjectInheritanceTest.java
@@ -0,0 +1,94 @@
+package org.apache.maven.project.inheritance.t10;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Map;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
+
+/**
+ * Verifies scope inheritence of direct and transitive dependencies.
+ *
+ * Should show three behaviors:
+ *
+ * 1. dependencyManagement should override the scope of transitive dependencies.
+ * 2. Direct dependencies should override the scope of dependencyManagement.
+ * 3. Direct dependencies should inherit scope from dependencyManagement when
+ * they do not explicitly state a scope.
+ *
+ * @author <a href="mailto:pschneider@gmail.com">Patrick Schneider</a>
+ */
+public class ProjectInheritanceTest
+ extends AbstractProjectInheritanceTestCase
+{
+ // ----------------------------------------------------------------------
+ //
+ // p1 inherits from p0
+ // p0 inhertis from super model
+ //
+ // or we can show it graphically as:
+ //
+ // p1 ---> p0 --> super model
+ //
+ // ----------------------------------------------------------------------
+
+ public void testDependencyManagementOverridesTransitiveDependencyVersion()
+ throws Exception
+ {
+ File localRepo = getLocalRepositoryPath();
+
+ File pom0 = new File( localRepo, "p0/pom.xml" );
+ File pom0Basedir = pom0.getParentFile();
+ File pom1 = new File( pom0Basedir, "p1/pom.xml" );
+
+ // load the child project, which inherits from p0...
+ MavenProject project0 = getProjectWithDependencies( pom0 );
+ MavenProject project1 = getProjectWithDependencies( pom1 );
+
+ assertEquals( pom0Basedir, project1.getParent().getBasedir() );
+ System.out.println("Project " + project1.getId() + " " + project1);
+ Map map = project1.getArtifactMap();
+ assertNotNull("No artifacts", map);
+ assertTrue("No Artifacts", map.size() > 0);
+ assertTrue("Set size should be 3, is " + map.size(), map.size() == 3);
+
+ Artifact a = (Artifact) map.get("maven-test:t10-a");
+ Artifact b = (Artifact) map.get("maven-test:t10-b");
+ Artifact c = (Artifact) map.get("maven-test:t10-c");
+
+ assertNotNull( a );
+ assertNotNull( b );
+ assertNotNull( c );
+
+ // inherited from depMgmt
+ System.out.println(a.getScope());
+ assertTrue("Incorrect scope for " + a.getDependencyConflictId(), a.getScope().equals("test"));
+
+ // transitive dep, overridden b depMgmt
+ assertTrue("Incorrect scope for " + b.getDependencyConflictId(), b.getScope().equals("runtime"));
+
+ // direct dep, overrides depMgmt
+ assertTrue("Incorrect scope for " + c.getDependencyConflictId(), c.getScope().equals("runtime"));
+
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t11/ProjectInheritanceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t11/ProjectInheritanceTest.java
new file mode 100644
index 00000000..bbdecd7a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t11/ProjectInheritanceTest.java
@@ -0,0 +1,64 @@
+package org.apache.maven.project.inheritance.t11;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
+
+/**
+ * Verifies scope of root project is preserved regardless of parent depenedency management.
+ *
+ * @author <a href="mailto:pschneider@gmail.com">Patrick Schneider</a>
+ * @see <a href="http://jira.codehaus.org/browse/MNG-2919">MNG-2919</a>
+ */
+public class ProjectInheritanceTest
+ extends AbstractProjectInheritanceTestCase
+{
+ // ----------------------------------------------------------------------
+ //
+ // p1 inherits from p0
+ // p0 inhertis from super model
+ //
+ // or we can show it graphically as:
+ //
+ // p1 ---> p0 --> super model
+ //
+ // ----------------------------------------------------------------------
+
+ public void testDependencyManagementDoesNotOverrideScopeOfCurrentArtifact()
+ throws Exception
+ {
+ File localRepo = getLocalRepositoryPath();
+
+ File pom0 = new File( localRepo, "p0/pom.xml" );
+ File pom0Basedir = pom0.getParentFile();
+ File pom1 = new File( pom0Basedir, "p1/pom.xml" );
+
+ // load the child project, which inherits from p0...
+ MavenProject project0 = getProjectWithDependencies( pom0 );
+ MavenProject project1 = getProjectWithDependencies( pom1 );
+
+ assertEquals( pom0Basedir, project1.getParent().getBasedir() );
+ assertNull( "dependencyManagement has overwritten the scope of the currently building child project",
+ project1.getArtifact().getScope() );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t12/ProjectInheritanceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t12/ProjectInheritanceTest.java
new file mode 100644
index 00000000..814e4871
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t12/ProjectInheritanceTest.java
@@ -0,0 +1,65 @@
+package org.apache.maven.project.inheritance.t12;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Map;
+
+import org.apache.maven.model.Plugin;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
+
+/**
+ * Verifies that plugin execution sections in the parent POM that have
+ * inherit == false are not inherited to the child POM.
+ */
+public class ProjectInheritanceTest extends AbstractProjectInheritanceTestCase
+{
+ // ----------------------------------------------------------------------
+ //
+ // p1 inherits from p0
+ // p0 inherits from super model
+ //
+ // or we can show it graphically as:
+ //
+ // p1 ---> p0 --> super model
+ //
+ // ----------------------------------------------------------------------
+
+ public void testFalsePluginExecutionInheritValue() throws Exception
+ {
+ File localRepo = getLocalRepositoryPath();
+
+ File pom0 = new File( localRepo, "p0/pom.xml" );
+ File pom0Basedir = pom0.getParentFile();
+ File pom1 = new File( pom0Basedir, "p1/pom.xml" );
+
+ getProjectWithDependencies( pom0 );
+ MavenProject project1 = getProjectWithDependencies( pom1 );
+
+ Map pluginMap = project1.getBuild().getPluginsAsMap();
+ Plugin compilerPlugin = (Plugin) pluginMap.get( "org.apache.maven.plugins:maven-compiler-plugin" );
+
+ assertNotNull( compilerPlugin );
+
+ Map executionMap = compilerPlugin.getExecutionsAsMap();
+ assertNull( "Plugin execution: \'test\' should NOT exist in the compiler plugin specification for the child project!", executionMap.get( "test" ) );
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t12scm/ProjectInheritanceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t12scm/ProjectInheritanceTest.java
new file mode 100644
index 00000000..3b086624
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t12scm/ProjectInheritanceTest.java
@@ -0,0 +1,125 @@
+package org.apache.maven.project.inheritance.t12scm;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
+
+/**
+ * Verifies SCM inheritance uses modules statement from parent.
+ *
+ * @author jdcasey
+ */
+public class ProjectInheritanceTest
+ extends AbstractProjectInheritanceTestCase
+{
+ // ----------------------------------------------------------------------
+ //
+ // p1 inherits from p0
+ // p0 inhertis from super model
+ //
+ // or we can show it graphically as:
+ //
+ // p1 ---> p0 --> super model
+ //
+ // ----------------------------------------------------------------------
+
+ public void testScmInfoCalculatedCorrectlyOnParentAndChildRead()
+ throws Exception
+ {
+ File localRepo = getLocalRepositoryPath();
+
+ File pom0 = new File( localRepo, "p0/pom.xml" );
+ File pom0Basedir = pom0.getParentFile();
+ File pom1 = new File( pom0Basedir, "modules/p1/pom.xml" );
+
+ // load the child project, which inherits from p0...
+ MavenProject project0 = getProject( pom0 );
+ MavenProject project1 = getProject( pom1 );
+
+ System.out.println( "\n\n" );
+ System.out.println( "Parent SCM URL is: " + project0.getScm().getUrl() );
+ System.out.println( "Child SCM URL is: " + project1.getScm().getUrl() );
+ System.out.println();
+ System.out.println( "Parent SCM connection is: " + project0.getScm().getConnection() );
+ System.out.println( "Child SCM connection is: " + project1.getScm().getConnection() );
+ System.out.println();
+ System.out.println( "Parent SCM developer connection is: "
+ + project0.getScm().getDeveloperConnection() );
+ System.out.println( "Child SCM developer connection is: "
+ + project1.getScm().getDeveloperConnection() );
+
+ assertEquals( project1.getScm().getUrl(), project0.getScm().getUrl() + "/modules/p1" );
+ assertEquals( project1.getScm().getConnection(), project0.getScm().getConnection()
+ + "/modules/p1" );
+ assertEquals( project1.getScm().getDeveloperConnection(), project0.getScm()
+ .getDeveloperConnection()
+ + "/modules/p1" );
+ }
+
+ public void testScmInfoCalculatedCorrectlyOnChildOnlyRead()
+ throws Exception
+ {
+ File localRepo = getLocalRepositoryPath();
+
+ File pom1 = new File( localRepo, "p0/modules/p1/pom.xml" );
+
+ // load the child project, which inherits from p0...
+ MavenProject project1 = getProject( pom1 );
+
+ System.out.println( "\n\n" );
+ System.out.println( "Child SCM URL is: " + project1.getScm().getUrl() );
+ System.out.println( "Child SCM connection is: " + project1.getScm().getConnection() );
+ System.out.println( "Child SCM developer connection is: "
+ + project1.getScm().getDeveloperConnection() );
+
+ assertEquals( "http://host/viewer?path=/p0/modules/p1", project1.getScm().getUrl() );
+ assertEquals( "scm:svn:http://host/p0/modules/p1", project1.getScm().getConnection() );
+ assertEquals( "scm:svn:https://host/p0/modules/p1", project1.getScm().getDeveloperConnection() );
+ }
+
+// public void testScmInfoCalculatedCorrectlyOnChildReadFromLocalRepository()
+// throws Exception
+// {
+// File localRepo = getLocalRepositoryPath();
+//
+// ArtifactFactory factory = (ArtifactFactory) lookup( ArtifactFactory.class );
+// Artifact artifact = factory.createProjectArtifact( "maven", "p1", "1.0" );
+//
+// ArtifactRepositoryFactory repoFactory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.class );
+// ArtifactRepository localArtifactRepo = repoFactory.createLocalRepository( localRepo );
+//
+// MavenProject project1 = getProjectBuilder().buildFromRepository( artifact, Collections.EMPTY_LIST, localArtifactRepo );
+//
+// System.out.println( "\n\n" );
+// System.out.println( "Child SCM URL is: " + project1.getScm().getUrl() );
+// System.out.println( "Child SCM connection is: " + project1.getScm().getConnection() );
+// System.out.println( "Child SCM developer connection is: "
+// + project1.getScm().getDeveloperConnection() );
+//
+// assertEquals( project1.getScm().getUrl(), "http://host/viewer?path=/p0/modules/p1" );
+// assertEquals( project1.getScm().getConnection(), "scm:svn:http://host/p0/modules/p1" );
+// assertEquals( project1.getScm().getDeveloperConnection(),
+// "scm:svn:https://host/p0/modules/p1" );
+// }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/path/DefaultPathTranslatorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/path/DefaultPathTranslatorTest.java
new file mode 100644
index 00000000..b19ef996
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/path/DefaultPathTranslatorTest.java
@@ -0,0 +1,58 @@
+package org.apache.maven.project.path;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+@SuppressWarnings( "deprecation" )
+public class DefaultPathTranslatorTest
+ extends TestCase
+{
+
+ public void testAlignToBasedirWhereBasedirExpressionIsTheCompleteValue()
+ {
+ File basedir = new File( System.getProperty( "java.io.tmpdir" ), "test" ).getAbsoluteFile();
+
+ String aligned = new DefaultPathTranslator().alignToBaseDirectory( "${basedir}", basedir );
+
+ assertEquals( basedir.getAbsolutePath(), aligned );
+ }
+
+ public void testAlignToBasedirWhereBasedirExpressionIsTheValuePrefix()
+ {
+ File basedir = new File( System.getProperty( "java.io.tmpdir" ), "test" ).getAbsoluteFile();
+
+ String aligned = new DefaultPathTranslator().alignToBaseDirectory( "${basedir}/dir", basedir );
+
+ assertEquals( new File( basedir, "dir" ).getAbsolutePath(), aligned );
+ }
+
+ public void testUnalignToBasedirWherePathEqualsBasedir()
+ {
+ File basedir = new File( System.getProperty( "java.io.tmpdir" ), "test" ).getAbsoluteFile();
+
+ String unaligned = new DefaultPathTranslator().unalignFromBaseDirectory( basedir.getAbsolutePath(), basedir );
+
+ assertEquals( ".", unaligned );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/DefaultMirrorSelectorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/DefaultMirrorSelectorTest.java
new file mode 100644
index 00000000..fb32f0f2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/DefaultMirrorSelectorTest.java
@@ -0,0 +1,38 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.DefaultArtifactRepository;
+import org.codehaus.plexus.PlexusTestCase;
+
+public class DefaultMirrorSelectorTest
+ extends PlexusTestCase
+{
+
+ public void testMirrorWithMirroOfPatternContainingANegationIsNotSelected()
+ {
+ ArtifactRepository repository = new DefaultArtifactRepository( "snapshots.repo", "http://whatever", null );
+ String pattern = "external:*, !snapshots.repo";
+ boolean matches = DefaultMirrorSelector.matchPattern( repository, pattern );
+ System.out.println( matches );
+ assertFalse( matches );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositoryLayout.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositoryLayout.java
new file mode 100644
index 00000000..77a6baef
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositoryLayout.java
@@ -0,0 +1,89 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * @author jdcasey
+ */
+@Component(role=ArtifactRepositoryLayout.class, hint="legacy")
+public class LegacyRepositoryLayout
+ implements ArtifactRepositoryLayout
+{
+ private static final String PATH_SEPARATOR = "/";
+
+ public String getId()
+ {
+ return "legacy";
+ }
+
+ public String pathOf( Artifact artifact )
+ {
+ ArtifactHandler artifactHandler = artifact.getArtifactHandler();
+
+ StringBuilder path = new StringBuilder( 128 );
+
+ path.append( artifact.getGroupId() ).append( '/' );
+ path.append( artifactHandler.getDirectory() ).append( '/' );
+ path.append( artifact.getArtifactId() ).append( '-' ).append( artifact.getVersion() );
+
+ if ( artifact.hasClassifier() )
+ {
+ path.append( '-' ).append( artifact.getClassifier() );
+ }
+
+ if ( artifactHandler.getExtension() != null && artifactHandler.getExtension().length() > 0 )
+ {
+ path.append( '.' ).append( artifactHandler.getExtension() );
+ }
+
+ return path.toString();
+ }
+
+ public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata,
+ ArtifactRepository repository )
+ {
+ return pathOfRepositoryMetadata( metadata, metadata.getLocalFilename( repository ) );
+ }
+
+ private String pathOfRepositoryMetadata( ArtifactMetadata metadata,
+ String filename )
+ {
+ StringBuilder path = new StringBuilder( 128 );
+
+ path.append( metadata.getGroupId() ).append( PATH_SEPARATOR ).append( "poms" ).append( PATH_SEPARATOR );
+
+ path.append( filename );
+
+ return path.toString();
+ }
+
+ public String pathOfRemoteRepositoryMetadata( ArtifactMetadata metadata )
+ {
+ return pathOfRepositoryMetadata( metadata, metadata.getRemoteFilename() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositorySystemTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositorySystemTest.java
new file mode 100644
index 00000000..96af590c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositorySystemTest.java
@@ -0,0 +1,206 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.DefaultMavenExecutionResult;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.RepositoryPolicy;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.repository.RepositorySystem;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusTestCase;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
+import org.eclipse.aether.repository.LocalRepository;
+
+/**
+ * Tests {@link LegacyRepositorySystem}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class LegacyRepositorySystemTest
+ extends PlexusTestCase
+{
+ private RepositorySystem repositorySystem;
+
+ private ResolutionErrorHandler resolutionErrorHandler;
+
+ @Override
+ protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration )
+ {
+ super.customizeContainerConfiguration( containerConfiguration );
+ containerConfiguration.setAutoWiring( true );
+ containerConfiguration.setClassPathScanning( PlexusConstants.SCANNING_INDEX );
+ }
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ repositorySystem = lookup( RepositorySystem.class, "default" );
+ resolutionErrorHandler = lookup( ResolutionErrorHandler.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ repositorySystem = null;
+ resolutionErrorHandler = null;
+ super.tearDown();
+ }
+
+ protected List<ArtifactRepository> getRemoteRepositories()
+ throws Exception
+ {
+ File repoDir = new File( getBasedir(), "src/test/remote-repo" ).getAbsoluteFile();
+
+ RepositoryPolicy policy = new RepositoryPolicy();
+ policy.setEnabled( true );
+ policy.setChecksumPolicy( "ignore" );
+ policy.setUpdatePolicy( "always" );
+
+ Repository repository = new Repository();
+ repository.setId( RepositorySystem.DEFAULT_REMOTE_REPO_ID );
+ repository.setUrl( "file://" + repoDir.toURI().getPath() );
+ repository.setReleases( policy );
+ repository.setSnapshots( policy );
+
+ return Arrays.asList( repositorySystem.buildArtifactRepository( repository ) );
+ }
+
+ protected ArtifactRepository getLocalRepository()
+ throws Exception
+ {
+ File repoDir = new File( getBasedir(), "target/local-repo" ).getAbsoluteFile();
+
+ return repositorySystem.createLocalRepository( repoDir );
+ }
+
+ public void testThatASystemScopedDependencyIsNotResolvedFromRepositories()
+ throws Exception
+ {
+ //
+ // We should get a whole slew of dependencies resolving this artifact transitively
+ //
+ Dependency d = new Dependency();
+ d.setGroupId( "org.apache.maven.its" );
+ d.setArtifactId( "b" );
+ d.setVersion( "0.1" );
+ d.setScope( Artifact.SCOPE_COMPILE );
+ Artifact artifact = repositorySystem.createDependencyArtifact( d );
+
+ ArtifactResolutionRequest request = new ArtifactResolutionRequest()
+ .setArtifact( artifact )
+ .setResolveRoot( true )
+ .setResolveTransitively( true )
+ .setRemoteRepositories( getRemoteRepositories() )
+ .setLocalRepository( getLocalRepository() );
+
+ DefaultRepositorySystemSession session = new DefaultRepositorySystemSession();
+ LocalRepository localRepo = new LocalRepository( request.getLocalRepository().getBasedir() );
+ session.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( session, localRepo ) );
+ LegacySupport legacySupport = lookup( LegacySupport.class );
+ legacySupport.setSession( new MavenSession( getContainer(), session, new DefaultMavenExecutionRequest(),
+ new DefaultMavenExecutionResult() ) );
+
+ ArtifactResolutionResult result = repositorySystem.resolve( request );
+ resolutionErrorHandler.throwErrors( request, result );
+ assertEquals( 2, result.getArtifacts().size() );
+
+ //
+ // System scoped version which should
+ //
+ d.setScope( Artifact.SCOPE_SYSTEM );
+ File file = new File( getBasedir(), "src/test/repository-system/maven-core-2.1.0.jar" );
+ assertTrue( file.exists() );
+ d.setSystemPath( file.getCanonicalPath() );
+
+ artifact = repositorySystem.createDependencyArtifact( d );
+
+ //
+ // The request has not set any local or remote repositories as the system scoped dependency being resolved should only
+ // give us the dependency off the disk and nothing more.
+ //
+ request = new ArtifactResolutionRequest()
+ .setArtifact( artifact )
+ .setResolveRoot( true )
+ .setResolveTransitively( true );
+
+ result = repositorySystem.resolve( request );
+ resolutionErrorHandler.throwErrors( request, result );
+ assertEquals( 1, result.getArtifacts().size() );
+
+ //
+ // Put in a bogus file to make sure missing files cause the resolution to fail.
+ //
+ file = new File( getBasedir(), "src/test/repository-system/maven-monkey-2.1.0.jar" );
+ assertFalse( file.exists() );
+ d.setSystemPath( file.getCanonicalPath() );
+ artifact = repositorySystem.createDependencyArtifact( d );
+
+ //
+ // The request has not set any local or remote repositories as the system scoped dependency being resolved should only
+ // give us the dependency off the disk and nothing more.
+ //
+ request = new ArtifactResolutionRequest()
+ .setArtifact( artifact )
+ .setResolveRoot( true )
+ .setResolveTransitively( true );
+
+ try
+ {
+ result = repositorySystem.resolve( request );
+ resolutionErrorHandler.throwErrors( request, result );
+ }
+ catch( Exception e )
+ {
+ assertTrue( result.hasMissingArtifacts() );
+ }
+ }
+
+ public void testLocalRepositoryBasedir()
+ throws Exception
+ {
+ File localRepoDir = new File( "" ).getAbsoluteFile();
+
+ ArtifactRepository localRepo = repositorySystem.createLocalRepository( localRepoDir );
+
+ String basedir = localRepo.getBasedir();
+
+ assertFalse( basedir.endsWith( "/" ) );
+ assertFalse( basedir.endsWith( "\\" ) );
+
+ assertEquals( localRepoDir, new File( basedir ) );
+
+ assertEquals( localRepoDir.getPath(), basedir );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java
new file mode 100644
index 00000000..57645750
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java
@@ -0,0 +1,259 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.repository.legacy.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.settings.Mirror;
+import org.codehaus.plexus.PlexusTestCase;
+
+public class MirrorProcessorTest
+ extends PlexusTestCase
+{
+ private DefaultMirrorSelector mirrorSelector;
+ private ArtifactRepositoryFactory repositorySystem;
+
+ protected void setUp()
+ throws Exception
+ {
+ mirrorSelector = (DefaultMirrorSelector) lookup( MirrorSelector.class );
+ repositorySystem = lookup( ArtifactRepositoryFactory.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ mirrorSelector = null;
+ repositorySystem = null;
+
+ super.tearDown();
+ }
+
+ public void testExternalURL()
+ {
+ assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://somehost" ) ) );
+ assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://somehost:9090/somepath" ) ) );
+ assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "ftp://somehost" ) ) );
+ assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://192.168.101.1" ) ) );
+ assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://" ) ) );
+ // these are local
+ assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://localhost:8080" ) ) );
+ assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://127.0.0.1:9090" ) ) );
+ assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "file://localhost/somepath" ) ) );
+ assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "file://localhost/D:/somepath" ) ) );
+ assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://localhost" ) ) );
+ assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://127.0.0.1" ) ) );
+ assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "file:///somepath" ) ) );
+ assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "file://D:/somepath" ) ) );
+
+ // not a proper url so returns false;
+ assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "192.168.101.1" ) ) );
+ assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "" ) ) );
+ }
+
+ public void testMirrorLookup()
+ {
+ Mirror mirrorA = newMirror( "a", "a", "http://a" );
+ Mirror mirrorB = newMirror( "b", "b", "http://b" );
+
+ List<Mirror> mirrors = Arrays.asList( mirrorA, mirrorB );
+
+ assertSame( mirrorA, mirrorSelector.getMirror( getRepo( "a", "http://a.a" ), mirrors ) );
+
+ assertSame( mirrorB, mirrorSelector.getMirror( getRepo( "b", "http://a.a" ), mirrors ) );
+
+ assertNull( mirrorSelector.getMirror( getRepo( "c", "http://c.c" ), mirrors ) );
+ }
+
+ public void testMirrorWildcardLookup()
+ {
+ Mirror mirrorA = newMirror( "a", "a", "http://a" );
+ Mirror mirrorB = newMirror( "b", "b", "http://b" );
+ Mirror mirrorC = newMirror( "c", "*", "http://wildcard" );
+
+ List<Mirror> mirrors = Arrays.asList( mirrorA, mirrorB, mirrorC );
+
+ assertSame( mirrorA, mirrorSelector.getMirror( getRepo( "a", "http://a.a" ), mirrors ) );
+
+ assertSame( mirrorB, mirrorSelector.getMirror( getRepo( "b", "http://a.a" ), mirrors ) );
+
+ assertSame( mirrorC, mirrorSelector.getMirror( getRepo( "c", "http://c.c" ), mirrors ) );
+ }
+
+ public void testMirrorStopOnFirstMatch()
+ {
+ // exact matches win first
+ Mirror mirrorA2 = newMirror( "a2", "a,b", "http://a2" );
+ Mirror mirrorA = newMirror( "a", "a", "http://a" );
+ // make sure repeated entries are skipped
+ Mirror mirrorA3 = newMirror( "a", "a", "http://a3" );
+
+ Mirror mirrorB = newMirror( "b", "b", "http://b" );
+ Mirror mirrorC = newMirror( "c", "d,e", "http://de" );
+ Mirror mirrorC2 = newMirror( "c", "*", "http://wildcard" );
+ Mirror mirrorC3 = newMirror( "c", "e,f", "http://ef" );
+
+ List<Mirror> mirrors = Arrays.asList( mirrorA2, mirrorA, mirrorA3, mirrorB, mirrorC, mirrorC2, mirrorC3 );
+
+ assertSame( mirrorA, mirrorSelector.getMirror( getRepo( "a", "http://a.a" ), mirrors ) );
+
+ assertSame( mirrorB, mirrorSelector.getMirror( getRepo( "b", "http://a.a" ), mirrors ) );
+
+ assertSame( mirrorC2, mirrorSelector.getMirror( getRepo( "c", "http://c.c" ), mirrors ) );
+
+ assertSame( mirrorC, mirrorSelector.getMirror( getRepo( "d", "http://d" ), mirrors ) );
+
+ assertSame( mirrorC, mirrorSelector.getMirror( getRepo( "e", "http://e" ), mirrors ) );
+
+ assertSame( mirrorC2, mirrorSelector.getMirror( getRepo( "f", "http://f" ), mirrors ) );
+ }
+
+ public void testPatterns()
+ {
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*" ) );
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*," ) );
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), ",*," ) );
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*," ) );
+
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "a" ) );
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "a," ) );
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), ",a," ) );
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "a," ) );
+
+ assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "b" ), "a" ) );
+ assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "b" ), "a," ) );
+ assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "b" ), ",a" ) );
+ assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "b" ), ",a," ) );
+
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "a,b" ) );
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "b" ), "a,b" ) );
+
+ assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "c" ), "a,b" ) );
+
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*" ) );
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*,b" ) );
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*,!b" ) );
+
+ assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*,!a" ) );
+ assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "!a,*" ) );
+
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "c" ), "*,!a" ) );
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "c" ), "!a,*" ) );
+
+ assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "c" ), "!a,!c" ) );
+ assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "d" ), "!a,!c*" ) );
+ }
+
+ public void testPatternsWithExternal()
+ {
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "*" ) );
+ assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "external:*" ) );
+
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "external:*,a" ) );
+ assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "external:*,!a" ) );
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "a,external:*" ) );
+ assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "!a,external:*" ) );
+
+ assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "c", "http://localhost" ), "!a,external:*" ) );
+ assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "c", "http://somehost" ), "!a,external:*" ) );
+ }
+
+ public void testLayoutPattern()
+ {
+ assertTrue( DefaultMirrorSelector.matchesLayout( "default", null ) );
+ assertTrue( DefaultMirrorSelector.matchesLayout( "default", "" ) );
+ assertTrue( DefaultMirrorSelector.matchesLayout( "default", "*" ) );
+
+ assertTrue( DefaultMirrorSelector.matchesLayout( "default", "default" ) );
+ assertFalse( DefaultMirrorSelector.matchesLayout( "default", "legacy" ) );
+
+ assertTrue( DefaultMirrorSelector.matchesLayout( "default", "legacy,default" ) );
+ assertTrue( DefaultMirrorSelector.matchesLayout( "default", "default,legacy" ) );
+
+ assertFalse( DefaultMirrorSelector.matchesLayout( "default", "legacy,!default" ) );
+ assertFalse( DefaultMirrorSelector.matchesLayout( "default", "!default,legacy" ) );
+
+ assertFalse( DefaultMirrorSelector.matchesLayout( "default", "*,!default" ) );
+ assertFalse( DefaultMirrorSelector.matchesLayout( "default", "!default,*" ) );
+ }
+
+ public void testMirrorLayoutConsideredForMatching()
+ {
+ ArtifactRepository repo = getRepo( "a" );
+
+ Mirror mirrorA = newMirror( "a", "a", null, "http://a" );
+ Mirror mirrorB = newMirror( "b", "a", "p2", "http://b" );
+
+ Mirror mirrorC = newMirror( "c", "*", null, "http://c" );
+ Mirror mirrorD = newMirror( "d", "*", "p2", "http://d" );
+
+ assertSame( mirrorA, mirrorSelector.getMirror( repo, Arrays.asList( mirrorA ) ) );
+ assertNull( mirrorSelector.getMirror( repo, Arrays.asList( mirrorB ) ) );
+
+ assertSame( mirrorC, mirrorSelector.getMirror( repo, Arrays.asList( mirrorC ) ) );
+ assertNull( mirrorSelector.getMirror( repo, Arrays.asList( mirrorD ) ) );
+ }
+
+ /**
+ * Build an ArtifactRepository object.
+ *
+ * @param id
+ * @param url
+ * @return
+ */
+ private ArtifactRepository getRepo( String id, String url )
+ {
+ return repositorySystem.createArtifactRepository( id, url, new DefaultRepositoryLayout(), null, null );
+ }
+
+ /**
+ * Build an ArtifactRepository object.
+ *
+ * @param id
+ * @return
+ */
+ private ArtifactRepository getRepo( String id )
+ {
+ return getRepo( id, "http://something" );
+ }
+
+ private Mirror newMirror( String id, String mirrorOf, String url )
+ {
+ return newMirror( id, mirrorOf, null, url );
+ }
+
+ private Mirror newMirror( String id, String mirrorOf, String layouts, String url )
+ {
+ Mirror mirror = new Mirror();
+
+ mirror.setId( id );
+ mirror.setMirrorOf( mirrorOf );
+ mirror.setMirrorOfLayouts( layouts );
+ mirror.setUrl( url );
+
+ return mirror;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java
new file mode 100644
index 00000000..1c5f34c3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java
@@ -0,0 +1,240 @@
+package org.apache.maven.repository.legacy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.artifact.AbstractArtifactComponentTestCase;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+import org.apache.maven.repository.legacy.DefaultUpdateCheckManager;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.logging.console.ConsoleLogger;
+
+public class DefaultUpdateCheckManagerTest
+ extends AbstractArtifactComponentTestCase
+{
+
+ DefaultUpdateCheckManager updateCheckManager;
+
+ @Override
+ protected String component()
+ {
+ return "updateCheckManager";
+ }
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ updateCheckManager = new DefaultUpdateCheckManager( new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) );
+ }
+
+ public void testArtifact() throws Exception
+ {
+ ArtifactRepository remoteRepository = remoteRepository();
+
+ ArtifactRepository localRepository = localRepository();
+
+ Artifact a = createArtifact( "a", "0.0.1-SNAPSHOT" );
+ File file = new File( localRepository.getBasedir(),
+ localRepository.pathOf( a ) );
+ file.delete();
+ a.setFile( file );
+
+ File touchFile = updateCheckManager.getTouchfile( a );
+ touchFile.delete();
+
+ assertTrue( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
+
+ file.getParentFile().mkdirs();
+ file.createNewFile();
+ updateCheckManager.touch( a, remoteRepository, null );
+
+ assertFalse( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
+
+ assertNull( updateCheckManager.readLastUpdated( touchFile,
+ updateCheckManager.getRepositoryKey( remoteRepository ) ) );
+
+ assertFalse( updateCheckManager.getTouchfile( a ).exists() );
+ }
+
+ public void testMissingArtifact()
+ throws Exception
+ {
+ ArtifactRepository remoteRepository = remoteRepository();
+
+ ArtifactRepository localRepository = localRepository();
+
+ Artifact a = createArtifact( "a", "0.0.1-SNAPSHOT" );
+ File file = new File( localRepository.getBasedir(),
+ localRepository.pathOf( a ) );
+ file.delete();
+ a.setFile( file );
+
+ File touchFile = updateCheckManager.getTouchfile( a );
+ touchFile.delete();
+
+ assertTrue( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
+
+ updateCheckManager.touch( a, remoteRepository, null );
+
+ assertFalse( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
+
+ assertFalse( file.exists() );
+ assertNotNull( updateCheckManager.readLastUpdated( touchFile,
+ updateCheckManager.getRepositoryKey( remoteRepository ) ) );
+ }
+
+ public void testPom() throws Exception
+ {
+ ArtifactRepository remoteRepository = remoteRepository();
+
+ ArtifactRepository localRepository = localRepository();
+
+ Artifact a = createArtifact( "a", "0.0.1", "pom" );
+ File file = new File( localRepository.getBasedir(),
+ localRepository.pathOf( a ) );
+ file.delete();
+ a.setFile( file );
+
+ File touchFile = updateCheckManager.getTouchfile( a );
+ touchFile.delete();
+
+ assertTrue( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
+
+ file.getParentFile().mkdirs();
+ file.createNewFile();
+ updateCheckManager.touch( a, remoteRepository, null );
+
+ assertFalse( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
+
+ assertNull( updateCheckManager.readLastUpdated( touchFile,
+ updateCheckManager.getRepositoryKey( remoteRepository ) ) );
+
+ assertFalse( updateCheckManager.getTouchfile( a ).exists() );
+ }
+
+ public void testMissingPom()
+ throws Exception
+ {
+ ArtifactRepository remoteRepository = remoteRepository();
+
+ ArtifactRepository localRepository = localRepository();
+
+ Artifact a = createArtifact( "a", "0.0.1", "pom" );
+ File file = new File( localRepository.getBasedir(),
+ localRepository.pathOf( a ) );
+ file.delete();
+ a.setFile( file );
+
+ File touchFile = updateCheckManager.getTouchfile( a );
+ touchFile.delete();
+
+ assertTrue( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
+
+ updateCheckManager.touch( a, remoteRepository, null );
+
+ assertFalse( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
+
+ assertFalse( file.exists() );
+ assertNotNull( updateCheckManager.readLastUpdated( touchFile,
+ updateCheckManager.getRepositoryKey( remoteRepository ) ) );
+ }
+
+ public void testMetadata() throws Exception
+ {
+ ArtifactRepository remoteRepository = remoteRepository();
+
+ ArtifactRepository localRepository = localRepository();
+
+ Artifact a = createRemoteArtifact( "a", "0.0.1-SNAPSHOT" );
+ RepositoryMetadata metadata = new ArtifactRepositoryMetadata( a );
+
+ File file = new File( localRepository.getBasedir(),
+ localRepository.pathOfLocalRepositoryMetadata( metadata, localRepository ) );
+ file.delete();
+
+ File touchFile = updateCheckManager.getTouchfile( metadata, file );
+ touchFile.delete();
+
+ assertTrue( updateCheckManager.isUpdateRequired( metadata, remoteRepository, file ) );
+
+ file.getParentFile().mkdirs();
+ file.createNewFile();
+ updateCheckManager.touch( metadata, remoteRepository, file );
+
+ assertFalse( updateCheckManager.isUpdateRequired( metadata, remoteRepository, file ) );
+
+ assertNotNull( updateCheckManager.readLastUpdated( touchFile, updateCheckManager.getMetadataKey( remoteRepository, file ) ) );
+ }
+
+ public void testMissingMetadata() throws Exception
+ {
+ ArtifactRepository remoteRepository = remoteRepository();
+
+ ArtifactRepository localRepository = localRepository();
+
+ Artifact a = createRemoteArtifact( "a", "0.0.1-SNAPSHOT" );
+ RepositoryMetadata metadata = new ArtifactRepositoryMetadata( a );
+
+ File file = new File( localRepository.getBasedir(),
+ localRepository.pathOfLocalRepositoryMetadata( metadata, localRepository ) );
+ file.delete();
+
+ File touchFile = updateCheckManager.getTouchfile( metadata, file );
+ touchFile.delete();
+
+ assertTrue( updateCheckManager.isUpdateRequired( metadata, remoteRepository, file ) );
+
+ updateCheckManager.touch( metadata, remoteRepository, file );
+
+ assertFalse( updateCheckManager.isUpdateRequired( metadata, remoteRepository, file ) );
+
+ assertNotNull( updateCheckManager.readLastUpdated( touchFile, updateCheckManager.getMetadataKey( remoteRepository, file ) ) );
+ }
+
+ public void testArtifactTouchFileName() throws Exception
+ {
+ ArtifactFactory artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
+
+ ArtifactRepository localRepository = localRepository();
+
+ Artifact a = artifactFactory.createArtifactWithClassifier( "groupdId", "a", "0.0.1-SNAPSHOT", "jar", null );
+ File file = new File( localRepository.getBasedir(),
+ localRepository.pathOf( a ) );
+ a.setFile( file );
+
+ assertEquals( "a-0.0.1-SNAPSHOT.jar.lastUpdated", updateCheckManager.getTouchfile( a ).getName() );
+
+ a = artifactFactory.createArtifactWithClassifier( "groupdId", "a", "0.0.1-SNAPSHOT", "jar", "classifier" );
+ file = new File( localRepository.getBasedir(),
+ localRepository.pathOf( a ) );
+ a.setFile( file );
+
+ assertEquals( "a-0.0.1-SNAPSHOT-classifier.jar.lastUpdated", updateCheckManager.getTouchfile( a ).getName() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java
new file mode 100644
index 00000000..068c0e0a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java
@@ -0,0 +1,422 @@
+package org.apache.maven.repository.legacy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.repository.legacy.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.UnsupportedProtocolException;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.events.TransferEvent;
+import org.apache.maven.wagon.events.TransferListener;
+import org.apache.maven.wagon.observers.AbstractTransferListener;
+import org.apache.maven.wagon.observers.Debug;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.FileUtils;
+
+/**
+ * @author <a href="michal.maczka@dimatics.com">Michal Maczka</a>
+ */
+public class DefaultWagonManagerTest
+ extends PlexusTestCase
+{
+ private DefaultWagonManager wagonManager;
+
+ private TransferListener transferListener = new Debug();
+
+ private ArtifactFactory artifactFactory;
+
+ private ArtifactRepositoryFactory artifactRepositoryFactory;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ wagonManager = (DefaultWagonManager) lookup( WagonManager.class );
+ artifactFactory = lookup( ArtifactFactory.class );
+ artifactRepositoryFactory = lookup( ArtifactRepositoryFactory.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ wagonManager = null;
+ artifactFactory = null;
+ super.tearDown();
+ }
+
+ public void testUnnecessaryRepositoryLookup()
+ throws Exception
+ {
+ Artifact artifact = createTestPomArtifact( "target/test-data/get-missing-pom" );
+
+ List<ArtifactRepository> repos = new ArrayList<ArtifactRepository>();
+ repos.add( artifactRepositoryFactory.createArtifactRepository( "repo1", "string://url1",
+ new ArtifactRepositoryLayoutStub(), null, null ) );
+ repos.add( artifactRepositoryFactory.createArtifactRepository( "repo2", "string://url2",
+ new ArtifactRepositoryLayoutStub(), null, null ) );
+
+ StringWagon wagon = (StringWagon) wagonManager.getWagon( "string" );
+ wagon.addExpectedContent( repos.get( 0 ).getLayout().pathOf( artifact ), "expected" );
+ wagon.addExpectedContent( repos.get( 1 ).getLayout().pathOf( artifact ), "expected" );
+
+ class TransferListener
+ extends AbstractTransferListener
+ {
+ public List<TransferEvent> events = new ArrayList<TransferEvent>();
+
+ @Override
+ public void transferInitiated( TransferEvent transferEvent )
+ {
+ events.add( transferEvent );
+ }
+ }
+
+ TransferListener listener = new TransferListener();
+ wagonManager.getArtifact( artifact, repos, listener, false );
+ assertEquals( 1, listener.events.size() );
+ }
+
+ public void testGetMissingJar() throws TransferFailedException, UnsupportedProtocolException, IOException
+ {
+ Artifact artifact = createTestArtifact( "target/test-data/get-missing-jar", "jar" );
+
+ ArtifactRepository repo = createStringRepo();
+
+ try
+ {
+ wagonManager.getArtifact( artifact, repo, null, false );
+
+ fail();
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ assertTrue( true );
+ }
+
+ assertFalse( artifact.getFile().exists() );
+ }
+
+ public void testGetMissingJarForced() throws TransferFailedException, UnsupportedProtocolException, IOException
+ {
+ Artifact artifact = createTestArtifact( "target/test-data/get-missing-jar", "jar" );
+
+ ArtifactRepository repo = createStringRepo();
+
+ try
+ {
+ wagonManager.getArtifact( artifact, repo, null, false );
+
+ fail();
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ assertTrue( true );
+ }
+
+ assertFalse( artifact.getFile().exists() );
+ }
+
+ public void testGetRemoteJar()
+ throws TransferFailedException, ResourceDoesNotExistException, UnsupportedProtocolException, IOException,
+ AuthorizationException
+ {
+ Artifact artifact = createTestArtifact( "target/test-data/get-remote-jar", "jar" );
+
+ ArtifactRepository repo = createStringRepo();
+
+ StringWagon wagon = (StringWagon) wagonManager.getWagon( "string" );
+ wagon.addExpectedContent( repo.getLayout().pathOf( artifact ), "expected" );
+
+ wagonManager.getArtifact( artifact, repo, null, false );
+
+ assertTrue( artifact.getFile().exists() );
+ assertEquals( "expected", FileUtils.fileRead( artifact.getFile(), "UTF-8" ) );
+ }
+
+ private Artifact createTestPomArtifact( String directory )
+ throws IOException
+ {
+ File testData = getTestFile( directory );
+ FileUtils.deleteDirectory( testData );
+ testData.mkdirs();
+
+ Artifact artifact = artifactFactory.createProjectArtifact( "test", "test", "1.0" );
+ artifact.setFile( new File( testData, "test-1.0.pom" ) );
+ assertFalse( artifact.getFile().exists() );
+ return artifact;
+ }
+
+ private Artifact createTestArtifact( String directory, String type )
+ throws IOException
+ {
+ return createTestArtifact( directory, "1.0", type );
+ }
+
+ private Artifact createTestArtifact( String directory, String version, String type )
+ throws IOException
+ {
+ File testData = getTestFile( directory );
+ FileUtils.deleteDirectory( testData );
+ testData.mkdirs();
+
+ Artifact artifact = artifactFactory.createBuildArtifact( "test", "test", version, type );
+ artifact.setFile( new File( testData, "test-" + version + "." + artifact.getArtifactHandler().getExtension() ) );
+ assertFalse( artifact.getFile().exists() );
+ return artifact;
+ }
+
+ private ArtifactRepository createStringRepo()
+ {
+ return artifactRepositoryFactory.createArtifactRepository( "id", "string://url", new ArtifactRepositoryLayoutStub(), null, null );
+ }
+
+ /**
+ * Build an ArtifactRepository object.
+ *
+ * @param id
+ * @param url
+ * @return
+ */
+ private ArtifactRepository getRepo( String id, String url )
+ {
+ return artifactRepositoryFactory.createArtifactRepository( id, url, new DefaultRepositoryLayout(), null, null );
+ }
+
+ /**
+ * Build an ArtifactRepository object.
+ *
+ * @param id
+ * @return
+ */
+ private ArtifactRepository getRepo( String id )
+ {
+ return getRepo( id, "http://something" );
+ }
+
+ public void testDefaultWagonManager()
+ throws Exception
+ {
+ assertWagon( "a" );
+
+ assertWagon( "b" );
+
+ assertWagon( "c" );
+
+ assertWagon( "string" );
+
+ try
+ {
+ assertWagon( "d" );
+
+ fail( "Expected :" + UnsupportedProtocolException.class.getName() );
+ }
+ catch ( UnsupportedProtocolException e )
+ {
+ // ok
+ assertTrue( true );
+ }
+ }
+
+ /**
+ * Check that transfer listeners are properly removed after getArtifact and putArtifact
+ */
+ public void testWagonTransferListenerRemovedAfterGetArtifactAndPutArtifact()
+ throws Exception
+ {
+ Artifact artifact = createTestArtifact( "target/test-data/transfer-listener", "jar" );
+ ArtifactRepository repo = createStringRepo();
+ StringWagon wagon = (StringWagon) wagonManager.getWagon( "string" );
+ wagon.addExpectedContent( repo.getLayout().pathOf( artifact ), "expected" );
+
+ /* getArtifact */
+ assertFalse( "Transfer listener is registered before test",
+ wagon.getTransferEventSupport().hasTransferListener( transferListener ) );
+ wagonManager.getArtifact( artifact, repo, transferListener, false );
+ assertFalse( "Transfer listener still registered after getArtifact",
+ wagon.getTransferEventSupport().hasTransferListener( transferListener ) );
+
+ /* putArtifact */
+ File sampleFile = getTestFile( "target/test-file" );
+ FileUtils.fileWrite( sampleFile.getAbsolutePath(), "sample file" );
+
+ assertFalse( "Transfer listener is registered before test", wagon.getTransferEventSupport().hasTransferListener( transferListener ) );
+ wagonManager.putArtifact( sampleFile, artifact, repo, transferListener );
+ assertFalse( "Transfer listener still registered after putArtifact", wagon.getTransferEventSupport().hasTransferListener( transferListener ) );
+ }
+
+ /**
+ * Checks the verification of checksums.
+ */
+ public void xtestChecksumVerification()
+ throws Exception
+ {
+ ArtifactRepositoryPolicy policy = new ArtifactRepositoryPolicy( true, ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS, ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL );
+
+ ArtifactRepository repo = artifactRepositoryFactory.createArtifactRepository( "id", "string://url", new ArtifactRepositoryLayoutStub(), policy, policy );
+
+ Artifact artifact =
+ new DefaultArtifact( "sample.group", "sample-art", VersionRange.createFromVersion( "1.0" ), "scope",
+ "jar", "classifier", null );
+ artifact.setFile( getTestFile( "target/sample-art" ) );
+
+ StringWagon wagon = (StringWagon) wagonManager.getWagon( "string" );
+
+ wagon.clearExpectedContent();
+ wagon.addExpectedContent( "path", "lower-case-checksum" );
+ wagon.addExpectedContent( "path.sha1", "2a25dc564a3b34f68237fc849066cbc7bb7a36a1" );
+
+ try
+ {
+ wagonManager.getArtifact( artifact, repo, null, false );
+ }
+ catch ( ChecksumFailedException e )
+ {
+ fail( "Checksum verification did not pass: " + e.getMessage() );
+ }
+
+ wagon.clearExpectedContent();
+ wagon.addExpectedContent( "path", "upper-case-checksum" );
+ wagon.addExpectedContent( "path.sha1", "B7BB97D7D0B9244398D9B47296907F73313663E6" );
+
+ try
+ {
+ wagonManager.getArtifact( artifact, repo, null, false );
+ }
+ catch ( ChecksumFailedException e )
+ {
+ fail( "Checksum verification did not pass: " + e.getMessage() );
+ }
+
+ wagon.clearExpectedContent();
+ wagon.addExpectedContent( "path", "expected-failure" );
+ wagon.addExpectedContent( "path.sha1", "b7bb97d7d0b9244398d9b47296907f73313663e6" );
+
+ try
+ {
+ wagonManager.getArtifact( artifact, repo, null, false );
+ fail( "Checksum verification did not fail" );
+ }
+ catch ( ChecksumFailedException e )
+ {
+ // expected
+ }
+
+ wagon.clearExpectedContent();
+ wagon.addExpectedContent( "path", "lower-case-checksum" );
+ wagon.addExpectedContent( "path.md5", "50b2cf50a103a965efac62b983035cac" );
+
+ try
+ {
+ wagonManager.getArtifact( artifact, repo, null, false );
+ }
+ catch ( ChecksumFailedException e )
+ {
+ fail( "Checksum verification did not pass: " + e.getMessage() );
+ }
+
+ wagon.clearExpectedContent();
+ wagon.addExpectedContent( "path", "upper-case-checksum" );
+ wagon.addExpectedContent( "path.md5", "842F568FCCFEB7E534DC72133D42FFDC" );
+
+ try
+ {
+ wagonManager.getArtifact( artifact, repo, null, false );
+ }
+ catch ( ChecksumFailedException e )
+ {
+ fail( "Checksum verification did not pass: " + e.getMessage() );
+ }
+
+ wagon.clearExpectedContent();
+ wagon.addExpectedContent( "path", "expected-failure" );
+ wagon.addExpectedContent( "path.md5", "b7bb97d7d0b9244398d9b47296907f73313663e6" );
+
+ try
+ {
+ wagonManager.getArtifact( artifact, repo, null, false );
+ fail( "Checksum verification did not fail" );
+ }
+ catch ( ChecksumFailedException e )
+ {
+ // expected
+ }
+ }
+
+ public void testPerLookupInstantiation()
+ throws Exception
+ {
+ String protocol = "perlookup";
+
+ Wagon one = wagonManager.getWagon( protocol );
+ Wagon two = wagonManager.getWagon( protocol );
+
+ assertNotSame( one, two );
+ }
+
+ private void assertWagon( String protocol )
+ throws Exception
+ {
+ Wagon wagon = wagonManager.getWagon( protocol );
+
+ assertNotNull( "Check wagon, protocol=" + protocol, wagon );
+ }
+
+ private final class ArtifactRepositoryLayoutStub
+ implements ArtifactRepositoryLayout
+ {
+ public String getId()
+ {
+ return "test";
+ }
+
+ public String pathOfRemoteRepositoryMetadata( ArtifactMetadata metadata )
+ {
+ return "path";
+ }
+
+ public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+ {
+ return "path";
+ }
+
+ public String pathOf( Artifact artifact )
+ {
+ return "path";
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/LegacyRepositorySystemTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/LegacyRepositorySystemTest.java
new file mode 100644
index 00000000..f34c05fb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/LegacyRepositorySystemTest.java
@@ -0,0 +1,88 @@
+package org.apache.maven.repository.legacy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import java.io.File;
+import java.util.Arrays;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.Authentication;
+import org.apache.maven.repository.RepositorySystem;
+import org.apache.maven.settings.Server;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusTestCase;
+
+/**
+ * Tests {@link LegacyRepositorySystem}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class LegacyRepositorySystemTest
+ extends PlexusTestCase
+{
+ private RepositorySystem repositorySystem;
+
+ @Override
+ protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration )
+ {
+ super.customizeContainerConfiguration( containerConfiguration );
+ containerConfiguration.setAutoWiring( true );
+ containerConfiguration.setClassPathScanning( PlexusConstants.SCANNING_INDEX );
+ }
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ repositorySystem = lookup( RepositorySystem.class, "default" );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ repositorySystem = null;
+ super.tearDown();
+ }
+
+ public void testThatLocalRepositoryWithSpacesIsProperlyHandled()
+ throws Exception
+ {
+ File basedir = new File( "target/spacy path" ).getAbsoluteFile();
+ ArtifactRepository repo = repositorySystem.createLocalRepository( basedir );
+ assertEquals( basedir, new File( repo.getBasedir() ) );
+ }
+
+ public void testAuthenticationHandling()
+ throws Exception
+ {
+ Server server = new Server();
+ server.setId( "repository" );
+ server.setUsername( "jason" );
+ server.setPassword( "abc123" );
+
+ ArtifactRepository repository =
+ repositorySystem.createArtifactRepository( "repository", "http://foo", null, null, null );
+ repositorySystem.injectAuthentication( Arrays.asList( repository ), Arrays.asList( server ) );
+ Authentication authentication = repository.getAuthentication();
+ assertNotNull( authentication );
+ assertEquals( "jason", authentication.getUsername() );
+ assertEquals( "abc123", authentication.getPassword() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/PerLookupWagon.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/PerLookupWagon.java
new file mode 100644
index 00000000..051f3e46
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/PerLookupWagon.java
@@ -0,0 +1,38 @@
+package org.apache.maven.repository.legacy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.wagon.Wagon;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Wagon with per-lookup instantiation strategy.
+ */
+@Component( role = Wagon.class, hint = "perlookup", instantiationStrategy = "per-lookup" )
+public class PerLookupWagon
+ extends WagonMock
+{
+
+ public String[] getSupportedProtocols()
+ {
+ return new String[] { "perlookup" };
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/StringWagon.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/StringWagon.java
new file mode 100644
index 00000000..d0325db4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/StringWagon.java
@@ -0,0 +1,107 @@
+package org.apache.maven.repository.legacy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.maven.wagon.ConnectionException;
+import org.apache.maven.wagon.InputData;
+import org.apache.maven.wagon.OutputData;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.StreamWagon;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.authentication.AuthenticationException;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.resource.Resource;
+import org.codehaus.plexus.component.annotations.Component;
+
+@Component(role=Wagon.class,hint="string")
+public class StringWagon
+ extends StreamWagon
+{
+ private Map<String, String> expectedContent = new HashMap<String, String>();
+
+ public void addExpectedContent( String resourceName, String expectedContent )
+ {
+ this.expectedContent.put( resourceName, expectedContent );
+ }
+
+ public String[] getSupportedProtocols()
+ {
+ return new String[] { "string" };
+ }
+
+ @Override
+ public void closeConnection()
+ throws ConnectionException
+ {
+ }
+
+ @Override
+ public void fillInputData( InputData inputData )
+ throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+ {
+ Resource resource = inputData.getResource();
+
+ String content = expectedContent.get( resource.getName() );
+
+ if ( content != null )
+ {
+ resource.setContentLength( content.length() );
+ resource.setLastModified( System.currentTimeMillis() );
+
+ try
+ {
+ inputData.setInputStream( new ByteArrayInputStream( content.getBytes( "UTF-8" ) ) );
+ }
+ catch ( UnsupportedEncodingException e )
+ {
+ throw new Error( "broken JVM", e );
+ }
+ }
+ else
+ {
+ throw new ResourceDoesNotExistException( "No content provided for " + resource.getName() );
+ }
+ }
+
+ @Override
+ public void fillOutputData( OutputData outputData )
+ throws TransferFailedException
+ {
+ outputData.setOutputStream( new ByteArrayOutputStream() );
+ }
+
+ @Override
+ protected void openConnectionInternal()
+ throws ConnectionException, AuthenticationException
+ {
+ }
+
+ public void clearExpectedContent()
+ {
+ expectedContent.clear();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonA.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonA.java
new file mode 100644
index 00000000..601eefac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonA.java
@@ -0,0 +1,39 @@
+package org.apache.maven.repository.legacy;
+
+import org.apache.maven.wagon.Wagon;
+import org.codehaus.plexus.component.annotations.Component;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Wagon for testing, for protocol <code>a</code>
+ *
+ * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ */
+@Component(role=Wagon.class,hint="a")
+public class WagonA
+ extends WagonMock
+{
+ public String[] getSupportedProtocols()
+ {
+ return new String[]{ "a" };
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonB.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonB.java
new file mode 100644
index 00000000..ecaef642
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonB.java
@@ -0,0 +1,39 @@
+package org.apache.maven.repository.legacy;
+
+import org.apache.maven.wagon.Wagon;
+import org.codehaus.plexus.component.annotations.Component;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Wagon for testing, for protocols <code>b1</code> and <code>b2</code>
+ *
+ * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ */
+@Component(role=Wagon.class,hint="b")
+public class WagonB
+ extends WagonMock
+{
+ public String[] getSupportedProtocols()
+ {
+ return new String[]{ "b1", "b2" };
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonC.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonC.java
new file mode 100644
index 00000000..29316ed5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonC.java
@@ -0,0 +1,39 @@
+package org.apache.maven.repository.legacy;
+
+import org.apache.maven.wagon.Wagon;
+import org.codehaus.plexus.component.annotations.Component;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Wagon for testing, for protocol <code>c</code>
+ *
+ * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ */
+@Component(role=Wagon.class,hint="c")
+public class WagonC
+ extends WagonMock
+{
+ public String[] getSupportedProtocols()
+ {
+ return new String[]{ "c" };
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonMock.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonMock.java
new file mode 100644
index 00000000..c5163609
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonMock.java
@@ -0,0 +1,50 @@
+package org.apache.maven.repository.legacy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.wagon.providers.file.FileWagon;
+
+/**
+ * Mock of a Wagon for testing
+ *
+ * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
+ */
+public class WagonMock
+ extends FileWagon
+{
+
+ /**
+ * A field that can be configured in the Wagon
+ *
+ * @component.configuration default="configurableField"
+ */
+ private String configurableField = null;
+
+ public void setConfigurableField( String configurableField )
+ {
+ this.configurableField = configurableField;
+ }
+
+ public String getConfigurableField()
+ {
+ return configurableField;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java
new file mode 100644
index 00000000..58dd3fa2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java
@@ -0,0 +1,984 @@
+package org.apache.maven.repository.legacy.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.metadata.ResolutionGroup;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.artifact.resolver.CyclicDependencyException;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.ExclusionSetFilter;
+import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.repository.legacy.metadata.MetadataResolutionRequest;
+import org.codehaus.plexus.PlexusTestCase;
+
+/**
+ * Test the default artifact collector.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class DefaultArtifactCollectorTest
+ extends PlexusTestCase
+{
+ private LegacyArtifactCollector artifactCollector;
+
+ private ArtifactFactory artifactFactory;
+
+ private ArtifactSpec projectArtifact;
+
+ private Source source;
+
+ private static final String GROUP_ID = "test";
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ source = new Source();
+ artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
+ artifactCollector = lookup( LegacyArtifactCollector.class );
+
+ projectArtifact = createArtifactSpec( "project", "1.0", null );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ artifactCollector = null;
+ artifactFactory = null;
+ super.tearDown();
+ }
+
+ // works, but we don't fail on cycles presently
+ public void disabledtestCircularDependencyNotIncludingCurrentProject()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b = a.addDependency( "b", "1.0" );
+ b.addDependency( "a", "1.0" );
+ try
+ {
+ collect( a );
+ fail( "Should have failed on cyclic dependency not involving project" );
+ }
+ catch ( CyclicDependencyException expected )
+ {
+ assertTrue( true );
+ }
+ }
+
+ // works, but we don't fail on cycles presently
+ public void disabledtestCircularDependencyIncludingCurrentProject()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b = a.addDependency( "b", "1.0" );
+ b.addDependency( "project", "1.0" );
+ try
+ {
+ collect( a );
+ fail( "Should have failed on cyclic dependency involving project" );
+ }
+ catch ( CyclicDependencyException expected )
+ {
+ assertTrue( true );
+ }
+ }
+
+ public void testResolveWithFilter()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b = a.addDependency( "b", "1.0" );
+ ArtifactSpec c = a.addDependency( "c", "3.0" );
+
+ b.addDependency( "c", "2.0" );
+ ArtifactSpec d = b.addDependency( "d", "4.0" );
+
+ ArtifactResolutionResult res = collect( a );
+ assertEquals( "Check artifact list",
+ createSet( new Object[] { a.artifact, b.artifact, c.artifact, d.artifact } ), res.getArtifacts() );
+
+ ArtifactFilter filter = new ExclusionSetFilter( new String[] { "b" } );
+ res = collect( a, filter );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, c.artifact } ), res.getArtifacts() );
+ }
+
+ public void testResolveCorrectDependenciesWhenDifferentDependenciesOnNearest()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b = a.addDependency( "b", "1.0" );
+ ArtifactSpec c2 = b.addDependency( "c", "2.0" );
+ c2.addDependency( "d", "1.0" );
+
+ ArtifactSpec e = createArtifactSpec( "e", "1.0" );
+ ArtifactSpec c1 = e.addDependency( "c", "1.0" );
+ ArtifactSpec f = c1.addDependency( "f", "1.0" );
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact, e.artifact } ) );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, b.artifact, e.artifact, c1.artifact,
+ f.artifact } ), res.getArtifacts() );
+ assertEquals( "Check version", "1.0", getArtifact( "c", res.getArtifacts() ).getVersion() );
+ }
+
+ public void disabledtestResolveCorrectDependenciesWhenDifferentDependenciesOnNewest()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ // TODO: use newest conflict resolver
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b = a.addDependency( "b", "1.0" );
+ ArtifactSpec c2 = b.addDependency( "c", "2.0" );
+ ArtifactSpec d = c2.addDependency( "d", "1.0" );
+
+ ArtifactSpec e = createArtifactSpec( "e", "1.0" );
+ ArtifactSpec c1 = e.addDependency( "c", "1.0" );
+ c1.addDependency( "f", "1.0" );
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact, e.artifact } ) );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, b.artifact, e.artifact, c2.artifact,
+ d.artifact } ), res.getArtifacts() );
+ assertEquals( "Check version", "2.0", getArtifact( "c", res.getArtifacts() ).getVersion() );
+ }
+
+ public void disabledtestResolveCorrectDependenciesWhenDifferentDependenciesOnNewestVersionReplaced()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ // TODO: use newest conflict resolver
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b1 = a.addDependency( "b", "1.0" );
+ ArtifactSpec c = a.addDependency( "c", "1.0" );
+ ArtifactSpec d2 = b1.addDependency( "d", "2.0" );
+ d2.addDependency( "h", "1.0" );
+ ArtifactSpec d1 = c.addDependency( "d", "1.0" );
+ ArtifactSpec b2 = c.addDependency( "b", "2.0" );
+ ArtifactSpec e = b2.addDependency( "e", "1.0" );
+ ArtifactSpec g = d1.addDependency( "g", "1.0" );
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact } ) );
+ Object[] artifacts = new Object[] { a.artifact, c.artifact, d1.artifact, b2.artifact, e.artifact, g.artifact };
+ assertEquals( "Check artifact list", createSet( artifacts ), res.getArtifacts() );
+ assertEquals( "Check version", "1.0", getArtifact( "d", res.getArtifacts() ).getVersion() );
+ assertEquals( "Check version", "2.0", getArtifact( "b", res.getArtifacts() ).getVersion() );
+ }
+
+ public void testResolveNearestNewestIsNearest()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b = a.addDependency( "b", "1.0" );
+ ArtifactSpec c = a.addDependency( "c", "3.0" );
+
+ b.addDependency( "c", "2.0" );
+
+ ArtifactResolutionResult res = collect( a );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, b.artifact, c.artifact } ),
+ res.getArtifacts() );
+ assertEquals( "Check version", "3.0", getArtifact( "c", res.getArtifacts() ).getVersion() );
+ }
+
+ public void testResolveNearestOldestIsNearest()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b = a.addDependency( "b", "1.0" );
+ ArtifactSpec c = a.addDependency( "c", "2.0" );
+
+ b.addDependency( "c", "3.0" );
+
+ ArtifactResolutionResult res = collect( a );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, b.artifact, c.artifact } ),
+ res.getArtifacts() );
+ assertEquals( "Check version", "2.0", getArtifact( "c", res.getArtifacts() ).getVersion() );
+ }
+
+ public void testResolveLocalNewestIsLocal()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ a.addDependency( "b", "2.0" );
+ ArtifactSpec b = createArtifactSpec( "b", "3.0" );
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact, b.artifact } ) );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, b.artifact } ), res.getArtifacts() );
+ assertEquals( "Check version", "3.0", getArtifact( "b", res.getArtifacts() ).getVersion() );
+ }
+
+ public void testResolveLocalOldestIsLocal()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ a.addDependency( "b", "3.0" );
+ ArtifactSpec b = createArtifactSpec( "b", "2.0" );
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact, b.artifact } ) );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, b.artifact } ), res.getArtifacts() );
+ assertEquals( "Check version", "2.0", getArtifact( "b", res.getArtifacts() ).getVersion() );
+ }
+
+ public void testResolveLocalWithNewerVersionButLesserScope()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "commons-logging", "1.0" );
+ a.addDependency( "junit", "3.7" );
+ ArtifactSpec b = createArtifactSpec( "junit", "3.8.1", Artifact.SCOPE_TEST );
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact, b.artifact } ) );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, b.artifact } ), res.getArtifacts() );
+ assertEquals( "Check version", "3.8.1", getArtifact( "junit", res.getArtifacts() ).getVersion() );
+ assertEquals( "Check artifactScope", Artifact.SCOPE_TEST, getArtifact( "junit", res.getArtifacts() ).getScope() );
+ }
+
+ public void testResolveLocalWithNewerVersionButLesserScopeResolvedFirst()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec b = createArtifactSpec( "junit", "3.8.1", Artifact.SCOPE_TEST );
+ ArtifactSpec a = createArtifactSpec( "commons-logging", "1.0" );
+ a.addDependency( "junit", "3.7" );
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact, b.artifact } ) );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, b.artifact } ), res.getArtifacts() );
+ assertEquals( "Check version", "3.8.1", getArtifact( "junit", res.getArtifacts() ).getVersion() );
+ assertEquals( "Check artifactScope", Artifact.SCOPE_TEST, getArtifact( "junit", res.getArtifacts() ).getScope() );
+ }
+
+ public void testResolveNearestWithRanges()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b = a.addDependency( "b", "1.0" );
+ ArtifactSpec c = a.addDependency( "c", "2.0" );
+
+ b.addDependency( "c", "[1.0,3.0]" );
+
+ ArtifactResolutionResult res = collect( a );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, b.artifact, c.artifact } ),
+ res.getArtifacts() );
+ assertEquals( "Check version", "2.0", getArtifact( "c", res.getArtifacts() ).getVersion() );
+ }
+
+ public void testResolveRangeWithManagedVersion()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b = a.addDependency( "b", "[1.0,3.0]" );
+
+ ArtifactSpec managedB = createArtifactSpec( "b", "5.0" );
+
+ ArtifactResolutionResult res = collect( a, managedB.artifact );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, managedB.artifact } ),
+ res.getArtifacts() );
+ assertEquals( "Check version", "5.0", getArtifact( "b", res.getArtifacts() ).getVersion() );
+ }
+
+ public void testCompatibleRanges()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b = a.addDependency( "b", "1.0" );
+ a.addDependency( "c", "[2.0,2.5]" );
+ b.addDependency( "c", "[1.0,3.0]" );
+ ArtifactSpec c = createArtifactSpec( "c", "2.5" );
+
+ ArtifactResolutionResult res = collect( a );
+
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, b.artifact, c.artifact } ),
+ res.getArtifacts() );
+ assertEquals( "Check version", "2.5", getArtifact( "c", res.getArtifacts() ).getVersion() );
+ }
+
+ public void testIncompatibleRanges()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b = a.addDependency( "b", "1.0" );
+ a.addDependency( "c", "[2.4,3.0]" );
+
+ b.addDependency( "c", "[1.0,2.0]" );
+
+ ArtifactResolutionResult res = collect( a );
+
+ assertTrue( res.hasVersionRangeViolations() );
+ }
+
+ public void testUnboundedRangeWhenVersionUnavailable()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b = a.addDependency( "b", "1.0" );
+ a.addDependency( "c", "[2.0,]" );
+ b.addDependency( "c", "[1.0,]" );
+
+ ArtifactResolutionResult res = collect( a );
+
+ assertTrue( res.hasVersionRangeViolations() );
+ }
+
+ public void testUnboundedRangeBelowLastRelease()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ createArtifactSpec( "c", "1.5" );
+ ArtifactSpec c = createArtifactSpec( "c", "2.0" );
+ createArtifactSpec( "c", "1.1" );
+ a.addDependency( "c", "[1.0,)" );
+
+ ArtifactResolutionResult res = collect( a );
+
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, c.artifact } ), res.getArtifacts() );
+ assertEquals( "Check version", "2.0", getArtifact( "c", res.getArtifacts() ).getVersion() );
+ }
+
+ public void testUnboundedRangeAboveLastRelease()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ createArtifactSpec( "c", "2.0" );
+ a.addDependency( "c", "[10.0,)" );
+
+ ArtifactResolutionResult res = collect( a );
+
+ assertTrue( res.hasVersionRangeViolations() );
+ }
+
+ public void testResolveManagedVersion()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ a.addDependency( "b", "3.0", Artifact.SCOPE_RUNTIME );
+
+ Artifact managedVersion = createArtifactSpec( "b", "5.0" ).artifact;
+ Artifact modifiedB = createArtifactSpec( "b", "5.0", Artifact.SCOPE_RUNTIME ).artifact;
+
+ ArtifactResolutionResult res = collect( a, managedVersion );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, modifiedB } ), res.getArtifacts() );
+ }
+
+ public void testCollectChangesVersionOfOriginatingArtifactIfInDependencyManagementHasDifferentVersion()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+
+ Artifact artifact = projectArtifact.artifact;
+ Artifact managedVersion = createArtifactSpec( artifact.getArtifactId(), "2.0" ).artifact;
+
+ ArtifactResolutionResult result = collect( a, managedVersion );
+
+ assertEquals( "collect has modified version in originating artifact", "1.0", artifact.getVersion() );
+
+ Artifact resolvedArtifact = result.getArtifacts().iterator().next();
+
+ assertEquals( "Resolved version don't match original artifact version", "1.0", resolvedArtifact.getVersion() );
+ }
+
+ public void testResolveCompileScopeOverTestScope()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec c = createArtifactSpec( "c", "3.0", Artifact.SCOPE_TEST );
+
+ a.addDependency( "c", "2.0", Artifact.SCOPE_COMPILE );
+
+ Artifact modifiedC = createArtifactSpec( "c", "3.0", Artifact.SCOPE_COMPILE ).artifact;
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact, c.artifact } ) );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, modifiedC } ), res.getArtifacts() );
+ Artifact artifact = getArtifact( "c", res.getArtifacts() );
+ // local wins now, and irrelevant if not local as test/provided aren't transitive
+ // assertEquals( "Check artifactScope", Artifact.SCOPE_COMPILE, artifact.getArtifactScope() );
+ assertEquals( "Check artifactScope", Artifact.SCOPE_TEST, artifact.getScope() );
+ }
+
+ public void testResolveRuntimeScopeOverTestScope()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec c = createArtifactSpec( "c", "3.0", Artifact.SCOPE_TEST );
+
+ a.addDependency( "c", "2.0", Artifact.SCOPE_RUNTIME );
+
+ Artifact modifiedC = createArtifactSpec( "c", "3.0", Artifact.SCOPE_RUNTIME ).artifact;
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact, c.artifact } ) );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, modifiedC } ), res.getArtifacts() );
+ Artifact artifact = getArtifact( "c", res.getArtifacts() );
+ // local wins now, and irrelevant if not local as test/provided aren't transitive
+ // assertEquals( "Check artifactScope", Artifact.SCOPE_RUNTIME, artifact.getArtifactScope() );
+ assertEquals( "Check artifactScope", Artifact.SCOPE_TEST, artifact.getScope() );
+ }
+
+ public void testResolveCompileScopeOverRuntimeScope()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec root = createArtifactSpec( "root", "1.0" );
+ ArtifactSpec a = root.addDependency( "a", "1.0" );
+ root.addDependency( "c", "3.0", Artifact.SCOPE_RUNTIME );
+
+ a.addDependency( "c", "2.0", Artifact.SCOPE_COMPILE );
+
+ Artifact modifiedC = createArtifactSpec( "c", "3.0", Artifact.SCOPE_COMPILE ).artifact;
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { root.artifact } ) );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, root.artifact, modifiedC } ),
+ res.getArtifacts() );
+ Artifact artifact = getArtifact( "c", res.getArtifacts() );
+ assertEquals( "Check artifactScope", Artifact.SCOPE_COMPILE, artifact.getScope() );
+ }
+
+ public void testResolveCompileScopeOverProvidedScope()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec c = createArtifactSpec( "c", "3.0", Artifact.SCOPE_PROVIDED );
+
+ a.addDependency( "c", "2.0", Artifact.SCOPE_COMPILE );
+
+ Artifact modifiedC = createArtifactSpec( "c", "3.0", Artifact.SCOPE_COMPILE ).artifact;
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact, c.artifact } ) );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, modifiedC } ), res.getArtifacts() );
+ Artifact artifact = getArtifact( "c", res.getArtifacts() );
+ // local wins now, and irrelevant if not local as test/provided aren't transitive
+ // assertEquals( "Check artifactScope", Artifact.SCOPE_COMPILE, artifact.getArtifactScope() );
+ assertEquals( "Check artifactScope", Artifact.SCOPE_PROVIDED, artifact.getScope() );
+ }
+
+ public void testResolveRuntimeScopeOverProvidedScope()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec c = createArtifactSpec( "c", "3.0", Artifact.SCOPE_PROVIDED );
+
+ a.addDependency( "c", "2.0", Artifact.SCOPE_RUNTIME );
+
+ Artifact modifiedC = createArtifactSpec( "c", "3.0", Artifact.SCOPE_RUNTIME ).artifact;
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact, c.artifact } ) );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, modifiedC } ), res.getArtifacts() );
+ Artifact artifact = getArtifact( "c", res.getArtifacts() );
+ // local wins now, and irrelevant if not local as test/provided aren't transitive
+ // assertEquals( "Check artifactScope", Artifact.SCOPE_RUNTIME, artifact.getArtifactScope() );
+ assertEquals( "Check artifactScope", Artifact.SCOPE_PROVIDED, artifact.getScope() );
+ }
+
+ public void testProvidedScopeNotTransitive()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0", Artifact.SCOPE_PROVIDED );
+ ArtifactSpec b = createArtifactSpec( "b", "1.0" );
+ b.addDependency( "c", "3.0", Artifact.SCOPE_PROVIDED );
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact, b.artifact } ) );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, b.artifact } ), res.getArtifacts() );
+ }
+
+ public void testOptionalNotTransitive()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b = createArtifactSpec( "b", "1.0" );
+ b.addDependency( "c", "3.0", true );
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact, b.artifact } ) );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, b.artifact } ), res.getArtifacts() );
+ }
+
+ public void testOptionalIncludedAtRoot()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+
+ ArtifactSpec b = createArtifactSpec( "b", "1.0", true );
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact, b.artifact } ) );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, b.artifact } ), res.getArtifacts() );
+ }
+
+ public void testScopeUpdate()
+ throws InvalidVersionSpecificationException, ArtifactResolutionException
+ {
+ /* farthest = compile */
+ checkScopeUpdate( Artifact.SCOPE_COMPILE, Artifact.SCOPE_COMPILE, Artifact.SCOPE_COMPILE );
+ checkScopeUpdate( Artifact.SCOPE_COMPILE, Artifact.SCOPE_PROVIDED, Artifact.SCOPE_COMPILE );
+ checkScopeUpdate( Artifact.SCOPE_COMPILE, Artifact.SCOPE_RUNTIME, Artifact.SCOPE_COMPILE );
+ checkScopeUpdate( Artifact.SCOPE_COMPILE, Artifact.SCOPE_SYSTEM, Artifact.SCOPE_COMPILE );
+ checkScopeUpdate( Artifact.SCOPE_COMPILE, Artifact.SCOPE_TEST, Artifact.SCOPE_COMPILE );
+
+ /* farthest = provided */
+ checkScopeUpdate( Artifact.SCOPE_PROVIDED, Artifact.SCOPE_COMPILE, Artifact.SCOPE_COMPILE );
+ checkScopeUpdate( Artifact.SCOPE_PROVIDED, Artifact.SCOPE_PROVIDED, Artifact.SCOPE_PROVIDED );
+ checkScopeUpdate( Artifact.SCOPE_PROVIDED, Artifact.SCOPE_RUNTIME, Artifact.SCOPE_RUNTIME );
+ checkScopeUpdate( Artifact.SCOPE_PROVIDED, Artifact.SCOPE_SYSTEM, Artifact.SCOPE_SYSTEM );
+ checkScopeUpdate( Artifact.SCOPE_PROVIDED, Artifact.SCOPE_TEST, Artifact.SCOPE_TEST );
+
+ /* farthest = runtime */
+ checkScopeUpdate( Artifact.SCOPE_RUNTIME, Artifact.SCOPE_COMPILE, Artifact.SCOPE_COMPILE );
+ checkScopeUpdate( Artifact.SCOPE_RUNTIME, Artifact.SCOPE_PROVIDED, Artifact.SCOPE_RUNTIME );
+ checkScopeUpdate( Artifact.SCOPE_RUNTIME, Artifact.SCOPE_RUNTIME, Artifact.SCOPE_RUNTIME );
+ checkScopeUpdate( Artifact.SCOPE_RUNTIME, Artifact.SCOPE_SYSTEM, Artifact.SCOPE_SYSTEM );
+ checkScopeUpdate( Artifact.SCOPE_RUNTIME, Artifact.SCOPE_TEST, Artifact.SCOPE_RUNTIME );
+
+ /* farthest = system */
+ checkScopeUpdate( Artifact.SCOPE_SYSTEM, Artifact.SCOPE_COMPILE, Artifact.SCOPE_COMPILE );
+ checkScopeUpdate( Artifact.SCOPE_SYSTEM, Artifact.SCOPE_PROVIDED, Artifact.SCOPE_PROVIDED );
+ checkScopeUpdate( Artifact.SCOPE_SYSTEM, Artifact.SCOPE_RUNTIME, Artifact.SCOPE_RUNTIME );
+ checkScopeUpdate( Artifact.SCOPE_SYSTEM, Artifact.SCOPE_SYSTEM, Artifact.SCOPE_SYSTEM );
+ checkScopeUpdate( Artifact.SCOPE_SYSTEM, Artifact.SCOPE_TEST, Artifact.SCOPE_TEST );
+
+ /* farthest = test */
+ checkScopeUpdate( Artifact.SCOPE_TEST, Artifact.SCOPE_COMPILE, Artifact.SCOPE_COMPILE );
+ checkScopeUpdate( Artifact.SCOPE_TEST, Artifact.SCOPE_PROVIDED, Artifact.SCOPE_PROVIDED );
+ checkScopeUpdate( Artifact.SCOPE_TEST, Artifact.SCOPE_RUNTIME, Artifact.SCOPE_RUNTIME );
+ checkScopeUpdate( Artifact.SCOPE_TEST, Artifact.SCOPE_SYSTEM, Artifact.SCOPE_SYSTEM );
+ checkScopeUpdate( Artifact.SCOPE_TEST, Artifact.SCOPE_TEST, Artifact.SCOPE_TEST );
+ }
+
+ private void checkScopeUpdate( String farthestScope, String nearestScope, String expectedScope )
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ checkScopeUpdateDirect( farthestScope, nearestScope, expectedScope );
+ checkScopeUpdateTransitively( farthestScope, nearestScope, expectedScope );
+ }
+
+ private void checkScopeUpdateTransitively( String farthestScope, String nearestScope, String expectedScope )
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b = createArtifactSpec( "b", "1.0", nearestScope );
+ ArtifactSpec c = createArtifactSpec( "c", "1.0" );
+ a.addDependency( c );
+ ArtifactSpec dNearest = createArtifactSpec( "d", "2.0" );
+ b.addDependency( dNearest );
+ ArtifactSpec dFarthest = createArtifactSpec( "d", "3.0", farthestScope );
+ c.addDependency( dFarthest );
+
+ /* system and provided dependencies are not transitive */
+ if ( !Artifact.SCOPE_SYSTEM.equals( nearestScope ) && !Artifact.SCOPE_PROVIDED.equals( nearestScope ) )
+ {
+ checkScopeUpdate( a, b, expectedScope, "2.0" );
+ }
+ }
+
+ private void checkScopeUpdateDirect( String farthestScope, String nearestScope, String expectedScope )
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b = createArtifactSpec( "b", "1.0" );
+ ArtifactSpec c = createArtifactSpec( "c", "1.0" );
+ a.addDependency( c );
+ ArtifactSpec dNearest = createArtifactSpec( "d", "2.0", nearestScope );
+ b.addDependency( dNearest );
+ ArtifactSpec dFarthest = createArtifactSpec( "d", "3.0", farthestScope );
+ c.addDependency( dFarthest );
+
+ checkScopeUpdate( a, b, expectedScope, "2.0" );
+ }
+
+ private void checkScopeUpdate( ArtifactSpec a, ArtifactSpec b, String expectedScope, String expectedVersion )
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ScopeArtifactFilter filter;
+ if ( Artifact.SCOPE_PROVIDED.equals( expectedScope ) )
+ {
+ filter = new ScopeArtifactFilter( Artifact.SCOPE_COMPILE );
+ }
+ else if ( Artifact.SCOPE_SYSTEM.equals( expectedScope ) )
+ {
+ filter = new ScopeArtifactFilter( Artifact.SCOPE_COMPILE );
+ }
+ else
+ {
+ filter = new ScopeArtifactFilter( expectedScope );
+ }
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact, b.artifact } ), filter );
+ Artifact artifact = getArtifact( "d", res.getArtifacts() );
+ assertNotNull( "MNG-1895 Dependency was not added to resolution", artifact );
+ assertEquals( "Check artifactScope", expectedScope, artifact.getScope() );
+ assertEquals( "Check version", expectedVersion, artifact.getVersion() );
+
+ ArtifactSpec d = createArtifactSpec( "d", "1.0" );
+ res = collect( createSet( new Object[] { a.artifact, b.artifact, d.artifact } ), filter );
+ artifact = getArtifact( "d", res.getArtifacts() );
+ assertNotNull( "MNG-1895 Dependency was not added to resolution", artifact );
+ assertEquals( "Check artifactScope", d.artifact.getScope(), artifact.getScope() );
+ assertEquals( "Check version", "1.0", artifact.getVersion() );
+ }
+
+ public void disabledtestOptionalNotTransitiveButVersionIsInfluential()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ ArtifactSpec b = createArtifactSpec( "b", "1.0" );
+ b.addDependency( "c", "3.0", true );
+ ArtifactSpec d = a.addDependency( "d", "1.0" );
+ ArtifactSpec e = d.addDependency( "e", "1.0" );
+ e.addDependency( "c", "2.0" );
+
+ ArtifactSpec c = createArtifactSpec( "c", "3.0" );
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact, b.artifact } ) );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, b.artifact, c.artifact, d.artifact,
+ e.artifact } ), res.getArtifacts() );
+ Artifact artifact = getArtifact( "c", res.getArtifacts() );
+ assertEquals( "Check version", "3.0", artifact.getVersion() );
+ }
+
+ public void testTestScopeNotTransitive()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0", Artifact.SCOPE_TEST );
+ ArtifactSpec b = createArtifactSpec( "b", "1.0" );
+ b.addDependency( "c", "3.0", Artifact.SCOPE_TEST );
+
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact, b.artifact } ) );
+ assertEquals( "Check artifact list", createSet( new Object[] { a.artifact, b.artifact } ), res.getArtifacts() );
+ }
+
+ public void testSnapshotNotIncluded()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ a.addDependency( "b", "[1.0,)" );
+ createArtifactSpec( "b", "1.0-SNAPSHOT" );
+
+ ArtifactResolutionResult res = collect( a );
+
+ assertTrue( res.hasVersionRangeViolations() );
+
+ /*
+ * try { ArtifactResolutionResult res = collect( a ); fail( "Expected b not to resolve: " + res ); } catch (
+ * OverConstrainedVersionException e ) { assertTrue( e.getMessage().indexOf( "[1.0-SNAPSHOT]" ) <
+ * e.getMessage().indexOf( "[1.0,)" ) ); }
+ */
+ }
+
+ public void testOverConstrainedVersionException()
+ throws ArtifactResolutionException, InvalidVersionSpecificationException
+ {
+ ArtifactSpec a = createArtifactSpec( "a", "1.0" );
+ a.addDependency( "b", "[1.0, 2.0)" );
+ a.addDependency( "c", "[3.3.0,4.0.0)" );
+
+ ArtifactSpec b = createArtifactSpec( "b", "1.0.0" );
+ b.addDependency( "c", "3.3.0-v3346" );
+
+ ArtifactSpec c = createArtifactSpec( "c", "3.2.1-v3235e" );
+
+ try
+ {
+ ArtifactResolutionResult res = collect( createSet( new Object[] { a.artifact } ) );
+ }
+ catch ( OverConstrainedVersionException e )
+ {
+ assertTrue( "Versions unordered", e.getMessage().contains( "[3.2.1-v3235e, 3.3.0-v3346]" ) );
+ assertTrue( "DependencyTrail unresolved", e.getMessage().contains( "Path to dependency:" ) );
+ }
+ }
+
+ private Artifact getArtifact( String id, Set artifacts )
+ {
+ for ( Object artifact : artifacts )
+ {
+ Artifact a = (Artifact) artifact;
+ if ( a.getArtifactId().equals( id ) && a.getGroupId().equals( GROUP_ID ) )
+ {
+ return a;
+ }
+ }
+ return null;
+ }
+
+ private ArtifactResolutionResult collect( Set artifacts )
+ throws ArtifactResolutionException
+ {
+ return collect( artifacts, null );
+ }
+
+ private ArtifactResolutionResult collect( Set artifacts, ArtifactFilter filter )
+ throws ArtifactResolutionException
+ {
+ return artifactCollector.collect( artifacts, projectArtifact.artifact, null, null, null, source, filter,
+ Collections.EMPTY_LIST, null );
+ }
+
+ private ArtifactResolutionResult collect( ArtifactSpec a )
+ throws ArtifactResolutionException
+ {
+ return artifactCollector.collect( Collections.singleton( a.artifact ), projectArtifact.artifact, null, null,
+ null, source, null, Collections.EMPTY_LIST, null );
+ }
+
+ private ArtifactResolutionResult collect( ArtifactSpec a, ArtifactFilter filter )
+ throws ArtifactResolutionException
+ {
+ return artifactCollector.collect( Collections.singleton( a.artifact ), projectArtifact.artifact, null, null,
+ null, source, filter, Collections.EMPTY_LIST, null );
+ }
+
+ private ArtifactResolutionResult collect( ArtifactSpec a, Artifact managedVersion )
+ throws ArtifactResolutionException
+ {
+ Map managedVersions = Collections.singletonMap( managedVersion.getDependencyConflictId(), managedVersion );
+ return artifactCollector.collect( Collections.singleton( a.artifact ), projectArtifact.artifact,
+ managedVersions, null, null, source, null, Collections.EMPTY_LIST, null );
+ }
+
+ private ArtifactSpec createArtifactSpec( String id, String version )
+ throws InvalidVersionSpecificationException
+ {
+ return createArtifactSpec( id, version, Artifact.SCOPE_COMPILE );
+ }
+
+ private ArtifactSpec createArtifactSpec( String id, String version, boolean optional )
+ throws InvalidVersionSpecificationException
+ {
+ return createArtifactSpec( id, version, Artifact.SCOPE_COMPILE, null, optional );
+ }
+
+ private ArtifactSpec createArtifactSpec( String id, String version, String scope )
+ throws InvalidVersionSpecificationException
+ {
+ return createArtifactSpec( id, version, scope, null, false );
+ }
+
+ private ArtifactSpec createArtifactSpec( String id, String version, String scope, String inheritedScope,
+ boolean optional )
+ throws InvalidVersionSpecificationException
+ {
+ VersionRange versionRange = VersionRange.createFromVersionSpec( version );
+ Artifact artifact =
+ artifactFactory.createDependencyArtifact( GROUP_ID, id, versionRange, "jar", null, scope, inheritedScope,
+ optional );
+ ArtifactSpec spec = null;
+ if ( artifact != null )
+ {
+ spec = new ArtifactSpec();
+ spec.artifact = artifact;
+ source.addArtifact( spec );
+ }
+ return spec;
+ }
+
+ private static Set createSet( Object[] x )
+ {
+ return new LinkedHashSet( Arrays.asList( x ) );
+ }
+
+ private class ArtifactSpec
+ {
+ private Artifact artifact;
+
+ private Set dependencies = new HashSet();
+
+ public ArtifactSpec addDependency( String id, String version )
+ throws InvalidVersionSpecificationException
+ {
+ return addDependency( id, version, Artifact.SCOPE_COMPILE );
+ }
+
+ public ArtifactSpec addDependency( String id, String version, String scope )
+ throws InvalidVersionSpecificationException
+ {
+ return addDependency( id, version, scope, false );
+ }
+
+ private ArtifactSpec addDependency( ArtifactSpec dep )
+ throws InvalidVersionSpecificationException
+ {
+ if ( dep != null )
+ {
+ dependencies.add( dep.artifact );
+ }
+ return dep;
+ }
+
+ private ArtifactSpec addDependency( String id, String version, String scope, boolean optional )
+ throws InvalidVersionSpecificationException
+ {
+ ArtifactSpec dep = createArtifactSpec( id, version, scope, artifact.getScope(), optional );
+ return addDependency( dep );
+ }
+
+ public ArtifactSpec addDependency( String id, String version, boolean optional )
+ throws InvalidVersionSpecificationException
+ {
+ return addDependency( id, version, Artifact.SCOPE_COMPILE, optional );
+ }
+ }
+
+ private class Source
+ implements ArtifactMetadataSource
+ {
+ private Map artifacts = new HashMap();
+
+ private Map versions = new HashMap();
+
+ public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ String key = getKey( artifact );
+
+ ArtifactSpec a = (ArtifactSpec) artifacts.get( key );
+ try
+ {
+ return new ResolutionGroup( artifact, createArtifacts( artifactFactory, a.dependencies,
+ artifact.getScope(),
+ artifact.getDependencyFilter() ),
+ Collections.EMPTY_LIST );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ throw new ArtifactMetadataRetrievalException( "Invalid version creating artifacts", e, artifact );
+ }
+ }
+
+ private String getKey( Artifact artifact )
+ {
+ return artifact.getDependencyConflictId();
+ }
+
+ private Set createArtifacts( ArtifactFactory artifactFactory, Set dependencies, String inheritedScope,
+ ArtifactFilter dependencyFilter )
+ throws InvalidVersionSpecificationException
+ {
+ Set projectArtifacts = new HashSet();
+
+ for ( Object dependency : dependencies )
+ {
+ Artifact d = (Artifact) dependency;
+
+ VersionRange versionRange;
+ if ( d.getVersionRange() != null )
+ {
+ versionRange = d.getVersionRange();
+ }
+ else
+ {
+ versionRange = VersionRange.createFromVersionSpec( d.getVersion() );
+ }
+ Artifact artifact;
+ if ( d.getScope().equals( Artifact.SCOPE_TEST ) || d.getScope().equals( Artifact.SCOPE_PROVIDED ) )
+ {
+ /* don't call createDependencyArtifact as it'll ignore test and provided scopes */
+ artifact =
+ artifactFactory.createArtifact( d.getGroupId(), d.getArtifactId(), d.getVersion(), d.getScope(),
+ d.getType() );
+ }
+ else
+ {
+ artifact =
+ artifactFactory.createDependencyArtifact( d.getGroupId(), d.getArtifactId(), versionRange,
+ d.getType(), d.getClassifier(), d.getScope(),
+ inheritedScope, d.isOptional() );
+ }
+
+ if ( artifact != null && ( dependencyFilter == null || dependencyFilter.include( artifact ) ) )
+ {
+ artifact.setDependencyFilter( dependencyFilter );
+
+ projectArtifacts.add( artifact );
+ }
+ }
+
+ return projectArtifacts;
+ }
+
+ public void addArtifact( ArtifactSpec spec )
+ {
+ artifacts.put( getKey( spec.artifact ), spec );
+
+ String key = spec.artifact.getDependencyConflictId();
+ List artifactVersions = (List) versions.get( key );
+ if ( artifactVersions == null )
+ {
+ artifactVersions = new ArrayList();
+ versions.put( key, artifactVersions );
+ }
+ if ( spec.artifact.getVersion() != null )
+ {
+ artifactVersions.add( new DefaultArtifactVersion( spec.artifact.getVersion() ) );
+ }
+ }
+
+ public List<ArtifactVersion> retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ return retrieveAvailableVersions( artifact );
+ }
+
+ public List<ArtifactVersion> retrieveAvailableVersionsFromDeploymentRepository(
+ Artifact artifact,
+ ArtifactRepository localRepository,
+ ArtifactRepository remoteRepository )
+ throws ArtifactMetadataRetrievalException
+ {
+ return retrieveAvailableVersions( artifact );
+ }
+
+ private List<ArtifactVersion> retrieveAvailableVersions( Artifact artifact )
+ {
+ List artifactVersions = (List) versions.get( artifact.getDependencyConflictId() );
+ if ( artifactVersions == null )
+ {
+ artifactVersions = Collections.EMPTY_LIST;
+ }
+ return artifactVersions;
+ }
+
+ public ResolutionGroup retrieve( MetadataResolutionRequest request )
+ throws ArtifactMetadataRetrievalException
+ {
+ return retrieve( request.getArtifact(), request.getLocalRepository(), request.getRemoteRepositories() );
+ }
+
+ public List<ArtifactVersion> retrieveAvailableVersions( MetadataResolutionRequest request )
+ throws ArtifactMetadataRetrievalException
+ {
+ return retrieveAvailableVersions( request.getArtifact(), request.getLocalRepository(), request.getRemoteRepositories() );
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/AbstractConflictResolverTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/AbstractConflictResolverTest.java
new file mode 100644
index 00000000..bfab0d26
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/AbstractConflictResolverTest.java
@@ -0,0 +1,143 @@
+package org.apache.maven.repository.legacy.resolver.conflict;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.resolver.ResolutionNode;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.repository.legacy.resolver.conflict.ConflictResolver;
+import org.codehaus.plexus.PlexusTestCase;
+
+/**
+ * Provides a basis for testing conflict resolvers.
+ *
+ * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
+ */
+public abstract class AbstractConflictResolverTest
+ extends PlexusTestCase
+{
+ // constants --------------------------------------------------------------
+
+ private static final String GROUP_ID = "test";
+
+ // fields -----------------------------------------------------------------
+
+ protected Artifact a1;
+
+ protected Artifact a2;
+
+ protected Artifact b1;
+
+ private final String roleHint;
+
+ private ArtifactFactory artifactFactory;
+
+ private ConflictResolver conflictResolver;
+
+ // constructors -----------------------------------------------------------
+
+ public AbstractConflictResolverTest( String roleHint )
+ throws Exception
+ {
+ this.roleHint = roleHint;
+ }
+
+ // TestCase methods -------------------------------------------------------
+
+ /*
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
+ conflictResolver = (ConflictResolver) lookup( ConflictResolver.ROLE, roleHint );
+
+ a1 = createArtifact( "a", "1.0" );
+ a2 = createArtifact( "a", "2.0" );
+ b1 = createArtifact( "b", "1.0" );
+ }
+
+ /*
+ * @see org.codehaus.plexus.PlexusTestCase#tearDown()
+ */
+ protected void tearDown() throws Exception
+ {
+ a1 = null;
+ a2 = null;
+ b1 = null;
+
+ artifactFactory = null;
+ conflictResolver = null;
+
+ super.tearDown();
+ }
+
+ // protected methods ------------------------------------------------------
+
+ protected ConflictResolver getConflictResolver()
+ {
+ return conflictResolver;
+ }
+
+ protected void assertResolveConflict( ResolutionNode expectedNode, ResolutionNode actualNode1, ResolutionNode actualNode2 )
+ {
+ ResolutionNode resolvedNode = getConflictResolver().resolveConflict( actualNode1, actualNode2 );
+
+ assertNotNull( "Expected resolvable", resolvedNode );
+ assertEquals( "Resolution node", expectedNode, resolvedNode );
+ }
+
+ protected void assertUnresolvableConflict( ResolutionNode actualNode1, ResolutionNode actualNode2 )
+ {
+ ResolutionNode resolvedNode = getConflictResolver().resolveConflict( actualNode1, actualNode2 );
+
+ assertNull( "Expected unresolvable", resolvedNode );
+ }
+
+ protected Artifact createArtifact( String id, String version ) throws InvalidVersionSpecificationException
+ {
+ return createArtifact( id, version, Artifact.SCOPE_COMPILE );
+ }
+
+ protected Artifact createArtifact( String id, String version, boolean optional )
+ throws InvalidVersionSpecificationException
+ {
+ return createArtifact( id, version, Artifact.SCOPE_COMPILE, null, optional );
+ }
+
+ protected Artifact createArtifact( String id, String version, String scope )
+ throws InvalidVersionSpecificationException
+ {
+ return createArtifact( id, version, scope, null, false );
+ }
+
+ protected Artifact createArtifact( String id, String version, String scope, String inheritedScope, boolean optional )
+ throws InvalidVersionSpecificationException
+ {
+ VersionRange versionRange = VersionRange.createFromVersionSpec( version );
+
+ return artifactFactory.createDependencyArtifact( GROUP_ID, id, versionRange, "jar", null, scope,
+ inheritedScope, optional );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/FarthestConflictResolverTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/FarthestConflictResolverTest.java
new file mode 100644
index 00000000..96e283df
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/FarthestConflictResolverTest.java
@@ -0,0 +1,107 @@
+package org.apache.maven.repository.legacy.resolver.conflict;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+
+import org.apache.maven.artifact.resolver.ResolutionNode;
+import org.apache.maven.repository.legacy.resolver.conflict.FarthestConflictResolver;
+
+/**
+ * Tests <code>FarthestConflictResolver</code>.
+ *
+ * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
+ * @see FarthestConflictResolver
+ */
+public class FarthestConflictResolverTest
+ extends AbstractConflictResolverTest
+{
+ // constructors -----------------------------------------------------------
+
+ public FarthestConflictResolverTest()
+ throws Exception
+ {
+ super("farthest");
+ }
+
+ // tests ------------------------------------------------------------------
+
+ /**
+ * Tests that <code>a:2.0</code> wins in the scenario:
+ * <pre>
+ * a:1.0
+ * b:1.0 -> a:2.0
+ * </pre>
+ */
+ public void testDepth()
+ {
+ ResolutionNode a1n = new ResolutionNode( a1, Collections.EMPTY_LIST );
+ ResolutionNode b1n = new ResolutionNode( b1, Collections.EMPTY_LIST );
+ ResolutionNode a2n = new ResolutionNode( a2, Collections.EMPTY_LIST, b1n );
+
+ assertResolveConflict( a2n, a1n, a2n );
+ }
+
+ /**
+ * Tests that <code>a:2.0</code> wins in the scenario:
+ * <pre>
+ * b:1.0 -> a:2.0
+ * a:1.0
+ * </pre>
+ */
+ public void testDepthReversed()
+ {
+ ResolutionNode b1n = new ResolutionNode( b1, Collections.EMPTY_LIST );
+ ResolutionNode a2n = new ResolutionNode( a2, Collections.EMPTY_LIST, b1n );
+ ResolutionNode a1n = new ResolutionNode( a1, Collections.EMPTY_LIST );
+
+ assertResolveConflict( a2n, a2n, a1n );
+ }
+
+ /**
+ * Tests that <code>a:1.0</code> wins in the scenario:
+ * <pre>
+ * a:1.0
+ * a:2.0
+ * </pre>
+ */
+ public void testEqual()
+ {
+ ResolutionNode a1n = new ResolutionNode( a1, Collections.EMPTY_LIST );
+ ResolutionNode a2n = new ResolutionNode( a2, Collections.EMPTY_LIST );
+
+ assertResolveConflict( a1n, a1n, a2n );
+ }
+
+ /**
+ * Tests that <code>a:2.0</code> wins in the scenario:
+ * <pre>
+ * a:2.0
+ * a:1.0
+ * </pre>
+ */
+ public void testEqualReversed()
+ {
+ ResolutionNode a2n = new ResolutionNode( a2, Collections.EMPTY_LIST );
+ ResolutionNode a1n = new ResolutionNode( a1, Collections.EMPTY_LIST );
+
+ assertResolveConflict( a2n, a2n, a1n );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NearestConflictResolverTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NearestConflictResolverTest.java
new file mode 100644
index 00000000..0c7b035f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NearestConflictResolverTest.java
@@ -0,0 +1,107 @@
+package org.apache.maven.repository.legacy.resolver.conflict;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+
+import org.apache.maven.artifact.resolver.ResolutionNode;
+import org.apache.maven.repository.legacy.resolver.conflict.NearestConflictResolver;
+
+/**
+ * Tests <code>NearestConflictResolver</code>.
+ *
+ * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
+ * @see NearestConflictResolver
+ */
+public class NearestConflictResolverTest
+ extends AbstractConflictResolverTest
+{
+ // constructors -----------------------------------------------------------
+
+ public NearestConflictResolverTest()
+ throws Exception
+ {
+ super("nearest");
+ }
+
+ // tests ------------------------------------------------------------------
+
+ /**
+ * Tests that <code>a:1.0</code> wins in the scenario:
+ * <pre>
+ * a:1.0
+ * b:1.0 -> a:2.0
+ * </pre>
+ */
+ public void testDepth()
+ {
+ ResolutionNode a1n = new ResolutionNode( a1, Collections.EMPTY_LIST );
+ ResolutionNode b1n = new ResolutionNode( b1, Collections.EMPTY_LIST );
+ ResolutionNode a2n = new ResolutionNode( a2, Collections.EMPTY_LIST, b1n );
+
+ assertResolveConflict( a1n, a1n, a2n );
+ }
+
+ /**
+ * Tests that <code>a:1.0</code> wins in the scenario:
+ * <pre>
+ * b:1.0 -> a:2.0
+ * a:1.0
+ * </pre>
+ */
+ public void testDepthReversed()
+ {
+ ResolutionNode b1n = new ResolutionNode( b1, Collections.EMPTY_LIST );
+ ResolutionNode a2n = new ResolutionNode( a2, Collections.EMPTY_LIST, b1n );
+ ResolutionNode a1n = new ResolutionNode( a1, Collections.EMPTY_LIST );
+
+ assertResolveConflict( a1n, a2n, a1n );
+ }
+
+ /**
+ * Tests that <code>a:1.0</code> wins in the scenario:
+ * <pre>
+ * a:1.0
+ * a:2.0
+ * </pre>
+ */
+ public void testEqual()
+ {
+ ResolutionNode a1n = new ResolutionNode( a1, Collections.EMPTY_LIST );
+ ResolutionNode a2n = new ResolutionNode( a2, Collections.EMPTY_LIST );
+
+ assertResolveConflict( a1n, a1n, a2n );
+ }
+
+ /**
+ * Tests that <code>a:2.0</code> wins in the scenario:
+ * <pre>
+ * a:2.0
+ * a:1.0
+ * </pre>
+ */
+ public void testEqualReversed()
+ {
+ ResolutionNode a2n = new ResolutionNode( a2, Collections.EMPTY_LIST );
+ ResolutionNode a1n = new ResolutionNode( a1, Collections.EMPTY_LIST );
+
+ assertResolveConflict( a2n, a2n, a1n );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolverTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolverTest.java
new file mode 100644
index 00000000..68d19d6c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolverTest.java
@@ -0,0 +1,107 @@
+package org.apache.maven.repository.legacy.resolver.conflict;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+
+import org.apache.maven.artifact.resolver.ResolutionNode;
+import org.apache.maven.repository.legacy.resolver.conflict.NewestConflictResolver;
+
+/**
+ * Tests <code>NewestConflictResolver</code>.
+ *
+ * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
+ * @see NewestConflictResolver
+ */
+public class NewestConflictResolverTest
+ extends AbstractConflictResolverTest
+{
+ // constructors -----------------------------------------------------------
+
+ public NewestConflictResolverTest()
+ throws Exception
+ {
+ super("newest");
+ }
+
+ // tests ------------------------------------------------------------------
+
+ /**
+ * Tests that <code>a:2.0</code> wins in the scenario:
+ * <pre>
+ * a:1.0
+ * b:1.0 -> a:2.0
+ * </pre>
+ */
+ public void testDepth()
+ {
+ ResolutionNode a1n = new ResolutionNode( a1, Collections.EMPTY_LIST );
+ ResolutionNode b1n = new ResolutionNode( b1, Collections.EMPTY_LIST );
+ ResolutionNode a2n = new ResolutionNode( a2, Collections.EMPTY_LIST, b1n );
+
+ assertResolveConflict( a2n, a1n, a2n );
+ }
+
+ /**
+ * Tests that <code>a:2.0</code> wins in the scenario:
+ * <pre>
+ * b:1.0 -> a:2.0
+ * a:1.0
+ * </pre>
+ */
+ public void testDepthReversed()
+ {
+ ResolutionNode b1n = new ResolutionNode( b1, Collections.EMPTY_LIST );
+ ResolutionNode a2n = new ResolutionNode( a2, Collections.EMPTY_LIST, b1n );
+ ResolutionNode a1n = new ResolutionNode( a1, Collections.EMPTY_LIST );
+
+ assertResolveConflict( a2n, a2n, a1n );
+ }
+
+ /**
+ * Tests that <code>a:2.0</code> wins in the scenario:
+ * <pre>
+ * a:1.0
+ * a:2.0
+ * </pre>
+ */
+ public void testEqual()
+ {
+ ResolutionNode a1n = new ResolutionNode( a1, Collections.EMPTY_LIST );
+ ResolutionNode a2n = new ResolutionNode( a2, Collections.EMPTY_LIST );
+
+ assertResolveConflict( a2n, a1n, a2n );
+ }
+
+ /**
+ * Tests that <code>a:2.0</code> wins in the scenario:
+ * <pre>
+ * a:2.0
+ * a:1.0
+ * </pre>
+ */
+ public void testEqualReversed()
+ {
+ ResolutionNode a2n = new ResolutionNode( a2, Collections.EMPTY_LIST );
+ ResolutionNode a1n = new ResolutionNode( a1, Collections.EMPTY_LIST );
+
+ assertResolveConflict( a2n, a2n, a1n );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolverTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolverTest.java
new file mode 100644
index 00000000..6b06d34e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolverTest.java
@@ -0,0 +1,107 @@
+package org.apache.maven.repository.legacy.resolver.conflict;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+
+import org.apache.maven.artifact.resolver.ResolutionNode;
+import org.apache.maven.repository.legacy.resolver.conflict.OldestConflictResolver;
+
+/**
+ * Tests <code>OldestConflictResolver</code>.
+ *
+ * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
+ * @see OldestConflictResolver
+ */
+public class OldestConflictResolverTest
+ extends AbstractConflictResolverTest
+{
+ // constructors -----------------------------------------------------------
+
+ public OldestConflictResolverTest()
+ throws Exception
+ {
+ super("oldest");
+ }
+
+ // tests ------------------------------------------------------------------
+
+ /**
+ * Tests that <code>a:1.0</code> wins in the scenario:
+ * <pre>
+ * a:1.0
+ * b:1.0 -> a:2.0
+ * </pre>
+ */
+ public void testDepth()
+ {
+ ResolutionNode a1n = new ResolutionNode( a1, Collections.EMPTY_LIST );
+ ResolutionNode b1n = new ResolutionNode( b1, Collections.EMPTY_LIST );
+ ResolutionNode a2n = new ResolutionNode( a2, Collections.EMPTY_LIST, b1n );
+
+ assertResolveConflict( a1n, a1n, a2n );
+ }
+
+ /**
+ * Tests that <code>a:1.0</code> wins in the scenario:
+ * <pre>
+ * b:1.0 -> a:2.0
+ * a:1.0
+ * </pre>
+ */
+ public void testDepthReversed()
+ {
+ ResolutionNode b1n = new ResolutionNode( b1, Collections.EMPTY_LIST );
+ ResolutionNode a2n = new ResolutionNode( a2, Collections.EMPTY_LIST, b1n );
+ ResolutionNode a1n = new ResolutionNode( a1, Collections.EMPTY_LIST );
+
+ assertResolveConflict( a1n, a2n, a1n );
+ }
+
+ /**
+ * Tests that <code>a:1.0</code> wins in the scenario:
+ * <pre>
+ * a:1.0
+ * a:2.0
+ * </pre>
+ */
+ public void testEqual()
+ {
+ ResolutionNode a1n = new ResolutionNode( a1, Collections.EMPTY_LIST );
+ ResolutionNode a2n = new ResolutionNode( a2, Collections.EMPTY_LIST );
+
+ assertResolveConflict( a1n, a1n, a2n );
+ }
+
+ /**
+ * Tests that <code>a:1.0</code> wins in the scenario:
+ * <pre>
+ * a:2.0
+ * a:1.0
+ * </pre>
+ */
+ public void testEqualReversed()
+ {
+ ResolutionNode a2n = new ResolutionNode( a2, Collections.EMPTY_LIST );
+ ResolutionNode a1n = new ResolutionNode( a1, Collections.EMPTY_LIST );
+
+ assertResolveConflict( a1n, a2n, a1n );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultClasspathTransformationTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultClasspathTransformationTest.java
new file mode 100644
index 00000000..4f40516c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultClasspathTransformationTest.java
@@ -0,0 +1,120 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import org.apache.maven.artifact.ArtifactScopeEnum;
+import org.apache.maven.repository.metadata.ArtifactMetadata;
+import org.apache.maven.repository.metadata.ClasspathContainer;
+import org.apache.maven.repository.metadata.ClasspathTransformation;
+import org.apache.maven.repository.metadata.MetadataGraph;
+import org.apache.maven.repository.metadata.MetadataGraphEdge;
+import org.apache.maven.repository.metadata.MetadataGraphVertex;
+import org.codehaus.plexus.PlexusTestCase;
+
+/**
+ *
+ * @author <a href="mailto:oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
+
+public class DefaultClasspathTransformationTest
+extends PlexusTestCase
+{
+ ClasspathTransformation transform;
+
+ MetadataGraph graph;
+
+ MetadataGraphVertex v1;
+ MetadataGraphVertex v2;
+ MetadataGraphVertex v3;
+ MetadataGraphVertex v4;
+ //------------------------------------------------------------------------------------------
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ transform = (ClasspathTransformation) lookup( ClasspathTransformation.ROLE, "default" );
+
+ graph = new MetadataGraph( 4, 3 );
+ /*
+ * v2
+ * v1<
+ * v3-v4
+ *
+ */
+ v1 = graph.addVertex(new ArtifactMetadata("g","a1","1.0"));
+ graph.setEntry(v1);
+ v2 = graph.addVertex(new ArtifactMetadata("g","a2","1.0"));
+ v3 = graph.addVertex(new ArtifactMetadata("g","a3","1.0"));
+ v4 = graph.addVertex(new ArtifactMetadata("g","a4","1.0"));
+
+ // v1-->v2
+ graph.addEdge(v1, v2, new MetadataGraphEdge( "1.1", true, null, null, 2, 1 ) );
+ graph.addEdge(v1, v2, new MetadataGraphEdge( "1.2", true, null, null, 2, 2 ) );
+
+ // v1-->v3
+ graph.addEdge(v1, v3, new MetadataGraphEdge( "1.1", true, null, null, 2, 1 ) );
+ graph.addEdge(v1, v3, new MetadataGraphEdge( "1.2", true, null, null, 4, 2 ) );
+
+ // v3-->v4
+ graph.addEdge(v3, v4, new MetadataGraphEdge( "1.1", true, ArtifactScopeEnum.runtime, null, 2, 2 ) );
+ graph.addEdge(v3, v4, new MetadataGraphEdge( "1.2", true, ArtifactScopeEnum.test, null, 2, 2 ) );
+ }
+ //------------------------------------------------------------------------------------------
+ public void testCompileClasspathTransform()
+ throws Exception
+ {
+ ClasspathContainer res;
+
+ res = transform.transform( graph, ArtifactScopeEnum.compile, false );
+
+ assertNotNull("null classpath container after compile transform", res );
+ assertNotNull("null classpath after compile transform", res.getClasspath() );
+ assertEquals("compile classpath should have 3 entries", 3, res.getClasspath().size() );
+ }
+ //------------------------------------------------------------------------------------------
+ public void testRuntimeClasspathTransform()
+ throws Exception
+ {
+ ClasspathContainer res;
+
+ res = transform.transform( graph, ArtifactScopeEnum.runtime, false );
+
+ assertNotNull("null classpath container after runtime transform", res );
+ assertNotNull("null classpath after runtime transform", res.getClasspath() );
+ assertEquals("runtime classpath should have 4 entries", 4, res.getClasspath().size() );
+
+ ArtifactMetadata md = res.getClasspath().get(3);
+ assertEquals("runtime artifact version should be 1.1", "1.1", md.getVersion() );
+ }
+ //------------------------------------------------------------------------------------------
+ public void testTestClasspathTransform()
+ throws Exception
+ {
+ ClasspathContainer res;
+
+ res = transform.transform( graph, ArtifactScopeEnum.test, false );
+
+ assertNotNull("null classpath container after runtime transform", res );
+ assertNotNull("null classpath after runtime transform", res.getClasspath() );
+ assertEquals("runtime classpath should have 4 entries", 4, res.getClasspath().size() );
+
+ ArtifactMetadata md = res.getClasspath().get(3);
+ assertEquals("test artifact version should be 1.2", "1.2", md.getVersion() );
+ }
+ //------------------------------------------------------------------------------------------
+ //------------------------------------------------------------------------------------------
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolutionPolicyTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolutionPolicyTest.java
new file mode 100644
index 00000000..31832c33
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolutionPolicyTest.java
@@ -0,0 +1,59 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import org.apache.maven.repository.metadata.GraphConflictResolutionPolicy;
+import org.apache.maven.repository.metadata.MetadataGraphEdge;
+import org.codehaus.plexus.PlexusTestCase;
+
+/**
+ *
+ * @author <a href="mailto:oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
+
+public class DefaultGraphConflictResolutionPolicyTest
+extends PlexusTestCase
+{
+ GraphConflictResolutionPolicy policy;
+ MetadataGraphEdge e1;
+ MetadataGraphEdge e2;
+ MetadataGraphEdge e3;
+ //------------------------------------------------------------------------------------------
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ policy = (GraphConflictResolutionPolicy) lookup( GraphConflictResolutionPolicy.ROLE, "default" );
+ e1 = new MetadataGraphEdge( "1.1", true, null, null, 2, 1 );
+ e2 = new MetadataGraphEdge( "1.2", true, null, null, 3, 2 );
+ e3 = new MetadataGraphEdge( "1.2", true, null, null, 2, 3 );
+ }
+ //------------------------------------------------------------------------------------------
+ public void testDefaultPolicy()
+ throws Exception
+ {
+ MetadataGraphEdge res;
+
+ res = policy.apply( e1, e2 );
+ assertEquals( "Wrong depth edge selected", "1.1", res.getVersion() );
+
+ res = policy.apply( e1, e3 );
+ assertEquals( "Wrong version edge selected", "1.2", res.getVersion() );
+ }
+ //------------------------------------------------------------------------------------------
+ //------------------------------------------------------------------------------------------
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolverTest.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolverTest.java
new file mode 100644
index 00000000..4fba8f54
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolverTest.java
@@ -0,0 +1,153 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import org.apache.maven.artifact.ArtifactScopeEnum;
+import org.apache.maven.repository.metadata.ArtifactMetadata;
+import org.apache.maven.repository.metadata.GraphConflictResolver;
+import org.apache.maven.repository.metadata.MetadataGraph;
+import org.apache.maven.repository.metadata.MetadataGraphEdge;
+import org.apache.maven.repository.metadata.MetadataGraphVertex;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.logging.Logger;
+
+/**
+ *
+ * @author <a href="mailto:oleg@codehaus.org">Oleg Gusakov</a>
+ *
+ */
+
+public class DefaultGraphConflictResolverTest
+extends PlexusTestCase
+{
+ Logger log;
+
+ GraphConflictResolver resolver;
+
+ MetadataGraph graph;
+
+ MetadataGraphVertex v1;
+ MetadataGraphVertex v2;
+ MetadataGraphVertex v3;
+ MetadataGraphVertex v4;
+ //------------------------------------------------------------------------------------------
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ resolver = (GraphConflictResolver) lookup( GraphConflictResolver.ROLE, "default" );
+
+ /*
+ * v2
+ * v1<
+ * v3-v4
+ *
+ */
+ graph = new MetadataGraph( 4, 3 );
+ v1 = graph.addVertex(new ArtifactMetadata("g","a1","1.0"));
+ graph.setEntry(v1);
+ v2 = graph.addVertex(new ArtifactMetadata("g","a2","1.0"));
+ v3 = graph.addVertex(new ArtifactMetadata("g","a3","1.0"));
+ v4 = graph.addVertex(new ArtifactMetadata("g","a4","1.0"));
+
+ // v1-->v2
+ graph.addEdge(v1, v2, new MetadataGraphEdge( "1.1", true, null, null, 2, 1 ) );
+ graph.addEdge(v1, v2, new MetadataGraphEdge( "1.2", true, null, null, 2, 2 ) );
+
+ // v1-->v3
+ graph.addEdge(v1, v3, new MetadataGraphEdge( "1.1", true, null, null, 2, 1 ) );
+ graph.addEdge(v1, v3, new MetadataGraphEdge( "1.2", true, null, null, 4, 2 ) );
+
+ // v3-->v4
+ graph.addEdge(v3, v4, new MetadataGraphEdge( "1.1", true, ArtifactScopeEnum.runtime, null, 2, 1 ) );
+ graph.addEdge(v3, v4, new MetadataGraphEdge( "1.2", true, ArtifactScopeEnum.provided, null, 2, 2 ) );
+ }
+ //------------------------------------------------------------------------------------------
+ public void testCompileResolution()
+ throws Exception
+ {
+ MetadataGraph res;
+
+ res = resolver.resolveConflicts( graph, ArtifactScopeEnum.compile );
+
+ assertNotNull("null graph after resolver", res );
+ assertNotNull("no vertices in the resulting graph after resolver", res.getVertices() );
+
+ assertNotNull("no edges in the resulting graph after resolver", res.getExcidentEdges(v1) );
+
+ assertEquals( "wrong # of vertices in the resulting graph after resolver", 4, res.getVertices().size() );
+ assertEquals( "wrong # of excident edges in the resulting graph entry after resolver", 2, res.getExcidentEdges(v1).size() );
+
+ assertEquals( "wrong # of v2 incident edges in the resulting graph after resolver", 1, res.getIncidentEdges(v2).size() );
+ assertEquals( "wrong edge v1-v2 in the resulting graph after resolver", "1.2", res.getIncidentEdges(v2).get(0).getVersion() );
+
+ assertEquals( "wrong # of edges v1-v3 in the resulting graph after resolver", 1, res.getIncidentEdges(v3).size() );
+ assertEquals( "wrong edge v1-v3 in the resulting graph after resolver", "1.1", res.getIncidentEdges(v3).get(0).getVersion() );
+
+ assertEquals( "wrong # of edges v3-v4 in the resulting graph after resolver", 1, res.getIncidentEdges(v4).size() );
+ assertEquals( "wrong edge v3-v4 in the resulting graph after resolver", "1.2", res.getIncidentEdges(v4).get(0).getVersion() );
+ }
+ //------------------------------------------------------------------------------------------
+ public void testRuntimeResolution()
+ throws Exception
+ {
+ MetadataGraph res;
+
+ res = resolver.resolveConflicts( graph, ArtifactScopeEnum.runtime );
+
+ assertNotNull("null graph after resolver", res );
+ assertNotNull("no vertices in the resulting graph after resolver", res.getVertices() );
+ assertNotNull("no edges in the resulting graph after resolver", res.getExcidentEdges(v1) );
+
+ assertEquals( "wrong # of vertices in the resulting graph after resolver", 4, res.getVertices().size() );
+ assertEquals( "wrong # of excident edges in the resulting graph entry after resolver", 2, res.getExcidentEdges(v1).size() );
+
+ assertEquals( "wrong # of v2 incident edges in the resulting graph after resolver", 1, res.getIncidentEdges(v2).size() );
+ assertEquals( "wrong edge v1-v2 in the resulting graph after resolver", "1.2", res.getIncidentEdges(v2).get(0).getVersion() );
+
+ assertEquals( "wrong # of edges v1-v3 in the resulting graph after resolver", 1, res.getIncidentEdges(v3).size() );
+ assertEquals( "wrong edge v1-v3 in the resulting graph after resolver", "1.1", res.getIncidentEdges(v3).get(0).getVersion() );
+
+ assertEquals( "wrong # of edges v3-v4 in the resulting graph after resolver", 1, res.getIncidentEdges(v4).size() );
+ assertEquals( "wrong edge v3-v4 in the resulting graph after resolver", "1.1", res.getIncidentEdges(v4).get(0).getVersion() );
+ }
+ //------------------------------------------------------------------------------------------
+ public void testTestResolution()
+ throws Exception
+ {
+ MetadataGraph res;
+
+ res = resolver.resolveConflicts( graph, ArtifactScopeEnum.test );
+
+ assertNotNull("null graph after resolver", res );
+ assertNotNull("no vertices in the resulting graph after resolver", res.getVertices() );
+ assertNotNull("no edges in the resulting graph after resolver", res.getExcidentEdges(v1) );
+
+ assertEquals( "wrong # of vertices in the resulting graph after resolver", 4, res.getVertices().size() );
+ assertEquals( "wrong # of excident edges in the resulting graph entry after resolver", 2, res.getExcidentEdges(v1).size() );
+
+ assertEquals( "wrong # of v2 incident edges in the resulting graph after resolver", 1, res.getIncidentEdges(v2).size() );
+ assertEquals( "wrong edge v1-v2 in the resulting graph after resolver", "1.2", res.getIncidentEdges(v2).get(0).getVersion() );
+
+ assertEquals( "wrong # of edges v1-v3 in the resulting graph after resolver", 1, res.getIncidentEdges(v3).size() );
+ assertEquals( "wrong edge v1-v3 in the resulting graph after resolver", "1.1", res.getIncidentEdges(v3).get(0).getVersion() );
+
+ assertEquals( "wrong # of edges v3-v4 in the resulting graph after resolver", 1, res.getIncidentEdges(v4).size() );
+ assertEquals( "wrong edge v3-v4 in the resulting graph after resolver", "1.2", res.getIncidentEdges(v4).get(0).getVersion() );
+ }
+ //------------------------------------------------------------------------------------------
+ //------------------------------------------------------------------------------------------
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/TestMetadataSource.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/TestMetadataSource.java
new file mode 100644
index 00000000..dd9a9001
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/TestMetadataSource.java
@@ -0,0 +1,99 @@
+package org.apache.maven.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.repository.legacy.metadata.ArtifactMetadataRetrievalException;
+import org.apache.maven.repository.legacy.metadata.ArtifactMetadataSource;
+import org.apache.maven.repository.legacy.metadata.MetadataResolutionRequest;
+import org.apache.maven.repository.legacy.metadata.ResolutionGroup;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+@Component(role = ArtifactMetadataSource.class)
+public class TestMetadataSource
+ implements ArtifactMetadataSource
+{
+ @Requirement
+ private ArtifactFactory factory;
+
+ public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ Set dependencies = new HashSet();
+
+ if ( "g".equals( artifact.getArtifactId() ) )
+ {
+ Artifact a = null;
+ try
+ {
+ a = factory.createBuildArtifact( "org.apache.maven", "h", "1.0", "jar" );
+ dependencies.add( a );
+ }
+ catch ( Exception e )
+ {
+ throw new ArtifactMetadataRetrievalException( "Error retrieving metadata", e, a );
+ }
+ }
+
+ if ( "i".equals( artifact.getArtifactId() ) )
+ {
+ Artifact a = null;
+ try
+ {
+ a = factory.createBuildArtifact( "org.apache.maven", "j", "1.0-SNAPSHOT", "jar" );
+ dependencies.add( a );
+ }
+ catch ( Exception e )
+ {
+ throw new ArtifactMetadataRetrievalException( "Error retrieving metadata", e, a );
+ }
+ }
+
+
+ return new ResolutionGroup( artifact, dependencies, remoteRepositories );
+ }
+
+ public List<ArtifactVersion> retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ throw new UnsupportedOperationException( "Cannot get available versions in this test case" );
+ }
+
+ public List<ArtifactVersion> retrieveAvailableVersionsFromDeploymentRepository( Artifact artifact, ArtifactRepository localRepository, ArtifactRepository remoteRepository )
+ throws ArtifactMetadataRetrievalException
+ {
+ throw new UnsupportedOperationException( "Cannot get available versions in this test case" );
+ }
+
+ public ResolutionGroup retrieve( MetadataResolutionRequest request )
+ throws ArtifactMetadataRetrievalException
+ {
+ return retrieve( request.getArtifact(), request.getLocalRepository(), request.getRemoteRepositories() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.jar
new file mode 100644
index 00000000..609ec21b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.pom
new file mode 100644
index 00000000..f4514188
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.pom
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: Dummy Artifact</name>
+ <description>
+
+ </description>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/a/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/a/maven-metadata.xml
new file mode 100644
index 00000000..8099175e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/a/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20091023222756</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.jar
new file mode 100644
index 00000000..19df0485
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.pom
new file mode 100644
index 00000000..ca20cbf5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.pom
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: Dummy Artifact</name>
+ <description>
+
+ </description>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/b/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/b/maven-metadata.xml
new file mode 100644
index 00000000..e77af628
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/b/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20091023222817</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/repository-system/maven-core-2.1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/repository-system/maven-core-2.1.0.jar
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/repository-system/maven-core-2.1.0.jar
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/artifact-install/artifact-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/artifact-install/artifact-1.0.jar
new file mode 100644
index 00000000..421376db
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/artifact-install/artifact-1.0.jar
@@ -0,0 +1 @@
+dummy
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p0-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p0-1.0.pom
new file mode 100644
index 00000000..92c9f41d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p0-1.0.pom
@@ -0,0 +1,11 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <name>p0</name>
+ <version>1.0</version>
+ <organization>
+ <name>Codehaus</name>
+ </organization>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p1-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p1-1.0.pom
new file mode 100644
index 00000000..6038a806
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p1-1.0.pom
@@ -0,0 +1,16 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>p1</artifactId>
+ <packaging>pom</packaging>
+ <name>p1</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p2-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p2-1.0.pom
new file mode 100644
index 00000000..9ac112ac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p2-1.0.pom
@@ -0,0 +1,18 @@
+<project>
+ <parent>
+ <artifactId>p1</artifactId>
+ <groupId>maven</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>p2</artifactId>
+ <packaging>pom</packaging>
+ <name>p2</name>
+ <version>1.0</version>
+ <mailingLists>
+ <mailingList>
+ <name>mailing-list</name>
+ </mailingList>
+ </mailingLists>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p3-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p3-1.0.pom
new file mode 100644
index 00000000..d40684e9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p3-1.0.pom
@@ -0,0 +1,14 @@
+<project>
+ <parent>
+ <artifactId>p2</artifactId>
+ <groupId>maven</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>p3</artifactId>
+ <packaging>pom</packaging>
+ <name>p3</name>
+ <version>1.0</version>
+ <inceptionYear>2000</inceptionYear>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p4-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p4-1.0.pom
new file mode 100644
index 00000000..dc9a2735
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p4-1.0.pom
@@ -0,0 +1,13 @@
+<project>
+ <parent>
+ <artifactId>p3</artifactId>
+ <groupId>maven</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>p4</artifactId>
+ <packaging>jar</packaging>
+ <name>p4</name>
+ <version>1.0</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p0-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p0-1.0.pom
new file mode 100644
index 00000000..9df2582d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p0-1.0.pom
@@ -0,0 +1,11 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven.t01</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <name>p0</name>
+ <version>1.0</version>
+ <organization>
+ <name>p0-org</name>
+ </organization>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p1-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p1-1.0.pom
new file mode 100644
index 00000000..4fc81d83
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p1-1.0.pom
@@ -0,0 +1,16 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven.t01</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven.t01</groupId>
+ <artifactId>p1</artifactId>
+ <packaging>pom</packaging>
+ <name>p1</name>
+ <version>1.0</version>
+ <organization>
+ <name>p1-org</name>
+ </organization>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p2-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p2-1.0.pom
new file mode 100644
index 00000000..8032cf2f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p2-1.0.pom
@@ -0,0 +1,16 @@
+<project>
+ <parent>
+ <artifactId>p1</artifactId>
+ <groupId>maven.t01</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven.t01</groupId>
+ <artifactId>p2</artifactId>
+ <packaging>pom</packaging>
+ <name>p2</name>
+ <version>1.0</version>
+ <organization>
+ <name>p2-org</name>
+ </organization>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p3-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p3-1.0.pom
new file mode 100644
index 00000000..6ed58569
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p3-1.0.pom
@@ -0,0 +1,16 @@
+<project>
+ <parent>
+ <artifactId>p2</artifactId>
+ <groupId>maven.t01</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven.t01</groupId>
+ <artifactId>p3</artifactId>
+ <packaging>pom</packaging>
+ <name>p3</name>
+ <version>1.0</version>
+ <organization>
+ <name>p3-org</name>
+ </organization>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p4-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p4-1.0.pom
new file mode 100644
index 00000000..1739333a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p4-1.0.pom
@@ -0,0 +1,16 @@
+<project>
+ <parent>
+ <artifactId>p3</artifactId>
+ <groupId>maven.t01</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven.t01</groupId>
+ <artifactId>p4</artifactId>
+ <packaging>jar</packaging>
+ <name>p4</name>
+ <version>1.0</version>
+ <organization>
+ <name>p4-org</name>
+ </organization>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/p4/p5/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/p4/p5/pom.xml
new file mode 100644
index 00000000..93d1d72f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/p4/p5/pom.xml
@@ -0,0 +1,32 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <parent>
+ <artifactId>p4</artifactId>
+ <groupId>maven.t02</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven.t02</groupId>
+ <artifactId>p5</artifactId>
+ <packaging>jar</packaging>
+ <name>p5</name>
+ <version>1.0</version>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/p4/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/p4/pom.xml
new file mode 100644
index 00000000..77958f78
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/p4/pom.xml
@@ -0,0 +1,32 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <parent>
+ <artifactId>p3</artifactId>
+ <groupId>maven.t02</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven.t02</groupId>
+ <artifactId>p4</artifactId>
+ <packaging>pom</packaging>
+ <name>p4</name>
+ <version>1.0</version>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/pom.xml
new file mode 100644
index 00000000..d83de976
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/pom.xml
@@ -0,0 +1,33 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <parent>
+ <artifactId>p2</artifactId>
+ <groupId>maven.t02</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven.t02</groupId>
+ <artifactId>p3</artifactId>
+ <packaging>pom</packaging>
+ <name>p3</name>
+ <version>1.0</version>
+ <inceptionYear>2000</inceptionYear>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/pom.xml
new file mode 100644
index 00000000..c2b7d715
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/pom.xml
@@ -0,0 +1,37 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <parent>
+ <artifactId>p1</artifactId>
+ <groupId>maven.t02</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven.t02</groupId>
+ <artifactId>p2</artifactId>
+ <packaging>pom</packaging>
+ <name>p2</name>
+ <version>1.0</version>
+ <mailingLists>
+ <mailingList>
+ <name>mailing-list</name>
+ </mailingList>
+ </mailingLists>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/pom.xml
new file mode 100644
index 00000000..af2d92ed
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/pom.xml
@@ -0,0 +1,51 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven.t02</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven.t02</groupId>
+ <artifactId>p1</artifactId>
+ <packaging>pom</packaging>
+ <name>p1</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>test</id>
+ <phase>package</phase>
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/pom.xml
new file mode 100644
index 00000000..3643fe49
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/pom.xml
@@ -0,0 +1,30 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven.t02</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <name>p0</name>
+ <version>1.0</version>
+ <organization>
+ <name>Codehaus</name>
+ </organization>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t03/p0/p1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t03/p0/p1/pom.xml
new file mode 100644
index 00000000..69fe6a1d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t03/p0/p1/pom.xml
@@ -0,0 +1,45 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven.t03</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven.t03</groupId>
+ <artifactId>p1</artifactId>
+ <packaging>pom</packaging>
+ <name>p1</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <configuration>
+ <tasks><echo>${project.parent.basedir}</echo></tasks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t03/p0/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t03/p0/pom.xml
new file mode 100644
index 00000000..476ffdfb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t03/p0/pom.xml
@@ -0,0 +1,30 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven.t03</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <name>p0</name>
+ <version>1.0</version>
+ <organization>
+ <name>Codehaus</name>
+ </organization>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-a-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-a-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-a-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-b-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-b-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-b-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-b-2.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-b-2.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-b-2.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-c-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-c-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-c-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-c-2.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-c-2.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-c-2.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-a-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-a-1.0.pom
new file mode 100644
index 00000000..5ca34c3a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-a-1.0.pom
@@ -0,0 +1,21 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t04-a</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Fake Maven Central Repository</name>
+ <url>file://dummy</url>
+ </repository>
+ </repositories>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t04-b</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-b-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-b-1.0.pom
new file mode 100644
index 00000000..4c311ab1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-b-1.0.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t04-b</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-b-2.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-b-2.0.pom
new file mode 100644
index 00000000..d24e3bc1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-b-2.0.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t04-b</artifactId>
+ <packaging>jar</packaging>
+ <version>2.0</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-c-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-c-1.0.pom
new file mode 100644
index 00000000..bef2488b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-c-1.0.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t04-c</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-c-2.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-c-2.0.pom
new file mode 100644
index 00000000..d24e3bc1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-c-2.0.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t04-b</artifactId>
+ <packaging>jar</packaging>
+ <version>2.0</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/p0/p1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/p0/p1/pom.xml
new file mode 100644
index 00000000..c25fc3e7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/p0/p1/pom.xml
@@ -0,0 +1,41 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven-t04</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t04</groupId>
+ <artifactId>p1</artifactId>
+ <packaging>pom</packaging>
+ <name>p1</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t04-a</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t04-c</artifactId>
+ <version>1.0</version>
+ </dependency>
+
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <configuration>
+ <tasks><echo>${project.parent.basedir}</echo></tasks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/p0/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/p0/pom.xml
new file mode 100644
index 00000000..1b02dc2c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/p0/pom.xml
@@ -0,0 +1,37 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t04</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <name>p0</name>
+ <version>1.0</version>
+ <organization>
+ <name>Codehaus</name>
+ </organization>
+
+ <dependencyManagement>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t04-a</artifactId>
+ <version>1.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t04-b</artifactId>
+ <version>1.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t04-c</artifactId>
+ <version>2.0</version>
+ </dependency>
+
+ </dependencies>
+ </dependencyManagement>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-a-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-a-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-a-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-a-2.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-a-2.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-a-2.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-b-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-b-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-b-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-b-1.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-b-1.1.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-b-1.1.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-b-2.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-b-2.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-b-2.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-c-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-c-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-c-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-d-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-d-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-d-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-d-1.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-d-1.1.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-d-1.1.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-d-1.2.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-d-1.2.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-d-1.2.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-a-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-a-1.0.pom
new file mode 100644
index 00000000..a1b8cb9b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-a-1.0.pom
@@ -0,0 +1,23 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-a</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Fake Maven Central Repository</name>
+ <url>file://dummy</url>
+ </repository>
+ </repositories>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-b</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-a-2.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-a-2.0.pom
new file mode 100644
index 00000000..097101e8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-a-2.0.pom
@@ -0,0 +1,23 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-a</artifactId>
+ <packaging>jar</packaging>
+ <version>2.0</version>
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Fake Maven Central Repository</name>
+ <url>file://dummy</url>
+ </repository>
+ </repositories>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-b</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-b-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-b-1.0.pom
new file mode 100644
index 00000000..e0490ff7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-b-1.0.pom
@@ -0,0 +1,24 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-b</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-c</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-d</artifactId>
+ <version>1.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ <optional>false</optional>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-b-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-b-1.1.pom
new file mode 100644
index 00000000..ff59f5d2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-b-1.1.pom
@@ -0,0 +1,24 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-b</artifactId>
+ <packaging>jar</packaging>
+ <version>1.1</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-c</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-d</artifactId>
+ <version>1.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ <optional>false</optional>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-b-2.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-b-2.0.pom
new file mode 100644
index 00000000..79370ec4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-b-2.0.pom
@@ -0,0 +1,24 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-b</artifactId>
+ <packaging>jar</packaging>
+ <version>2.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-c</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-d</artifactId>
+ <version>1.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ <optional>false</optional>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-c-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-c-1.0.pom
new file mode 100644
index 00000000..0edc3ddd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-c-1.0.pom
@@ -0,0 +1,17 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-c</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-d</artifactId>
+ <version>1.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ <optional>true</optional>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-d-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-d-1.0.pom
new file mode 100644
index 00000000..9290b033
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-d-1.0.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-d-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-d-1.1.pom
new file mode 100644
index 00000000..b4af4b2c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-d-1.1.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-d-1.2.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-d-1.2.pom
new file mode 100644
index 00000000..09e1d947
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-d-1.2.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.2</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/p0/p1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/p0/p1/pom.xml
new file mode 100644
index 00000000..d9c2d52b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/p0/p1/pom.xml
@@ -0,0 +1,54 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven-t05</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t05</groupId>
+ <artifactId>p1</artifactId>
+ <packaging>pom</packaging>
+ <name>p1</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-b</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-d</artifactId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-a</artifactId>
+ <version>1.0</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-c</artifactId>
+ <version>1.0</version>
+ <scope>runtime</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <configuration>
+ <tasks><echo>${project.parent.basedir}</echo></tasks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/p0/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/p0/pom.xml
new file mode 100644
index 00000000..6c93838b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/p0/pom.xml
@@ -0,0 +1,36 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t05</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <name>p0</name>
+ <version>1.0</version>
+ <organization>
+ <name>Codehaus</name>
+ </organization>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-a</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-b</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-c</artifactId>
+ <version>1.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t05-d</artifactId>
+ <version>1.2</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-a-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-a-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-a-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-b-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-b-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-b-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-b-1.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-b-1.1.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-b-1.1.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-c-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-c-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-c-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-d-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-d-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-d-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-d-1.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-d-1.1.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-d-1.1.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-d-1.2.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-d-1.2.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-d-1.2.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-a-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-a-1.0.pom
new file mode 100644
index 00000000..21aa5f55
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-a-1.0.pom
@@ -0,0 +1,23 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-a</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Fake Maven Central Repository</name>
+ <url>file://dummy</url>
+ </repository>
+ </repositories>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-b</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-b-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-b-1.0.pom
new file mode 100644
index 00000000..a9af131c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-b-1.0.pom
@@ -0,0 +1,24 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-b</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-c</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-d</artifactId>
+ <version>1.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ <optional>false</optional>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-b-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-b-1.1.pom
new file mode 100644
index 00000000..a9af131c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-b-1.1.pom
@@ -0,0 +1,24 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-b</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-c</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-d</artifactId>
+ <version>1.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ <optional>false</optional>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-c-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-c-1.0.pom
new file mode 100644
index 00000000..80272114
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-c-1.0.pom
@@ -0,0 +1,17 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-c</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-d</artifactId>
+ <version>1.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ <optional>true</optional>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-d-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-d-1.0.pom
new file mode 100644
index 00000000..e4531ab4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-d-1.0.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-d-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-d-1.1.pom
new file mode 100644
index 00000000..c146cb89
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-d-1.1.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-d-1.2.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-d-1.2.pom
new file mode 100644
index 00000000..ff91f975
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-d-1.2.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.2</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/p0/p1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/p0/p1/pom.xml
new file mode 100644
index 00000000..46862190
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/p0/p1/pom.xml
@@ -0,0 +1,54 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven-t06</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t06</groupId>
+ <artifactId>p1</artifactId>
+ <packaging>pom</packaging>
+ <name>p1</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-b</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-d</artifactId>
+ <version>1.0</version>
+ <scope>test</scope>
+ <optional>false</optional>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-a</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-c</artifactId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <configuration>
+ <tasks><echo>${project.parent.basedir}</echo></tasks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/p0/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/p0/pom.xml
new file mode 100644
index 00000000..60c540ca
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/p0/pom.xml
@@ -0,0 +1,37 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t06</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <name>p0</name>
+ <version>1.0</version>
+ <organization>
+ <name>Codehaus</name>
+ </organization>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-a</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-b</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-c</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t06-d</artifactId>
+ <version>1.2</version>
+ <scope>test</scope>
+ <optional>false</optional>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-a-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-a-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-a-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-b-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-b-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-b-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-b-1.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-b-1.1.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-b-1.1.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-c-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-c-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-c-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-d-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-d-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-d-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-d-1.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-d-1.1.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-d-1.1.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-d-1.2.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-d-1.2.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-d-1.2.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-a-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-a-1.0.pom
new file mode 100644
index 00000000..05665a9c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-a-1.0.pom
@@ -0,0 +1,23 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-a</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Fake Maven Central Repository</name>
+ <url>file://dummy</url>
+ </repository>
+ </repositories>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-b</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-b-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-b-1.0.pom
new file mode 100644
index 00000000..8ce6751c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-b-1.0.pom
@@ -0,0 +1,24 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-b</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-c</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-d</artifactId>
+ <version>1.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ <optional>true</optional>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-b-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-b-1.1.pom
new file mode 100644
index 00000000..689ad055
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-b-1.1.pom
@@ -0,0 +1,24 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-b</artifactId>
+ <packaging>jar</packaging>
+ <version>1.1</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-c</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-d</artifactId>
+ <version>1.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ <optional>true</optional>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-c-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-c-1.0.pom
new file mode 100644
index 00000000..494470c4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-c-1.0.pom
@@ -0,0 +1,17 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-c</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-d</artifactId>
+ <version>1.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ <optional>true</optional>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-d-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-d-1.0.pom
new file mode 100644
index 00000000..5761d515
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-d-1.0.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-d-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-d-1.1.pom
new file mode 100644
index 00000000..08fc179c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-d-1.1.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-d-1.2.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-d-1.2.pom
new file mode 100644
index 00000000..544ccc59
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-d-1.2.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.2</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/p0/p1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/p0/p1/pom.xml
new file mode 100644
index 00000000..6f700429
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/p0/p1/pom.xml
@@ -0,0 +1,54 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven-t07</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t07</groupId>
+ <artifactId>p1</artifactId>
+ <packaging>pom</packaging>
+ <name>p1</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-b</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-d</artifactId>
+ <version>1.0</version>
+ <scope>test</scope>
+ <optional>false</optional>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-a</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-c</artifactId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <configuration>
+ <tasks><echo>${project.parent.basedir}</echo></tasks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/p0/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/p0/pom.xml
new file mode 100644
index 00000000..b500ee0e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/p0/pom.xml
@@ -0,0 +1,37 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t07</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <name>p0</name>
+ <version>1.0</version>
+ <organization>
+ <name>Codehaus</name>
+ </organization>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-a</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-b</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-c</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t07-d</artifactId>
+ <version>1.2</version>
+ <scope>test</scope>
+ <optional>false</optional>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-a-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-a-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-a-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-b-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-b-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-b-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-b-1.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-b-1.1.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-b-1.1.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-c-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-c-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-c-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-d-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-d-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-d-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-d-1.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-d-1.1.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-d-1.1.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-d-1.2.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-d-1.2.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-d-1.2.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-a-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-a-1.0.pom
new file mode 100644
index 00000000..186c2d89
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-a-1.0.pom
@@ -0,0 +1,23 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-a</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Fake Maven Central Repository</name>
+ <url>file://dummy</url>
+ </repository>
+ </repositories>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-b</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-b-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-b-1.0.pom
new file mode 100644
index 00000000..d866ab35
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-b-1.0.pom
@@ -0,0 +1,24 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-b</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-c</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-d</artifactId>
+ <version>1.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ <optional>false</optional>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-b-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-b-1.1.pom
new file mode 100644
index 00000000..d402466e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-b-1.1.pom
@@ -0,0 +1,24 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-b</artifactId>
+ <packaging>jar</packaging>
+ <version>1.1</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-c</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-d</artifactId>
+ <version>1.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ <optional>false</optional>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-c-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-c-1.0.pom
new file mode 100644
index 00000000..d8250528
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-c-1.0.pom
@@ -0,0 +1,17 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-c</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-d</artifactId>
+ <version>1.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ <optional>true</optional>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-d-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-d-1.0.pom
new file mode 100644
index 00000000..f4530458
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-d-1.0.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-d-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-d-1.1.pom
new file mode 100644
index 00000000..c7703b02
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-d-1.1.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-d-1.2.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-d-1.2.pom
new file mode 100644
index 00000000..e341be53
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-d-1.2.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.2</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/p0/p1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/p0/p1/pom.xml
new file mode 100644
index 00000000..331996d8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/p0/p1/pom.xml
@@ -0,0 +1,59 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven-t08</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t08</groupId>
+ <artifactId>p1</artifactId>
+ <packaging>pom</packaging>
+ <name>p1</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-b</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-d</artifactId>
+ <version>1.0</version>
+ <scope>test</scope>
+ <optional>true</optional>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-a</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-c</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-d</artifactId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <configuration>
+ <tasks><echo>${project.parent.basedir}</echo></tasks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/p0/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/p0/pom.xml
new file mode 100644
index 00000000..a18ab853
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/p0/pom.xml
@@ -0,0 +1,37 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t08</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <name>p0</name>
+ <version>1.0</version>
+ <organization>
+ <name>Codehaus</name>
+ </organization>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-a</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-b</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-c</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t08-d</artifactId>
+ <version>1.2</version>
+ <scope>test</scope>
+ <optional>false</optional>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-a-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-a-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-a-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-b-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-b-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-b-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-c-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-c-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-c-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-d-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-d-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-d-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-a-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-a-1.0.pom
new file mode 100644
index 00000000..54cf647b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-a-1.0.pom
@@ -0,0 +1,24 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t09-a</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Fake Maven Central Repository</name>
+ <url>file://dummy</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t09-b</artifactId>
+ <version>1.0</version>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-b-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-b-1.0.pom
new file mode 100644
index 00000000..ce001c2f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-b-1.0.pom
@@ -0,0 +1,17 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t09-b</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t09-c</artifactId>
+ <version>1.0</version>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-c-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-c-1.0.pom
new file mode 100644
index 00000000..da7bc349
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-c-1.0.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t09-c</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-d-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-d-1.0.pom
new file mode 100644
index 00000000..86227472
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-d-1.0.pom
@@ -0,0 +1,17 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t09-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t09-c</artifactId>
+ <version>1.0</version>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/p0/p1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/p0/p1/pom.xml
new file mode 100644
index 00000000..ae435843
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/p0/p1/pom.xml
@@ -0,0 +1,36 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven-t09</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t09</groupId>
+ <artifactId>p1</artifactId>
+ <packaging>pom</packaging>
+ <name>p1</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t09-a</artifactId>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <configuration>
+ <tasks><echo>${project.parent.basedir}</echo></tasks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/p0/p2/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/p0/p2/pom.xml
new file mode 100644
index 00000000..4681c2ef
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/p0/p2/pom.xml
@@ -0,0 +1,42 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven-t09</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t09</groupId>
+ <artifactId>p2</artifactId>
+ <packaging>pom</packaging>
+ <name>p2</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t09-a</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t09-d</artifactId>
+ <version>1.0</version>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <configuration>
+ <tasks><echo>${project.parent.basedir}</echo></tasks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/p0/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/p0/pom.xml
new file mode 100644
index 00000000..a93746d2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/p0/pom.xml
@@ -0,0 +1,38 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t09</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <name>p0</name>
+ <version>1.0</version>
+ <organization>
+ <name>Codehaus</name>
+ </organization>
+
+ <dependencyManagement>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t09-a</artifactId>
+ <version>1.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t09-b</artifactId>
+ <version>1.0</version>
+ <exclusions>
+ <exclusion>
+ <groupId>maven-test</groupId>
+ <artifactId>t09-c</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ </dependencies>
+
+ </dependencyManagement>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/jars/t10-a-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/jars/t10-a-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/jars/t10-a-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/jars/t10-b-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/jars/t10-b-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/jars/t10-b-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/jars/t10-c-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/jars/t10-c-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/jars/t10-c-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/poms/t10-a-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/poms/t10-a-1.0.pom
new file mode 100644
index 00000000..1fc2a221
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/poms/t10-a-1.0.pom
@@ -0,0 +1,24 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t10-a</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Fake Maven Central Repository</name>
+ <url>file://dummy</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t10-b</artifactId>
+ <version>1.0</version>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/poms/t10-b-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/poms/t10-b-1.0.pom
new file mode 100644
index 00000000..64b5f97a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/poms/t10-b-1.0.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t10-b</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/poms/t10-c-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/poms/t10-c-1.0.pom
new file mode 100644
index 00000000..6548ab30
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/poms/t10-c-1.0.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>t10-c</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/p0/p1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/p0/p1/pom.xml
new file mode 100644
index 00000000..ed82ae13
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/p0/p1/pom.xml
@@ -0,0 +1,42 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven-t10</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t10</groupId>
+ <artifactId>p1</artifactId>
+ <packaging>pom</packaging>
+ <name>p1</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t10-a</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t10-c</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <configuration>
+ <tasks><echo>${project.parent.basedir}</echo></tasks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/p0/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/p0/pom.xml
new file mode 100644
index 00000000..853af40d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/p0/pom.xml
@@ -0,0 +1,41 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t10</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <name>p0</name>
+ <version>1.0</version>
+ <organization>
+ <name>Codehaus</name>
+ </organization>
+
+ <dependencyManagement>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t10-a</artifactId>
+ <version>1.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t10-b</artifactId>
+ <version>1.0</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t10-c</artifactId>
+ <version>1.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ </dependencyManagement>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t11/p0/p1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t11/p0/p1/pom.xml
new file mode 100644
index 00000000..e4c79be4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t11/p0/p1/pom.xml
@@ -0,0 +1,16 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>p1</artifactId>
+ <packaging>jar</packaging>
+ <name>p1</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t11/p0/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t11/p0/pom.xml
new file mode 100644
index 00000000..23b07e2c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t11/p0/pom.xml
@@ -0,0 +1,27 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <name>p0</name>
+ <version>1.0</version>
+ <organization>
+ <name>Codehaus</name>
+ </organization>
+
+ <dependencyManagement>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>maven</groupId>
+ <artifactId>p1</artifactId>
+ <version>1.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ </dependencyManagement>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12/p0/p1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12/p0/p1/pom.xml
new file mode 100644
index 00000000..15115cb8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12/p0/p1/pom.xml
@@ -0,0 +1,29 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>p1</artifactId>
+ <packaging>jar</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>normal</id>
+
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12/p0/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12/p0/pom.xml
new file mode 100644
index 00000000..4f2e6426
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12/p0/pom.xml
@@ -0,0 +1,30 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <version>1.0</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>test</id>
+
+ <!-- The key to this test... -->
+ <inherited>false</inherited>
+
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ <phase>install</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/maven/p0/1.0/p0-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/maven/p0/1.0/p0-1.0.pom
new file mode 100644
index 00000000..97bf7ccc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/maven/p0/1.0/p0-1.0.pom
@@ -0,0 +1,18 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <version>1.0</version>
+
+ <scm>
+ <connection>scm:svn:http://host/p0</connection>
+ <developerConnection>scm:svn:https://host/p0</developerConnection>
+ <url>http://host/viewer?path=/p0</url>
+ </scm>
+
+ <modules>
+ <module>modules/p1</module>
+ </modules>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/maven/p1/1.0/p1-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/maven/p1/1.0/p1-1.0.pom
new file mode 100644
index 00000000..e9ddf0d7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/maven/p1/1.0/p1-1.0.pom
@@ -0,0 +1,11 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven</groupId>
+ <version>1.0</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>p1</artifactId>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/p0/modules/p1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/p0/modules/p1/pom.xml
new file mode 100644
index 00000000..736b5153
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/p0/modules/p1/pom.xml
@@ -0,0 +1,11 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven</groupId>
+ <version>1.0</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>p1</artifactId>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/p0/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/p0/pom.xml
new file mode 100644
index 00000000..a22df68e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/p0/pom.xml
@@ -0,0 +1,18 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <version>1.0</version>
+
+ <scm>
+ <connection>scm:svn:http://host/p0</connection>
+ <developerConnection>scm:svn:https://host/p0</developerConnection>
+ <url>http://host/viewer?path=/p0</url>
+ </scm>
+
+ <modules>
+ <module>modules/p1</module>
+ </modules>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/marker.txt b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/marker.txt
new file mode 100644
index 00000000..d9bab060
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/marker.txt
@@ -0,0 +1 @@
+this is just a marker file. \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-a-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-a-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-a-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-b-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-b-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-b-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-c-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-c-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-c-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-d-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-d-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-d-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-a-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-a-1.0.pom
new file mode 100644
index 00000000..6905f6c8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-a-1.0.pom
@@ -0,0 +1,23 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-a</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Fake Maven Central Repository</name>
+ <url>file://dummy</url>
+ </repository>
+ </repositories>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-b</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-b-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-b-1.0.pom
new file mode 100644
index 00000000..e814951a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-b-1.0.pom
@@ -0,0 +1,23 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-b</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-c</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-d</artifactId>
+ <version>1.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-c-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-c-1.0.pom
new file mode 100644
index 00000000..4631b88f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-c-1.0.pom
@@ -0,0 +1,16 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-c</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-d</artifactId>
+ <version>1.2</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.1.pom
new file mode 100644
index 00000000..6e22f608
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.1.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.2.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.2.pom
new file mode 100644
index 00000000..6e22f608
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.2.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar
new file mode 100644
index 00000000..c2c027fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar
@@ -0,0 +1 @@
+local \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version
new file mode 100644
index 00000000..09f9180f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version
@@ -0,0 +1 @@
+20040101.101010 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar
new file mode 100644
index 00000000..c2c027fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar
@@ -0,0 +1 @@
+local \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version
new file mode 100644
index 00000000..09f9180f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version
@@ -0,0 +1 @@
+20040101.101010 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar
new file mode 100644
index 00000000..c2c027fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar
@@ -0,0 +1 @@
+local \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version
new file mode 100644
index 00000000..09f9180f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version
@@ -0,0 +1 @@
+20040101.101010 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/poms/maven-test-snapshot-resolving-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/poms/maven-test-snapshot-resolving-1.0.pom
new file mode 100644
index 00000000..64a075f4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/poms/maven-test-snapshot-resolving-1.0.pom
@@ -0,0 +1,49 @@
+<project>
+ <groupId>snapshot-test</groupId>
+ <artifactId>maven-test-snapshot-resolving</artifactId>
+ <packaging>jar</packaging>
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Fake Maven Central Repository</name>
+ <url>file://dummy</url>
+ </repository>
+ </repositories>
+ <dependencies>
+ <dependency>
+ <groupId>snapshot-test</groupId>
+ <artifactId>maven-snapshot-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>snapshot-test</groupId>
+ <artifactId>maven-snapshot-b</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>snapshot-test</groupId>
+ <artifactId>maven-snapshot-c</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>snapshot-test</groupId>
+ <artifactId>maven-snapshot-d</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>snapshot-test</groupId>
+ <artifactId>maven-snapshot-e</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/deployer/ArtifactDeployerTest.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/deployer/ArtifactDeployerTest.xml
new file mode 100644
index 00000000..f7c381fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/deployer/ArtifactDeployerTest.xml
@@ -0,0 +1,23 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<plexus>
+ <components>
+ </components>
+</plexus>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/installer/ArtifactInstallerTest.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/installer/ArtifactInstallerTest.xml
new file mode 100644
index 00000000..f7c381fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/installer/ArtifactInstallerTest.xml
@@ -0,0 +1,23 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<plexus>
+ <components>
+ </components>
+</plexus>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml
new file mode 100644
index 00000000..925022ef
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml
@@ -0,0 +1,48 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<plexus>
+ <components>
+ <component>
+ <role>org.apache.maven.wagon.Wagon</role>
+ <role-hint>a</role-hint>
+ <implementation>org.apache.maven.artifact.manager.WagonA</implementation>
+ </component>
+ <component>
+ <role>org.apache.maven.wagon.Wagon</role>
+ <role-hint>b1</role-hint>
+ <implementation>org.apache.maven.artifact.manager.WagonB</implementation>
+ </component>
+ <component>
+ <role>org.apache.maven.wagon.Wagon</role>
+ <role-hint>b2</role-hint>
+ <implementation>org.apache.maven.artifact.manager.WagonB</implementation>
+ </component>
+ <component>
+ <role>org.apache.maven.wagon.Wagon</role>
+ <role-hint>c</role-hint>
+ <implementation>org.apache.maven.artifact.manager.WagonC</implementation>
+ </component>
+ <component>
+ <role>org.apache.maven.wagon.Wagon</role>
+ <role-hint>string</role-hint>
+ <implementation>org.apache.maven.artifact.manager.StringWagon</implementation>
+ </component>
+ </components>
+</plexus>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/resolver/ArtifactResolverTest.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/resolver/ArtifactResolverTest.xml
new file mode 100644
index 00000000..2b950859
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/resolver/ArtifactResolverTest.xml
@@ -0,0 +1,71 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<plexus>
+ <components>
+ <component>
+ <role>org.apache.maven.artifact.resolver.ArtifactResolver</role>
+ <role-hint>default</role-hint>
+ <implementation>org.apache.maven.artifact.resolver.DefaultArtifactResolver</implementation>
+ <isolated-realm>false</isolated-realm>
+ <requirements>
+ <requirement>
+ <role>org.codehaus.plexus.logging.Logger</role>
+ <role-hint>default</role-hint>
+ <field-name>logger</field-name>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.artifact.factory.ArtifactFactory</role>
+ <role-hint>default</role-hint>
+ <field-name>artifactFactory</field-name>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.artifact.resolver.ArtifactCollector</role>
+ <role-hint>default</role-hint>
+ <field-name>artifactCollector</field-name>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.artifact.resolver.ResolutionErrorHandler</role>
+ <role-hint>default</role-hint>
+ <field-name>resolutionErrorHandler</field-name>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.artifact.metadata.ArtifactMetadataSource</role>
+ <role-hint>test</role-hint>
+ <field-name>source</field-name>
+ </requirement>
+ <requirement>
+ <role>org.codehaus.plexus.PlexusContainer</role>
+ <role-hint>default</role-hint>
+ <field-name>container</field-name>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.plugin.LegacySupport</role>
+ <role-hint>default</role-hint>
+ <field-name>legacySupport</field-name>
+ </requirement>
+ <requirement>
+ <role>org.eclipse.aether.RepositorySystem</role>
+ <role-hint>default</role-hint>
+ <field-name>repoSystem</field-name>
+ </requirement>
+ </requirements>
+ </component>
+ </components>
+</plexus>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/resolver/ArtifactUpdatePolicyTest.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/resolver/ArtifactUpdatePolicyTest.xml
new file mode 100644
index 00000000..b434d7b9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/resolver/ArtifactUpdatePolicyTest.xml
@@ -0,0 +1,29 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<plexus>
+ <components>
+ <component>
+ <role>org.apache.maven.wagon.Wagon</role>
+ <role-hint>testfile</role-hint>
+ <implementation>org.apache.maven.artifact.resolver.TestFileWagon</implementation>
+ <instantiation-strategy>per-lookup</instantiation-strategy>
+ </component>
+ </components>
+</plexus> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/project/AbstractMavenProjectTestCase.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/project/AbstractMavenProjectTestCase.xml
new file mode 100644
index 00000000..bcc291e1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/project/AbstractMavenProjectTestCase.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plexus>
+ <components>
+ <component>
+ <role>org.apache.maven.lifecycle.LifeCyclePluginAnalyzer</role>
+ <implementation>org.apache.maven.project.EmptyLifecyclePluginAnalyzer</implementation>
+ </component>
+ </components>
+</plexus>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/pom.xml
new file mode 100644
index 00000000..9443d87d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/pom.xml
@@ -0,0 +1,155 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<model xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <packaging>jar</packaging>
+ <name>Maven</name>
+ <version>2.0-SNAPSHOT</version>
+ <inceptionYear>2001</inceptionYear>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-cli</groupId>
+ <artifactId>commons-cli</artifactId>
+ <version>1.0-beta-2</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>plexus</groupId>
+ <artifactId>plexus-i18n</artifactId>
+ <version>1.0-beta-2-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>ognl</groupId>
+ <artifactId>ognl</artifactId>
+ <version>2.5.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>marmalade</groupId>
+ <artifactId>marmalade-core</artifactId>
+ <version>0.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>marmalade</groupId>
+ <artifactId>marmalade-el-ognl</artifactId>
+ <version>0.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>plexus</groupId>
+ <artifactId>plexus-compiler-api</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>plexus</groupId>
+ <artifactId>plexus-compiler-javac</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>surefire</groupId>
+ <artifactId>surefire-booter</artifactId>
+ <version>1.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven</groupId>
+ <artifactId>wagon-api</artifactId>
+ <version>0.9-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>wagon-http-lightweight</artifactId>
+ <version>0.9-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven</groupId>
+ <artifactId>wagon-ssh</artifactId>
+ <version>0.9-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>jsch</groupId>
+ <artifactId>jsch</artifactId>
+ <version>0.1.14</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>qdox</groupId>
+ <artifactId>qdox</artifactId>
+ <version>1.2</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/project-with-scoped-dependencies.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/project-with-scoped-dependencies.xml
new file mode 100644
index 00000000..c7062501
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/project-with-scoped-dependencies.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>maven-project-test</artifactId>
+ <name>Maven</name>
+ <version>1.0-beta-9</version>
+ <dependencies>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>scope-default</artifactId>
+ <version>1.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>scope-test</artifactId>
+ <version>1.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>scope-runtime</artifactId>
+ <version>1.0</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>scope-compile</artifactId>
+ <version>1.0</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>scope-provided</artifactId>
+ <version>1.0</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-inherited</groupId>
+ <artifactId>scope-default</artifactId>
+ <version>1.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-inherited</groupId>
+ <artifactId>scope-compile</artifactId>
+ <version>1.0</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-inherited</groupId>
+ <artifactId>scope-runtime</artifactId>
+ <version>1.0</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-inherited</groupId>
+ <artifactId>scope-test</artifactId>
+ <version>1.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-inherited</groupId>
+ <artifactId>scope-provided</artifactId>
+ <version>1.0</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-compile-dep.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-compile-dep.xml
new file mode 100644
index 00000000..1161c698
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-compile-dep.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>scope-compile</artifactId>
+ <version>1.0</version>
+ <dependencies>
+
+ <dependency>
+ <groupId>maven-test-compile</groupId>
+ <artifactId>scope-default</artifactId>
+ <version>1.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test-compile</groupId>
+ <artifactId>scope-test</artifactId>
+ <version>1.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test-compile</groupId>
+ <artifactId>scope-runtime</artifactId>
+ <version>1.0</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test-compile</groupId>
+ <artifactId>scope-compile</artifactId>
+ <version>1.0</version>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-default-dep.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-default-dep.xml
new file mode 100644
index 00000000..c904be0e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-default-dep.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>scope-default</artifactId>
+ <version>1.0</version>
+ <dependencies>
+
+ <dependency>
+ <groupId>maven-test-default</groupId>
+ <artifactId>scope-default</artifactId>
+ <version>1.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test-default</groupId>
+ <artifactId>scope-test</artifactId>
+ <version>1.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test-default</groupId>
+ <artifactId>scope-runtime</artifactId>
+ <version>1.0</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test-default</groupId>
+ <artifactId>scope-compile</artifactId>
+ <version>1.0</version>
+ <scope>compile</scope>
+ </dependency>
+
+ </dependencies>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-provided-dep.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-provided-dep.xml
new file mode 100644
index 00000000..b85669ce
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-provided-dep.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>scope-provided</artifactId>
+ <version>1.0</version>
+ <dependencies>
+
+ <dependency>
+ <groupId>maven-test-provided</groupId>
+ <artifactId>scope-default</artifactId>
+ <version>1.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test-provided</groupId>
+ <artifactId>scope-test</artifactId>
+ <version>1.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test-provided</groupId>
+ <artifactId>scope-runtime</artifactId>
+ <version>1.0</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test-provided</groupId>
+ <artifactId>scope-compile</artifactId>
+ <version>1.0</version>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-runtime-dep.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-runtime-dep.xml
new file mode 100644
index 00000000..921723c7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-runtime-dep.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>scope-runtime</artifactId>
+ <version>1.0</version>
+ <dependencies>
+
+ <dependency>
+ <groupId>maven-test-runtime</groupId>
+ <artifactId>scope-default</artifactId>
+ <version>1.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test-runtime</groupId>
+ <artifactId>scope-test</artifactId>
+ <version>1.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test-runtime</groupId>
+ <artifactId>scope-runtime</artifactId>
+ <version>1.0</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test-runtime</groupId>
+ <artifactId>scope-compile</artifactId>
+ <version>1.0</version>
+ <scope>compile</scope>
+ </dependency>
+
+ </dependencies>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-test-dep.xml b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-test-dep.xml
new file mode 100644
index 00000000..ea2dde9f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-test-dep.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>scope-test</artifactId>
+ <version>1.0</version>
+ <dependencies>
+
+ <dependency>
+ <groupId>maven-test-test</groupId>
+ <artifactId>scope-default</artifactId>
+ <version>1.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test-test</groupId>
+ <artifactId>scope-test</artifactId>
+ <version>1.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test-test</groupId>
+ <artifactId>scope-runtime</artifactId>
+ <version>1.0</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>maven-test-test</groupId>
+ <artifactId>scope-compile</artifactId>
+ <version>1.0</version>
+ <scope>compile</scope>
+ </dependency>
+
+ </dependencies>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/lifecycle-executor.txt b/framework/src/maven/apache-maven-3.3.3/maven-core/lifecycle-executor.txt
new file mode 100644
index 00000000..41e98bfd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/lifecycle-executor.txt
@@ -0,0 +1,217 @@
+We have a lifecycle mapping for the packaging of *jar* below. You see that for this packaging we have a *default* lifecycle and a list of phases where each phase is a comma separated list of goals to run and they are in the form groupId:artifactId:version.
+
+<configuration>
+ <lifecycles>
+ <lifecycle>
+ <id>default</id>
+ <phases>
+ <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
+ <compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
+ <process-test-resources>org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources>
+ <test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
+ <test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
+ <package>org.apache.maven.plugins:maven-jar-plugin:jar</package>
+ <install>org.apache.maven.plugins:maven-install-plugin:install</install>
+ <deploy>org.apache.maven.plugins:maven-deploy-plugin:deploy</deploy>
+ </phases>
+ </lifecycle>
+ </lifecycles>
+</configuration>
+
+We need to turn this list of phases into a set of plugin objects that have an xml representation like the following:
+
+<plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>process</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ .
+ .
+ .
+</plugins>
+
+We need this form so that the model builder can make the first pass at merging. Full merging cannot be done because we don't know what the version of the plugin is yet that the user has requested. For plugins in the default lifecycle they are typically defined in the plugin management section of the parent POM. When the merging is complete we are going to have something that looks like the following:
+
+<plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>1.0</version</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>process</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ .
+ .
+ .
+</plugins>
+
+Once we have the version of the plugins the appropriate call to the plugin manager can be made to get the MojoDescriptor for the goal that needs to be run. In the MojoDescriptor we are interested in the <configuration/> element and <parameters/> element. From these elements we need to make a component configuration for the MojoExecution. The actual DOM like structure we create is of type PlexusConfiguration and is the type we use with the ComponentConfigurator to initialize fields in a Plexus component. Typically this is done within Plexus with the configuration supplied with component configuration, but in Maven we take configuration values from the POM. So we have to use the ComponentConfigurator outside of Plexus in order to configurure the Maven Mojo which is just a Plexus component. We can use the information from the MojoDescriptor along with the merged configuration information that is now present in the POM to create the complete PlexusConfiguration used to populate values in the Maven Mojo.
+
+foreach configuration element:
+ - if read only and being set squawk
+
+ - find the parameter
+ - get value from expression or default
+ - if required and null squawk
+
+ <configuration>
+ <attached implementation="boolean" default-value="true"/>
+ <localRepository implementation="org.apache.maven.artifact.repository.ArtifactRepository">${localRepository}</localRepository>
+ <resources implementation="java.util.List">${project.resources}</resources>
+ <repositories implementation="java.util.List">${project.repositories}</repositories>
+ <remoteArtifactRepositories implementation="java.util.List">${project.remoteArtifactRepositories}</remoteArtifactRepositories>
+ <appendedResourcesDirectory implementation="java.io.File">${basedir}/src/main/appended-resources</appendedResourcesDirectory>
+ <excludeScope implementation="java.lang.String" default-value="">${excludeScope}</excludeScope>
+ <includeScope implementation="java.lang.String" default-value="runtime">${includeScope}</includeScope>
+ <excludeGroupIds implementation="java.lang.String" default-value="">${excludeGroupIds}</excludeGroupIds>
+ <skip implementation="boolean" default-value="false">${remoteresources.skip}</skip>
+ <outputDirectory implementation="java.io.File">${project.build.directory}/maven-shared-archive-resources</outputDirectory>
+ <excludeArtifactIds implementation="java.lang.String" default-value="">${excludeArtifactIds}</excludeArtifactIds>
+ <excludeTransitive implementation="boolean" default-value="false">${excludeTransitive}</excludeTransitive>
+ <includeGroupIds implementation="java.lang.String" default-value="">${includeGroupIds}</includeGroupIds>
+ <mavenSession implementation="org.apache.maven.execution.MavenSession">${session}</mavenSession>
+ <project implementation="org.apache.maven.project.MavenProject">${project}</project>
+ <includeArtifactIds implementation="java.lang.String" default-value="">${includeArtifactIds}</includeArtifactIds>
+ </configuration>
+
+ <parameters>
+ <parameter>
+ <name>appendedResourcesDirectory</name>
+ <type>java.io.File</type>
+ <required>false</required>
+ <editable>true</editable>
+ </parameter>
+ <parameter>
+ <name>attached</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ </parameter>
+ <parameter>
+ <name>excludeArtifactIds</name>
+ <type>java.lang.String</type>
+ <required>false</required>
+ <editable>true</editable>
+ </parameter>
+ <parameter>
+ <name>excludeGroupIds</name>
+ <type>java.lang.String</type>
+ <required>false</required>
+ <editable>true</editable>
+ </parameter>
+ <parameter>
+ <name>excludeScope</name>
+ <type>java.lang.String</type>
+ <required>false</required>
+ <editable>true</editable>
+ </parameter>
+ <parameter>
+ <name>excludeTransitive</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ </parameter>
+ <parameter>
+ <name>includeArtifactIds</name>
+ <type>java.lang.String</type>
+ <required>false</required>
+ <editable>true</editable>
+ </parameter>
+ <parameter>
+ <name>includeGroupIds</name>
+ <type>java.lang.String</type>
+ <required>false</required>
+ <editable>true</editable>
+ </parameter>
+ <parameter>
+ <name>includeScope</name>
+ <type>java.lang.String</type>
+ <required>false</required>
+ <editable>true</editable>
+ </parameter>
+ <parameter>
+ <name>localRepository</name>
+ <type>org.apache.maven.artifact.repository.ArtifactRepository</type>
+ <required>true</required>
+ <editable>false</editable>
+ </parameter>
+ <parameter>
+ <name>mavenSession</name>
+ <type>org.apache.maven.execution.MavenSession</type>
+ <required>true</required>
+ <editable>false</editable>
+ <description>The Maven session.</description>
+ </parameter>
+ <parameter>
+ <name>outputDirectory</name>
+ <type>java.io.File</type>
+ <required>false</required>
+ <editable>true</editable>
+ </parameter>
+ <parameter>
+ <name>project</name>
+ <type>org.apache.maven.project.MavenProject</type>
+ <required>true</required>
+ <editable>false</editable>
+ </parameter>
+ <parameter>
+ <name>properties</name>
+ <type>java.util.Map</type>
+ <required>false</required>
+ <editable>true</editable>
+ </parameter>
+ <parameter>
+ <name>remoteArtifactRepositories</name>
+ <type>java.util.List</type>
+ <required>true</required>
+ <editable>false</editable>
+ </parameter>
+ <parameter>
+ <name>repositories</name>
+ <type>java.util.List</type>
+ <required>true</required>
+ <editable>false</editable>
+ </parameter>
+ <parameter>
+ <name>resourceBundles</name>
+ <type>java.util.List</type>
+ <required>true</required>
+ <editable>true</editable>
+ </parameter>
+ <parameter>
+ <name>resources</name>
+ <type>java.util.List</type>
+ <required>true</required>
+ <editable>false</editable>
+ </parameter>
+ <parameter>
+ <name>skip</name>
+ <type>boolean</type>
+ <required>false</required>
+ <editable>true</editable>
+ </parameter>
+ <parameter>
+ <name>supplementalModels</name>
+ <type>java.lang.String[]</type>
+ <required>false</required>
+ <editable>true</editable>
+ </parameter>
+ </parameters>
+
+- we need to know what came from the POM, and validate those
+- plugin in any default values
+- check to see if anything is missing
+
+In the case of something like Modello where it is common to specify the configuration for all the goals outside the execution block we need to account for creating the right configuration element which includes only those configuration elements for a particular goal that that particular goal understands. We need to walk through the parameters of the Mojo in question and only take the configuration options that apply.
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/plugin-manager.txt b/framework/src/maven/apache-maven-3.3.3/maven-core/plugin-manager.txt
new file mode 100644
index 00000000..f3fcf8e9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/plugin-manager.txt
@@ -0,0 +1,184 @@
+h3. Plugins
+
+* Execution model
+* Metadata model
+* Metadata tooling
+ ** Metadata extractor
+ ** Metadata reader
+ ** Metadata writer
+ ** Metadata adapter (if required for the target system)
+* Maven packaging and lifecycle
+* Maven test harness for plugin execution model
+* Eclipse IDE tooling for plugin execution model and metadata model
+
+- we also seem to have information like the plugin lifecycle model that's burried inside the maven execution model
+- we also seem to have artifact information tangled inside the plugin model
+- we have to deal with scripting implementations (groovy, beanshell, ruby)
+- we need to deal with a shared context for plugins, like the guarded mojos
+- we need to deal with plugins as core application logic which can also interact with plugins
+
+* Along with this comes the testing strategies that make this work
+* The repository model where plugins can be stored and cataloged
+* Bridging this into an OSGi system: if this could be done then we can basically take over p2
+
+TODO
+
+- dealing with processing of input and adapting GAVs before searching i.e. plugin groups in Maven and default searching
+- how to deal with resolution from different places like local/remote/workspace
+- how to incorporate the metadata processor to start with
+- create a hook to programmatically configure the test
+- create a plugin processor
+- directory
+- jar
+- hooks for loading
+
+- i could make an annotation that marked another class as its plugin discoverer, i could just add it to the
+ the component descriptor and when it's loaded we can add the discoverer, that would be simpler. i could
+ also do this with the lister as well
+i'l
+// 1 the metadata -> model plugin/mojo descriptor
+// 2 tools for doing the mapping
+// 3 the component model -> interfaces for the plugin
+
+// The plugin manager should load up a directory structure of plugins.
+// - a plugin per directory where the plugin is present with its deps
+// - a plugin that has its dependencies packaged up with it
+// - implement filters and create a test where a plugin fails if the right classes are not filtered
+// - plugins with a dependency the same as the core but different versions, make it fail then fix it
+
+ /*
+ *
+ * h2. Concerns for the plugin manager
+ *
+ * h3. resolving the dependencies of a plugin - these could be resolved remotely at runtime or, -
+ * they could be resolved from a local repository - i think we need a simple dependency model here
+ * that is more mercury related and not Maven related i.e no POMs - workspace resolver - we need
+ * tools to pre-populate this repository
+ *
+ * h3. create an isolated classloader
+ *
+ * h3. lookup the plugin with a configuration
+ *
+ * h3. execute the plugin
+ *
+ * h3. plugins may have to deal with particular actions when a plugin is - installed - loaded -
+ * unloaded - update - uninstalled
+ *
+ * h3. plugins should be able to have specific metadata for a plugin model and that be translated -
+ * dependencies - resources - configuration - extension points of plugins
+ *
+ * For a particular application plugin there will be a declarative descriptor for that plugin type.
+ *
+ * - nexus - the plugin class - UI to contribute - what JS to hook into the UI - what resources to
+ * load into the UI - having packed or unpacked plugins, and positioning resources if necessary -
+ * maven can work out of the classloader, nexus plugins probably couldn't given the js and image
+ * resources
+ *
+ * We need to look at Maven, and Nexus as use cases and figure out what each of them needs to be
+ * able to do
+ *
+ * - now what is really the difference between this and loading a component in plexus - custom
+ * classloading capability - remote resolution of dependencies - do we want a model for sharing
+ * information among plugins, is this more like an extension point - do we need a sort of bus for
+ * application data - do we need a dictionary for our applications like Apple does. We could easily
+ * hook into this and this is the model we need to follow - how many of our REST services do not map
+ * directory to a method in the application interface?
+ *
+ * - research extension points versus plugins
+ *
+ * from igor: two plugins A and B, both depend on the same library but use different versions, say
+ * lib 1.0 and lib 2.0 when debugger hits a breakpoint inside a class from the library, IDE needs to
+ * know which version of library the class comes from
+ */
+
+This document outlines the concerns of a general plugin manager that would be used in conjunction with any Plexus-based application. The following outlined concerns are an attempt to describe what a plugin manager would need to do for Maven and for Nexus.
+
+h2. Concerns for the plugin manager
+
+h3. Resolving the dependencies of a plugin
+
+A plugin manager would need to know how to find the dependencies of a plugin whether that be from a workspace of an IDE, a local Maven repository, or a remote Maven repository. During development in an IDE we would need layered resolution approach that would allow resolution from the workspace, then the local Maven repository and then from any number of remote Maven repositories. During development from the command line we would need a layered resolution approach that would allow resolution from the local Maven repository and then from any number of remote Maven repositories. In production the resolution for the dependencies could also be layered but would depend on the preferred model for the given application. In the case of Maven no plugin dependencies are shipped with a Maven plugin, but in the case of Nexus we would probably want to include the dependencies for self-containment.
+
+h4. Working with POMs during development
+
+During the development of a plugin we would want to make it easy for a developer to create a plugin which means we would allow the direct use of a POM to state the dependencies of a given plugin and any tooling we created would be responsible for turning the dependency information in the POM into plugin metadata which described the dependencies of the plugin.
+
+We are looking at using Mercury for the resolution and retrieval of the plugin dependencies so during development we would translate the POMs into dependency information that Mercury can understand, and in production we would have the pre-digested format that Mercury could utilize to resolve and retrieve dependencies. We need to be careful that we are using Mercury during development and production so that we don’t get in the situation where Maven 2.x is resolving different then Mercury is. We can still leverage POMs during development but we need to make sure Mercury is doing the work.
+
+With respect to development inside an IDE the workspace from which we would like to resolve and retrieve dependencies is a read-only local repository to Mercury which is put at the front-end of the search order of any repository that Mercury will consult for artifacts.
+
+h4. Generation of plugin metadata and packaging
+
+To create the packaging for a plugin a special Maven packaging would be created with an accompanying life-cycle in order to create the plugin metadata required and create an archive of the plugin that can be consumed at runtime.
+
+h3. Creation of an isolated classloader
+
+The plugin artifact and its dependency artifacts will be loaded in an isolated ClassRealm which is simply an extension of the standard URLClassLoader. Mercury would be responsible for resolving and retrieving the dependencies which would then be used to populate a ClassRealm where there would be a connection to the host applications ClassRealm as the parent but the search order would be child first, and the parent ClassRealm can optionally choose to limit the searching to particular classes. The application ClassRealm, or parent ClassRealm, should only expose the API in the form of and application interface and model classes that may be required by plugins.
+
+For debugging purposes we also need to keep track of what versions of artifacts are being used so that when we are debugging in the IDE we can find the specific sources for a given version of a library so that the developer can debug the correct version of a library being used for a plugin.
+
+h3. Discovery all Plexus components
+
+Once the ClassRealm is populated with the plugin artifact and its dependency artifacts a discovery operation must be performed on the plugin ClassRealm in order to discover any Plexus components that may be present in any of the artifacts required for the plugins execution.
+
+h3. Looking up the plugin with a configuration
+
+Once the ClassRealm has been populated and all Plexus components have been discovered a lookup can be performed to retrieve the primary plugin component. Currently the component would need to be looked up and then the BasicComponentConfigurator would need to configure the component with a given Plexus configuration. We will discuss later how we would retrieve the Plexus configuration required for a given plugin.
+
+When a plugin has a complete and valid configuration, the plugin would be looked up in the Plexus container and be ready to perform any operations requested of it.
+
+h3. Execution of the plugin
+
+I still need to do some work here to figure out how a dispatching to a particular plugin would occur because everything needs to be mediated through the host application. For a given action that is possible for a user to perform in the UI we need to know the URI that is to be used with its given parameters. That URI in turn must map internally to a method in a given component which belongs to a plugin. This mapping should actually be more generalized and it shouldn’t matter internally whether this maps to the core application or extension of the application in the form of plugins.
+
+In the short term we are working with the model where the URI maps to a resource, and the resource itself is a Plexus component which can itself have a reference to the host application in order to perform its work. This may not occur in the first versions of the plugin API but a resource needs to simply become the mapping mechanism by which parameters are taken from the REST side of the application and mapped into a method call within a given Plexus component. Whether that be the core Nexus application or a component provided by a plugin.
+
+At the very least in the short term the resource needs to know how to lookup the component that is required to perform the work. This needs to be made simple, for the time being we can write and test plugins working in the same realm until we get complete isolation working.
+
+h3. Plugins need a specific metadata model
+
+Each application will have its own model for plugins. Much of this model will be common across applications but there will always be issues specific to a particular applications’s plugins. Some of the issues that need to be taken into consideration:
+
+* Plugin dependencies
+* Plugin resources like Javascript files or images
+* Configuration metadata and default configuration values
+* Extension points that plugins might expose
+
+h3. The plugin manager may have to deal with particular actions when a plugin is
+
+* installation
+* activation
+* update
+* deactivation
+* un-installation
+
+When a plugin is installed we may want to check the license and make users agree. We may also want to unpack the given plugin in a particular location.
+
+We might want to separate between installation and activation, it might be nice to allow a user to activate/deactivate a plugin instead of having to uninstall and reinstall a plugin in particular cases. This would prevent having to reconfigure the plugin again. For example it might be nice to turn off LDAP authentication without having to uninstall the plugin.
+
+These particular phases in a plugin’s lifecycle can probably be generalized to all plugins so could be something implemented in all plugins. Here we could have the descriptor either point to methods for each of these phases to execute or we could create a lifecycle in Plexus for these phases.
+
+For a particular application plugin there will be a declarative descriptor for that plugin type.
+
+h3. Some general notes on Nexus
+
+The plugin metadata:
+* the plugin class
+* UI to contribute
+* what JS to hook into the UI
+* what resources to load into the UI
+* having packed or unpacked plugins, and positioning resources if necessary
+* maven can work out of the classloader, nexus plugins probably couldn't given the js and image resources
+
+h3. Other issues
+
+We need to look at Maven, and Nexus as use cases and figure out what each of them needs to be able to do
+
+* now what is really the difference between this and loading a component in plexus
+* do we want a model for sharing information among plugins, is this more like an extension point
+* do we need a sort of bus for application data
+* do we need a dictionary for our applications like Apple does. We could easily hook into this and this is the model we need to follow. Following the model of apple applications the dictionary is what the REST URI should attach to. Not creating custom logic in the resource code.
+* how many of our REST services do not map directory to a method in the application interface?
+
+- an example of adding js
+- an example of adding a URI
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/pom.xml
new file mode 100644
index 00000000..c1d6c167
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/pom.xml
@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language
+ governing permissions and limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.3.3</version>
+ </parent>
+
+ <artifactId>maven-core</artifactId>
+
+ <name>Maven Core</name>
+ <description>Maven Core classes.</description>
+
+ <scm><!-- remove when git scm url format can accept artifact-id at the end, as automatically inherited -->
+ <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
+ <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
+ <tag>maven-3.3.3</tag>
+ </scm>
+
+ <properties>
+ <checkstyle.violation.ignore>RedundantThrows,NewlineAtEndOfFile,ParameterNumber,MethodLength,FileLength,JavadocType,MethodName,MagicNumber,ConstantName,VisibilityModifier,InnerAssignment</checkstyle.violation.ignore>
+ </properties>
+
+ <dependencies>
+ <!-- Maven -->
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ </dependency>
+ <!-- Remove the following two deps to see how to remove Settings from the core -->
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-settings</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-settings-builder</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository-metadata</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model-builder</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-aether-provider</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-impl</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-util</artifactId>
+ </dependency>
+ <!-- Plexus -->
+ <dependency>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>org.eclipse.sisu.plexus</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.sisu</groupId>
+ <artifactId>sisu-guice</artifactId>
+ <classifier>no_aop</classifier>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interpolation</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-classworlds</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-sec-dispatcher</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-jxpath</groupId>
+ <artifactId>commons-jxpath</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>1.9.5</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ <filtering>true</filtering>
+ </resource>
+ </resources>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludes combine.children="append">
+ <exclude>lifecycle-executor.txt</exclude>
+ <exclude>plugin-manager.txt</exclude>
+ <exclude>project-builder.txt</exclude>
+ <exclude>src/site/resources/design/**</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
+ <plugin>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>lifecycle-mapping</artifactId>
+ <version>1.0.0</version>
+ <configuration>
+ <lifecycleMappingMetadata>
+ <pluginExecutions>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>buildnumber-maven-plugin</artifactId>
+ <versionRange>[1.2,)</versionRange>
+ <goals>
+ <goal>create-timestamp</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore />
+ </action>
+ </pluginExecution>
+ </pluginExecutions>
+ </lifecycleMappingMetadata>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-metadata</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>sisu-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <configuration>
+ <version>1.1.0</version>
+ <models>
+ <model>src/main/mdo/toolchains.mdo</model>
+ </models>
+ </configuration>
+ <executions>
+ <execution>
+ <id>plugin-site-doc</id>
+ <phase>pre-site</phase>
+ <goals>
+ <goal>xdoc</goal>
+ </goals>
+ <configuration>
+ <version>1.0.0</version>
+ <models>
+ <model>src/main/mdo/extension.mdo</model>
+ </models>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>buildnumber-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>create-noncanonicalrev</id>
+ <goals>
+ <goal>create-timestamp</goal>
+ </goals>
+ <configuration>
+ <timestampFormat>'NON-CANONICAL_'yyyy-MM-dd'T'HH:mm:ss_'${user.name}'</timestampFormat>
+ <timestampPropertyName>nonCanonicalRevision</timestampPropertyName>
+ </configuration>
+ </execution>
+ <execution>
+ <id>create-buildnumber</id>
+ <goals>
+ <goal>create</goal>
+ </goals>
+ <configuration>
+ <doCheck>false</doCheck>
+ <doUpdate>false</doUpdate>
+ <revisionOnScmFailure>${nonCanonicalRevision}</revisionOnScmFailure>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/project-builder.txt b/framework/src/maven/apache-maven-3.3.3/maven-core/project-builder.txt
new file mode 100644
index 00000000..a9aab65b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/project-builder.txt
@@ -0,0 +1 @@
+Maven Project Builder and Maven Model Builder
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/AbstractMavenLifecycleParticipant.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/AbstractMavenLifecycleParticipant.java
new file mode 100644
index 00000000..20f6c802
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/AbstractMavenLifecycleParticipant.java
@@ -0,0 +1,77 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+
+/**
+ * Allows core extensions to participate in Maven build session lifecycle.
+ *
+ * All callback methods (will) follow beforeXXX/afterXXX naming pattern to
+ * indicate at what lifecycle point it is being called.
+ *
+ * @see <a href="http://maven.apache.org/examples/maven-3-lifecycle-extensions.html">example</a>
+ * @see <a href="http://jira.codehaus.org/browse/MNG-4224">MNG-4224</a>
+ * @since 3.0-alpha-3
+ */
+public abstract class AbstractMavenLifecycleParticipant
+{
+
+ /**
+ * Invoked after all MavenProject instances have been created.
+ *
+ * This callback is intended to allow extensions to manipulate MavenProjects
+ * before they are sorted and actual build execution starts.
+ */
+ public void afterProjectsRead( MavenSession session )
+ throws MavenExecutionException
+ {
+ // do nothing
+ }
+
+ /**
+ * Invoked after MavenSession instance has been created.
+ *
+ * This callback is intended to allow extensions to inject execution properties,
+ * activate profiles and perform similar tasks that affect MavenProject
+ * instance construction.
+ */
+ // TODO: This is too early for build extensions, so maybe just remove it?
+ public void afterSessionStart( MavenSession session )
+ throws MavenExecutionException
+ {
+ // do nothing
+ }
+
+ /**
+ * Invoked after all projects were built.
+ *
+ * This callback is intended to allow extensions to perform cleanup of any
+ * allocated external resources after the build. It is invoked on best-effort
+ * basis and may be missed due to an Error or RuntimeException in Maven core
+ * code.
+ * @since 3.2.1, MNG-5389
+ */
+ public void afterSessionEnd( MavenSession session )
+ throws MavenExecutionException
+ {
+ // do nothing
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ArtifactFilterManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ArtifactFilterManager.java
new file mode 100644
index 00000000..2cf9f996
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ArtifactFilterManager.java
@@ -0,0 +1,51 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Set;
+
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+
+public interface ArtifactFilterManager
+{
+ /**
+ * Returns a filter for core + extension artifacts.
+ *
+ * @deprecated use {@code META-INF/maven/extension.xml} to define artifacts exported by Maven core and plugin
+ * extensions.
+ */
+ ArtifactFilter getArtifactFilter();
+
+ /**
+ * Returns a filter for only the core artifacts.
+ */
+ ArtifactFilter getCoreArtifactFilter();
+
+ /**
+ * Exclude an extension artifact (doesn't affect getArtifactFilter's result, only getExtensionArtifactFilter).
+ *
+ * @deprecated use {@code META-INF/maven/extension.xml} to define artifacts exported by Maven core and plugin
+ * extensions.
+ */
+ void excludeArtifact( String artifactId );
+
+ Set<String> getCoreArtifactExcludes();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ArtifactFilterManagerDelegate.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ArtifactFilterManagerDelegate.java
new file mode 100644
index 00000000..13893254
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ArtifactFilterManagerDelegate.java
@@ -0,0 +1,34 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Set;
+
+/**
+ * @deprecated use {@code META-INF/maven/extension.xml} to define artifacts exported by Maven core extensions.
+ */
+public interface ArtifactFilterManagerDelegate
+{
+
+ void addExcludes( Set<String> excludes );
+
+ void addCoreExcludes( Set<String> excludes );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/BuildAbort.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/BuildAbort.java
new file mode 100644
index 00000000..3255e32b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/BuildAbort.java
@@ -0,0 +1,39 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * A special throwable used to signal a graceful abort of the build.
+ */
+public class BuildAbort
+ extends Error
+{
+
+ public BuildAbort( String message )
+ {
+ super( message );
+ }
+
+ public BuildAbort( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/BuildFailureException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/BuildFailureException.java
new file mode 100644
index 00000000..d35b0d2a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/BuildFailureException.java
@@ -0,0 +1,39 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * One or more builds failed.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class BuildFailureException
+ extends Exception
+{
+ public BuildFailureException( String message )
+ {
+ super( message );
+ }
+
+ public BuildFailureException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java
new file mode 100644
index 00000000..1962f917
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java
@@ -0,0 +1,112 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.ExclusionSetFilter;
+import org.apache.maven.extension.internal.CoreExportsProvider;
+
+/**
+ * @author Jason van Zyl
+ */
+@Named
+@Singleton
+@SuppressWarnings( "deprecation" )
+public class DefaultArtifactFilterManager
+ implements ArtifactFilterManager
+{
+
+ // this is a live injected collection
+ protected final List<ArtifactFilterManagerDelegate> delegates;
+
+ protected Set<String> excludedArtifacts;
+
+ private final Set<String> coreArtifacts;
+
+ @Inject
+ public DefaultArtifactFilterManager( List<ArtifactFilterManagerDelegate> delegates,
+ CoreExportsProvider coreExports )
+ {
+ this.delegates = delegates;
+ this.coreArtifacts = coreExports.get().getExportedArtifacts();
+ }
+
+ private synchronized Set<String> getExcludedArtifacts()
+ {
+ if ( excludedArtifacts == null )
+ {
+ excludedArtifacts = new LinkedHashSet<String>( coreArtifacts );
+ }
+ return excludedArtifacts;
+ }
+
+ /**
+ * Returns the artifact filter for the core + extension artifacts.
+ *
+ * @see org.apache.maven.ArtifactFilterManager#getArtifactFilter()
+ */
+ public ArtifactFilter getArtifactFilter()
+ {
+ Set<String> excludes = new LinkedHashSet<String>( getExcludedArtifacts() );
+
+ for ( ArtifactFilterManagerDelegate delegate : delegates )
+ {
+ delegate.addExcludes( excludes );
+ }
+
+ return new ExclusionSetFilter( excludes );
+ }
+
+ /**
+ * Returns the artifact filter for the standard core artifacts.
+ *
+ * @see org.apache.maven.ArtifactFilterManager#getExtensionDependencyFilter()
+ */
+ public ArtifactFilter getCoreArtifactFilter()
+ {
+ return new ExclusionSetFilter( getCoreArtifactExcludes() );
+ }
+
+ public void excludeArtifact( String artifactId )
+ {
+ getExcludedArtifacts().add( artifactId );
+ }
+
+ public Set<String> getCoreArtifactExcludes()
+ {
+ Set<String> excludes = new LinkedHashSet<String>( coreArtifacts );
+
+ for ( ArtifactFilterManagerDelegate delegate : delegates )
+ {
+ delegate.addCoreExcludes( excludes );
+ }
+
+ return excludes;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
new file mode 100644
index 00000000..94e75e02
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
@@ -0,0 +1,521 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.execution.DefaultMavenExecutionResult;
+import org.apache.maven.execution.ExecutionEvent;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionResult;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.ProjectDependencyGraph;
+import org.apache.maven.graph.GraphBuilder;
+import org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory;
+import org.apache.maven.lifecycle.internal.ExecutionEventCatapult;
+import org.apache.maven.lifecycle.internal.LifecycleStarter;
+import org.apache.maven.model.building.ModelProblem;
+import org.apache.maven.model.building.Result;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuilder;
+import org.apache.maven.repository.LocalRepositoryNotAccessibleException;
+import org.apache.maven.session.scope.internal.SessionScope;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.logging.Logger;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.WorkspaceReader;
+import org.eclipse.aether.util.repository.ChainedWorkspaceReader;
+
+import com.google.common.collect.Iterables;
+
+/**
+ * @author Jason van Zyl
+ */
+@Component( role = Maven.class )
+public class DefaultMaven
+ implements Maven
+{
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ protected ProjectBuilder projectBuilder;
+
+ @Requirement
+ private LifecycleStarter lifecycleStarter;
+
+ @Requirement
+ protected PlexusContainer container;
+
+ @Requirement
+ private ExecutionEventCatapult eventCatapult;
+
+ @Requirement
+ private LegacySupport legacySupport;
+
+ @Requirement
+ private SessionScope sessionScope;
+
+ @Requirement
+ private DefaultRepositorySystemSessionFactory repositorySessionFactory;
+
+ @Requirement( hint = GraphBuilder.HINT )
+ private GraphBuilder graphBuilder;
+
+ @Override
+ public MavenExecutionResult execute( MavenExecutionRequest request )
+ {
+ MavenExecutionResult result;
+
+ try
+ {
+ result = doExecute( request );
+ }
+ catch ( OutOfMemoryError e )
+ {
+ result = addExceptionToResult( new DefaultMavenExecutionResult(), e );
+ }
+ catch ( RuntimeException e )
+ {
+ //TODO Hack to make the cycle detection the same for the new graph builder
+ if ( e.getCause() instanceof ProjectCycleException )
+ {
+ result = addExceptionToResult( new DefaultMavenExecutionResult(), e.getCause() );
+ }
+ else
+ {
+ result = addExceptionToResult( new DefaultMavenExecutionResult(),
+ new InternalErrorException( "Internal error: " + e, e ) );
+ }
+ }
+ finally
+ {
+ legacySupport.setSession( null );
+ }
+
+ return result;
+ }
+
+ //
+ // 1) Setup initial properties.
+ //
+ // 2) Validate local repository directory is accessible.
+ //
+ // 3) Create RepositorySystemSession.
+ //
+ // 4) Create MavenSession.
+ //
+ // 5) Execute AbstractLifecycleParticipant.afterSessionStart(session)
+ //
+ // 6) Get reactor projects looking for general POM errors
+ //
+ // 7) Create ProjectDependencyGraph using trimming which takes into account --projects and reactor mode.
+ // This ensures that the projects passed into the ReactorReader are only those specified.
+ //
+ // 8) Create ReactorReader with the getProjectMap( projects ). NOTE that getProjectMap(projects) is the code that
+ // checks for duplicate projects definitions in the build. Ideally this type of duplicate checking should be
+ // part of getting the reactor projects in 6). The duplicate checking is conflated with getProjectMap(projects).
+ //
+ // 9) Execute AbstractLifecycleParticipant.afterProjectsRead(session)
+ //
+ // 10) Create ProjectDependencyGraph without trimming (as trimming was done in 7). A new topological sort is
+ // required after the execution of 9) as the AbstractLifecycleParticipants are free to mutate the MavenProject
+ // instances, which may change dependencies which can, in turn, affect the build order.
+ //
+ // 11) Execute LifecycleStarter.start()
+ //
+ @SuppressWarnings( "checkstyle:methodlength" )
+ private MavenExecutionResult doExecute( MavenExecutionRequest request )
+ {
+ request.setStartTime( new Date() );
+
+ MavenExecutionResult result = new DefaultMavenExecutionResult();
+
+ try
+ {
+ validateLocalRepository( request );
+ }
+ catch ( LocalRepositoryNotAccessibleException e )
+ {
+ return addExceptionToResult( result, e );
+ }
+
+ //
+ // We enter the session scope right after the MavenSession creation and before any of the
+ // AbstractLifecycleParticipant lookups
+ // so that @SessionScoped components can be @Injected into AbstractLifecycleParticipants.
+ //
+ sessionScope.enter();
+ try
+ {
+ DefaultRepositorySystemSession repoSession =
+ (DefaultRepositorySystemSession) newRepositorySession( request );
+ MavenSession session = new MavenSession( container, repoSession, request, result );
+
+ sessionScope.seed( MavenSession.class, session );
+
+ legacySupport.setSession( session );
+
+ return doExecute( request, session, result, repoSession );
+ }
+ finally
+ {
+ sessionScope.exit();
+ }
+ }
+
+ private MavenExecutionResult doExecute( MavenExecutionRequest request, MavenSession session,
+ MavenExecutionResult result, DefaultRepositorySystemSession repoSession )
+ {
+ try
+ {
+ for ( AbstractMavenLifecycleParticipant listener : getLifecycleParticipants( Collections
+ .<MavenProject>emptyList() ) )
+ {
+ listener.afterSessionStart( session );
+ }
+ }
+ catch ( MavenExecutionException e )
+ {
+ return addExceptionToResult( result, e );
+ }
+
+ eventCatapult.fire( ExecutionEvent.Type.ProjectDiscoveryStarted, session, null );
+
+ Result<? extends ProjectDependencyGraph> graphResult = buildGraph( session, result );
+
+ if ( graphResult.hasErrors() )
+ {
+ return addExceptionToResult( result,
+ Iterables.toArray( graphResult.getProblems(), ModelProblem.class )[0]
+ .getException() );
+ }
+
+ try
+ {
+ session.setProjectMap( getProjectMap( session.getProjects() ) );
+ }
+ catch ( DuplicateProjectException e )
+ {
+ return addExceptionToResult( result, e );
+ }
+
+ WorkspaceReader reactorWorkspace;
+ try
+ {
+ reactorWorkspace = container.lookup( WorkspaceReader.class, ReactorReader.HINT );
+ }
+ catch ( ComponentLookupException e )
+ {
+ return addExceptionToResult( result, e );
+ }
+
+ //
+ // Desired order of precedence for local artifact repositories
+ //
+ // Reactor
+ // Workspace
+ // User Local Repository
+ //
+ repoSession.setWorkspaceReader( ChainedWorkspaceReader.newInstance( reactorWorkspace,
+ repoSession.getWorkspaceReader() ) );
+
+ repoSession.setReadOnly();
+
+ ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+ try
+ {
+ for ( AbstractMavenLifecycleParticipant listener : getLifecycleParticipants( session.getProjects() ) )
+ {
+ Thread.currentThread().setContextClassLoader( listener.getClass().getClassLoader() );
+
+ listener.afterProjectsRead( session );
+ }
+ }
+ catch ( MavenExecutionException e )
+ {
+ return addExceptionToResult( result, e );
+ }
+ finally
+ {
+ Thread.currentThread().setContextClassLoader( originalClassLoader );
+ }
+
+ //
+ // The projects need to be topologically after the participants have run their afterProjectsRead(session)
+ // because the participant is free to change the dependencies of a project which can potentially change the
+ // topological order of the projects, and therefore can potentially change the build order.
+ //
+ // Note that participants may affect the topological order of the projects but it is
+ // not expected that a participant will add or remove projects from the session.
+ //
+
+ graphResult = buildGraph( session, result );
+
+ if ( graphResult.hasErrors() )
+ {
+ return addExceptionToResult( result,
+ Iterables.toArray( graphResult.getProblems(), ModelProblem.class )[0]
+ .getException() );
+ }
+
+ try
+ {
+ if ( result.hasExceptions() )
+ {
+ return result;
+ }
+
+ result.setTopologicallySortedProjects( session.getProjects() );
+
+ result.setProject( session.getTopLevelProject() );
+
+ lifecycleStarter.execute( session );
+
+ validateActivatedProfiles( session.getProjects(), request.getActiveProfiles() );
+
+ if ( session.getResult().hasExceptions() )
+ {
+ return addExceptionToResult( result, session.getResult().getExceptions().get( 0 ) );
+ }
+ }
+ finally
+ {
+ try
+ {
+ afterSessionEnd( session.getProjects(), session );
+ }
+ catch ( MavenExecutionException e )
+ {
+ return addExceptionToResult( result, e );
+ }
+ }
+
+ return result;
+ }
+
+ private void afterSessionEnd( Collection<MavenProject> projects, MavenSession session )
+ throws MavenExecutionException
+ {
+ ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+ try
+ {
+ for ( AbstractMavenLifecycleParticipant listener : getLifecycleParticipants( projects ) )
+ {
+ Thread.currentThread().setContextClassLoader( listener.getClass().getClassLoader() );
+
+ listener.afterSessionEnd( session );
+ }
+ }
+ finally
+ {
+ Thread.currentThread().setContextClassLoader( originalClassLoader );
+ }
+ }
+
+ public RepositorySystemSession newRepositorySession( MavenExecutionRequest request )
+ {
+ return repositorySessionFactory.newRepositorySession( request );
+ }
+
+ private void validateLocalRepository( MavenExecutionRequest request )
+ throws LocalRepositoryNotAccessibleException
+ {
+ File localRepoDir = request.getLocalRepositoryPath();
+
+ logger.debug( "Using local repository at " + localRepoDir );
+
+ localRepoDir.mkdirs();
+
+ if ( !localRepoDir.isDirectory() )
+ {
+ throw new LocalRepositoryNotAccessibleException( "Could not create local repository at " + localRepoDir );
+ }
+ }
+
+ private Collection<AbstractMavenLifecycleParticipant> getLifecycleParticipants( Collection<MavenProject> projects )
+ {
+ Collection<AbstractMavenLifecycleParticipant> lifecycleListeners =
+ new LinkedHashSet<AbstractMavenLifecycleParticipant>();
+
+ ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+ try
+ {
+ try
+ {
+ lifecycleListeners.addAll( container.lookupList( AbstractMavenLifecycleParticipant.class ) );
+ }
+ catch ( ComponentLookupException e )
+ {
+ // this is just silly, lookupList should return an empty list!
+ logger.warn( "Failed to lookup lifecycle participants: " + e.getMessage() );
+ }
+
+ Collection<ClassLoader> scannedRealms = new HashSet<ClassLoader>();
+
+ for ( MavenProject project : projects )
+ {
+ ClassLoader projectRealm = project.getClassRealm();
+
+ if ( projectRealm != null && scannedRealms.add( projectRealm ) )
+ {
+ Thread.currentThread().setContextClassLoader( projectRealm );
+
+ try
+ {
+ lifecycleListeners.addAll( container.lookupList( AbstractMavenLifecycleParticipant.class ) );
+ }
+ catch ( ComponentLookupException e )
+ {
+ // this is just silly, lookupList should return an empty list!
+ logger.warn( "Failed to lookup lifecycle participants: " + e.getMessage() );
+ }
+ }
+ }
+ }
+ finally
+ {
+ Thread.currentThread().setContextClassLoader( originalClassLoader );
+ }
+
+ return lifecycleListeners;
+ }
+
+ private MavenExecutionResult addExceptionToResult( MavenExecutionResult result, Throwable e )
+ {
+ if ( !result.getExceptions().contains( e ) )
+ {
+ result.addException( e );
+ }
+
+ return result;
+ }
+
+ private void validateActivatedProfiles( List<MavenProject> projects, List<String> activeProfileIds )
+ {
+ Collection<String> notActivatedProfileIds = new LinkedHashSet<String>( activeProfileIds );
+
+ for ( MavenProject project : projects )
+ {
+ for ( List<String> profileIds : project.getInjectedProfileIds().values() )
+ {
+ notActivatedProfileIds.removeAll( profileIds );
+ }
+ }
+
+ for ( String notActivatedProfileId : notActivatedProfileIds )
+ {
+ logger.warn( "The requested profile \"" + notActivatedProfileId
+ + "\" could not be activated because it does not exist." );
+ }
+ }
+
+ private Map<String, MavenProject> getProjectMap( Collection<MavenProject> projects )
+ throws DuplicateProjectException
+ {
+ Map<String, MavenProject> index = new LinkedHashMap<String, MavenProject>();
+ Map<String, List<File>> collisions = new LinkedHashMap<String, List<File>>();
+
+ for ( MavenProject project : projects )
+ {
+ String projectId = ArtifactUtils.key( project.getGroupId(), project.getArtifactId(), project.getVersion() );
+
+ MavenProject collision = index.get( projectId );
+
+ if ( collision == null )
+ {
+ index.put( projectId, project );
+ }
+ else
+ {
+ List<File> pomFiles = collisions.get( projectId );
+
+ if ( pomFiles == null )
+ {
+ pomFiles = new ArrayList<File>( Arrays.asList( collision.getFile(), project.getFile() ) );
+ collisions.put( projectId, pomFiles );
+ }
+ else
+ {
+ pomFiles.add( project.getFile() );
+ }
+ }
+ }
+
+ if ( !collisions.isEmpty() )
+ {
+ throw new DuplicateProjectException( "Two or more projects in the reactor"
+ + " have the same identifier, please make sure that <groupId>:<artifactId>:<version>"
+ + " is unique for each project: " + collisions, collisions );
+ }
+
+ return index;
+ }
+
+ private Result<? extends ProjectDependencyGraph> buildGraph( MavenSession session, MavenExecutionResult result )
+ {
+ Result<? extends ProjectDependencyGraph> graphResult = graphBuilder.build( session );
+ for ( ModelProblem problem : graphResult.getProblems() )
+ {
+ if ( problem.getSeverity() == ModelProblem.Severity.WARNING )
+ {
+ logger.warn( problem.toString() );
+ }
+ else
+ {
+ logger.error( problem.toString() );
+ }
+ }
+
+ if ( !graphResult.hasErrors() )
+ {
+ ProjectDependencyGraph projectDependencyGraph = graphResult.get();
+ session.setProjects( projectDependencyGraph.getSortedProjects() );
+ session.setAllProjects( projectDependencyGraph.getSortedProjects() );
+ session.setProjectDependencyGraph( projectDependencyGraph );
+ }
+
+ return graphResult;
+ }
+
+ @Deprecated
+ // 5 January 2014
+ protected Logger getLogger()
+ {
+ return logger;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java
new file mode 100644
index 00000000..fa8be382
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java
@@ -0,0 +1,217 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException;
+import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
+import org.apache.maven.artifact.resolver.filter.CumulativeScopeArtifactFilter;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.artifact.ProjectArtifact;
+import org.apache.maven.repository.RepositorySystem;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+@Deprecated
+@Component( role = ProjectDependenciesResolver.class )
+public class DefaultProjectDependenciesResolver
+ implements ProjectDependenciesResolver
+{
+
+ @Requirement
+ private RepositorySystem repositorySystem;
+
+ @Requirement
+ private ResolutionErrorHandler resolutionErrorHandler;
+
+ public Set<Artifact> resolve( MavenProject project, Collection<String> scopesToResolve, MavenSession session )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ return resolve( Collections.singleton( project ), scopesToResolve, session );
+ }
+
+ public Set<Artifact> resolve( MavenProject project, Collection<String> scopesToCollect,
+ Collection<String> scopesToResolve, MavenSession session )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ Set<MavenProject> mavenProjects = Collections.singleton( project );
+ return resolveImpl( mavenProjects, scopesToCollect, scopesToResolve, session,
+ getIgnorableArtifacts( mavenProjects ) );
+ }
+
+ public Set<Artifact> resolve( Collection<? extends MavenProject> projects, Collection<String> scopesToResolve,
+ MavenSession session )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ return resolveImpl( projects, null, scopesToResolve, session, getIgnorableArtifacts( projects ) );
+ }
+
+ public Set<Artifact> resolve( MavenProject project, Collection<String> scopesToCollect,
+ Collection<String> scopesToResolve, MavenSession session,
+ Set<Artifact> ignoreableArtifacts )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ return resolveImpl( Collections.singleton( project ), scopesToCollect, scopesToResolve, session,
+ getIgnorableArtifacts( ignoreableArtifacts ) );
+ }
+
+
+ private Set<Artifact> resolveImpl( Collection<? extends MavenProject> projects, Collection<String> scopesToCollect,
+ Collection<String> scopesToResolve, MavenSession session,
+ Set<String> projectIds )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ Set<Artifact> resolved = new LinkedHashSet<Artifact>();
+
+ if ( projects == null || projects.isEmpty() )
+ {
+ return resolved;
+ }
+
+ if ( ( scopesToCollect == null || scopesToCollect.isEmpty() )
+ && ( scopesToResolve == null || scopesToResolve.isEmpty() ) )
+ {
+ return resolved;
+ }
+
+ /*
+
+ Logic for transitive global exclusions
+
+ List<String> exclusions = new ArrayList<String>();
+
+ for ( Dependency d : project.getDependencies() )
+ {
+ if ( d.getExclusions() != null )
+ {
+ for ( Exclusion e : d.getExclusions() )
+ {
+ exclusions.add( e.getGroupId() + ":" + e.getArtifactId() );
+ }
+ }
+ }
+
+ ArtifactFilter scopeFilter = new ScopeArtifactFilter( scope );
+
+ ArtifactFilter filter;
+
+ if ( ! exclusions.isEmpty() )
+ {
+ filter = new AndArtifactFilter( Arrays.asList( new ArtifactFilter[]{
+ new ExcludesArtifactFilter( exclusions ), scopeFilter } ) );
+ }
+ else
+ {
+ filter = scopeFilter;
+ }
+ */
+
+ CumulativeScopeArtifactFilter resolutionScopeFilter = new CumulativeScopeArtifactFilter( scopesToResolve );
+
+ CumulativeScopeArtifactFilter collectionScopeFilter = new CumulativeScopeArtifactFilter( scopesToCollect );
+ collectionScopeFilter = new CumulativeScopeArtifactFilter( collectionScopeFilter, resolutionScopeFilter );
+
+ ArtifactResolutionRequest request =
+ new ArtifactResolutionRequest().setResolveRoot( false ).setResolveTransitively( true ).setCollectionFilter(
+ collectionScopeFilter ).setResolutionFilter( resolutionScopeFilter ).setLocalRepository(
+ session.getLocalRepository() ).setOffline( session.isOffline() ).setForceUpdate(
+ session.getRequest().isUpdateSnapshots() );
+ request.setServers( session.getRequest().getServers() );
+ request.setMirrors( session.getRequest().getMirrors() );
+ request.setProxies( session.getRequest().getProxies() );
+
+ for ( MavenProject project : projects )
+ {
+ request.setArtifact( new ProjectArtifact( project ) );
+ request.setArtifactDependencies( project.getDependencyArtifacts() );
+ request.setManagedVersionMap( project.getManagedVersionMap() );
+ request.setRemoteRepositories( project.getRemoteArtifactRepositories() );
+
+ ArtifactResolutionResult result = repositorySystem.resolve( request );
+
+ try
+ {
+ resolutionErrorHandler.throwErrors( request, result );
+ }
+ catch ( MultipleArtifactsNotFoundException e )
+ {
+
+ Collection<Artifact> missing = new HashSet<Artifact>( e.getMissingArtifacts() );
+
+ for ( Iterator<Artifact> it = missing.iterator(); it.hasNext(); )
+ {
+ String key = ArtifactUtils.key( it.next() );
+ if ( projectIds.contains( key ) )
+ {
+ it.remove();
+ }
+ }
+
+ if ( !missing.isEmpty() )
+ {
+ throw e;
+ }
+ }
+
+ resolved.addAll( result.getArtifacts() );
+ }
+
+ return resolved;
+ }
+
+
+ private Set<String> getIgnorableArtifacts( Collection<? extends MavenProject> projects )
+ {
+ Set<String> projectIds = new HashSet<String>( projects.size() * 2 );
+
+ for ( MavenProject p : projects )
+ {
+ String key = ArtifactUtils.key( p.getGroupId(), p.getArtifactId(), p.getVersion() );
+ projectIds.add( key );
+ }
+ return projectIds;
+ }
+
+ private Set<String> getIgnorableArtifacts( Iterable<Artifact> artifactIterable )
+ {
+ Set<String> projectIds = new HashSet<String>();
+
+ for ( Artifact artifact : artifactIterable )
+ {
+ String key = ArtifactUtils.key( artifact );
+ projectIds.add( key );
+ }
+ return projectIds;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DuplicateProjectException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DuplicateProjectException.java
new file mode 100644
index 00000000..b1398729
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DuplicateProjectException.java
@@ -0,0 +1,61 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Signals a collision of two or more projects with the same g:a:v during a reactor build.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DuplicateProjectException
+ extends MavenExecutionException
+{
+
+ private Map<String, List<File>> collisions;
+
+ /**
+ * Creates a new exception with specified details.
+ *
+ * @param message The message text, may be {@code null}.
+ * @param collisions The POM files of the projects that collided, indexed by their g:a:v, may be {@code null}.
+ */
+ public DuplicateProjectException( String message, Map<String, List<File>> collisions )
+ {
+ super( message, (File) null );
+
+ this.collisions = ( collisions != null ) ? collisions : new LinkedHashMap<String, List<File>>();
+ }
+
+ /**
+ * Gets the POM files of the projects that collided.
+ *
+ * @return The POM files of the projects that collided, indexed by their g:a:v, never {@code null}.
+ */
+ public Map<String, List<File>> getCollisions()
+ {
+ return collisions;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/InternalErrorException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/InternalErrorException.java
new file mode 100644
index 00000000..afe92c1b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/InternalErrorException.java
@@ -0,0 +1,36 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Signals an internal error in Maven itself, e.g. a programming bug.
+ *
+ * @author Benjamin Bentmann
+ */
+public class InternalErrorException
+ extends MavenExecutionException
+{
+
+ public InternalErrorException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/Maven.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/Maven.java
new file mode 100644
index 00000000..85638476
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/Maven.java
@@ -0,0 +1,34 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionResult;
+
+/**
+ * @author Jason van Zyl
+ */
+public interface Maven
+{
+ @Deprecated
+ String POMv4 = "pom.xml";
+
+ MavenExecutionResult execute( MavenExecutionRequest request );
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/MavenExecutionException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/MavenExecutionException.java
new file mode 100644
index 00000000..5708e525
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/MavenExecutionException.java
@@ -0,0 +1,55 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.project.ProjectBuildingException;
+
+/**
+ * @author Jason van Zyl
+ */
+public class MavenExecutionException
+ extends Exception
+{
+ private File pomFile;
+
+ public MavenExecutionException( String message, File pomFile )
+ {
+ super( message );
+ this.pomFile = pomFile;
+ }
+
+ public MavenExecutionException( String message, File pomFile, ProjectBuildingException cause )
+ {
+ super( message, cause );
+ this.pomFile = pomFile;
+ }
+
+ public MavenExecutionException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ public File getPomFile()
+ {
+ return pomFile;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/MissingModuleException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/MissingModuleException.java
new file mode 100644
index 00000000..c920a6ea
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/MissingModuleException.java
@@ -0,0 +1,48 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+public class MissingModuleException
+ extends MavenExecutionException
+{
+
+ private File moduleFile;
+ private final String moduleName;
+
+ public MissingModuleException( String moduleName, File moduleFile, File pomFile )
+ {
+ super( "The module: " + moduleName + " cannot be found in file: " + moduleFile, pomFile );
+ this.moduleName = moduleName;
+ this.moduleFile = moduleFile;
+ }
+
+ public File getModuleFile()
+ {
+ return moduleFile;
+ }
+
+ public String getModuleName()
+ {
+ return moduleName;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ProjectBuildFailureException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ProjectBuildFailureException.java
new file mode 100644
index 00000000..66ed3a08
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ProjectBuildFailureException.java
@@ -0,0 +1,55 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugin.MojoFailureException;
+
+/**
+ * Exception which occurs when a normal (i.e. non-aggregator) mojo fails to
+ * execute. In this case, the mojo failed while executing against a particular
+ * project instance, so we can wrap the {@link MojoFailureException} with context
+ * information including projectId that caused the failure.
+ *
+ * @author jdcasey
+ *
+ */
+public class ProjectBuildFailureException
+ extends BuildFailureException
+{
+
+ private final String projectId;
+
+ public ProjectBuildFailureException( String projectId, MojoFailureException cause )
+ {
+ super( "Build for project: " + projectId + " failed during execution of mojo.", cause );
+
+ this.projectId = projectId;
+ }
+
+ public MojoFailureException getMojoFailureException()
+ {
+ return (MojoFailureException) getCause();
+ }
+
+ public String getProjectId()
+ {
+ return projectId;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ProjectCycleException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ProjectCycleException.java
new file mode 100644
index 00000000..ecd8ecac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ProjectCycleException.java
@@ -0,0 +1,39 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.codehaus.plexus.util.dag.CycleDetectedException;
+
+/**
+ * @author jdcasey
+ */
+public class ProjectCycleException
+ extends BuildFailureException
+{
+ public ProjectCycleException( String message )
+ {
+ super( message );
+ }
+
+ public ProjectCycleException( String message, CycleDetectedException cause )
+ {
+ super( message, cause );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ProjectDependenciesResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ProjectDependenciesResolver.java
new file mode 100644
index 00000000..01e62278
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ProjectDependenciesResolver.java
@@ -0,0 +1,95 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.project.MavenProject;
+
+@Deprecated
+/**
+ * @deprecated As of 3.2.2, and there is no direct replacement. This is an internal class which was not marked as such,
+ * but should have been.
+ * @author jvanzyl
+ *
+ */
+public interface ProjectDependenciesResolver
+{
+
+ /**
+ * Resolves the transitive dependencies of the specified project.
+ *
+ * @param project The project whose dependencies should be resolved, must not be {@code null}.
+ * @param scopesToResolve The dependency scopes that should be resolved, may be {@code null}.
+ * @param session The current build session, must not be {@code null}.
+ * @return The transitive dependencies of the specified project that match the requested scopes, never {@code null}.
+ */
+ Set<Artifact> resolve( MavenProject project, Collection<String> scopesToResolve, MavenSession session )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+ /**
+ * Resolves the transitive dependencies of the specified project.
+ *
+ * @param project The project whose dependencies should be resolved, must not be {@code null}.
+ * @param scopesToCollect The dependency scopes that should be collected, may be {@code null}.
+ * @param scopesToResolve The dependency scopes that should be collected and also resolved, may be {@code null}.
+ * @param session The current build session, must not be {@code null}.
+ * @return The transitive dependencies of the specified project that match the requested scopes, never {@code null}.
+ */
+ Set<Artifact> resolve( MavenProject project, Collection<String> scopesToCollect,
+ Collection<String> scopesToResolve, MavenSession session )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+ /**
+ * Resolves the transitive dependencies of the specified project.
+ *
+ * @param project The project whose dependencies should be resolved, must not be {@code null}.
+ * @param scopesToCollect The dependency scopes that should be collected, may be {@code null}.
+ * @param scopesToResolve The dependency scopes that should be collected and also resolved, may be {@code null}.
+ * @param session The current build session, must not be {@code null}.
+ * @param ignoreableArtifacts Artifacts that need not be resolved
+ * @return The transitive dependencies of the specified project that match the requested scopes, never {@code null}.
+ */
+ Set<Artifact> resolve( MavenProject project, Collection<String> scopesToCollect,
+ Collection<String> scopesToResolve, MavenSession session, Set<Artifact> ignoreableArtifacts )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+ /**
+ * Resolves the transitive dependencies of the specified projects. Note that dependencies which can't be resolved
+ * from any repository but are present among the set of specified projects will not cause an exception. Instead,
+ * those unresolved artifacts will be returned in the result set, allowing the caller to take special care of
+ * artifacts that haven't been build yet.
+ *
+ * @param projects The projects whose dependencies should be resolved, may be {@code null}.
+ * @param scopes The dependency scopes that should be resolved, may be {@code null}.
+ * @param session The current build session, must not be {@code null}.
+ * @return The transitive dependencies of the specified projects that match the requested scopes, never
+ * {@code null}.
+ */
+ Set<Artifact> resolve( Collection<? extends MavenProject> projects, Collection<String> scopes,
+ MavenSession session )
+ throws ArtifactResolutionException, ArtifactNotFoundException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ReactorReader.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ReactorReader.java
new file mode 100644
index 00000000..252bdd09
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ReactorReader.java
@@ -0,0 +1,255 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Model;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.repository.internal.MavenWorkspaceReader;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.repository.WorkspaceRepository;
+import org.eclipse.aether.util.artifact.ArtifactIdUtils;
+
+/**
+ * An implementation of a workspace reader that knows how to search the Maven reactor for artifacts, either
+ * as packaged jar if it has been built, or only compile output directory if packaging hasn't happened yet.
+ *
+ * @author Jason van Zyl
+ */
+@Named( ReactorReader.HINT )
+@SessionScoped
+class ReactorReader
+ implements MavenWorkspaceReader
+{
+ public static final String HINT = "reactor";
+
+ private static final Collection<String> COMPILE_PHASE_TYPES = Arrays.asList( "jar", "ejb-client" );
+
+ private Map<String, MavenProject> projectsByGAV;
+
+ private Map<String, List<MavenProject>> projectsByGA;
+
+ private WorkspaceRepository repository;
+
+ @Inject
+ public ReactorReader( MavenSession session )
+ {
+ projectsByGAV = session.getProjectMap();
+
+ projectsByGA = new HashMap<String, List<MavenProject>>( projectsByGAV.size() * 2 );
+ for ( MavenProject project : projectsByGAV.values() )
+ {
+ String key = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
+
+ List<MavenProject> projects = projectsByGA.get( key );
+
+ if ( projects == null )
+ {
+ projects = new ArrayList<MavenProject>( 1 );
+ projectsByGA.put( key, projects );
+ }
+
+ projects.add( project );
+ }
+
+ repository = new WorkspaceRepository( "reactor", new HashSet<String>( projectsByGAV.keySet() ) );
+ }
+
+ //
+ // Public API
+ //
+
+ public WorkspaceRepository getRepository()
+ {
+ return repository;
+ }
+
+ public File findArtifact( Artifact artifact )
+ {
+ String projectKey = ArtifactUtils.key( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() );
+
+ MavenProject project = projectsByGAV.get( projectKey );
+
+ if ( project != null )
+ {
+ File file = find( project, artifact );
+ if ( file == null && project != project.getExecutionProject() )
+ {
+ file = find( project.getExecutionProject(), artifact );
+ }
+ return file;
+ }
+
+ return null;
+ }
+
+ public List<String> findVersions( Artifact artifact )
+ {
+ String key = ArtifactUtils.versionlessKey( artifact.getGroupId(), artifact.getArtifactId() );
+
+ List<MavenProject> projects = projectsByGA.get( key );
+ if ( projects == null || projects.isEmpty() )
+ {
+ return Collections.emptyList();
+ }
+
+ List<String> versions = new ArrayList<String>();
+
+ for ( MavenProject project : projects )
+ {
+ if ( find( project, artifact ) != null )
+ {
+ versions.add( project.getVersion() );
+ }
+ }
+
+ return Collections.unmodifiableList( versions );
+ }
+
+ @Override
+ public Model findModel( Artifact artifact )
+ {
+ String projectKey = ArtifactUtils.key( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() );
+ MavenProject project = projectsByGAV.get( projectKey );
+ return project == null ? null : project.getModel();
+ }
+
+ //
+ // Implementation
+ //
+
+ private File find( MavenProject project, Artifact artifact )
+ {
+ if ( "pom".equals( artifact.getExtension() ) )
+ {
+ return project.getFile();
+ }
+
+ Artifact projectArtifact = findMatchingArtifact( project, artifact );
+
+ if ( hasArtifactFileFromPackagePhase( projectArtifact ) )
+ {
+ return projectArtifact.getFile();
+ }
+ else if ( !hasBeenPackaged( project ) )
+ {
+ // fallback to loose class files only if artifacts haven't been packaged yet
+ // and only for plain old jars. Not war files, not ear files, not anything else.
+
+ if ( isTestArtifact( artifact ) )
+ {
+ if ( project.hasLifecyclePhase( "test-compile" ) )
+ {
+ return new File( project.getBuild().getTestOutputDirectory() );
+ }
+ }
+ else
+ {
+ String type = artifact.getProperty( "type", "" );
+ if ( project.hasLifecyclePhase( "compile" ) && COMPILE_PHASE_TYPES.contains( type ) )
+ {
+ return new File( project.getBuild().getOutputDirectory() );
+ }
+ }
+ }
+
+ // The fall-through indicates that the artifact cannot be found;
+ // for instance if package produced nothing or classifier problems.
+ return null;
+ }
+
+ private boolean hasArtifactFileFromPackagePhase( Artifact projectArtifact )
+ {
+ return projectArtifact != null && projectArtifact.getFile() != null && projectArtifact.getFile().exists();
+ }
+
+ private boolean hasBeenPackaged( MavenProject project )
+ {
+ return project.hasLifecyclePhase( "package" ) || project.hasLifecyclePhase( "install" )
+ || project.hasLifecyclePhase( "deploy" );
+ }
+
+ /**
+ * Tries to resolve the specified artifact from the artifacts of the given project.
+ *
+ * @param project The project to try to resolve the artifact from, must not be <code>null</code>.
+ * @param requestedArtifact The artifact to resolve, must not be <code>null</code>.
+ * @return The matching artifact from the project or <code>null</code> if not found. Note that this
+ */
+ private Artifact findMatchingArtifact( MavenProject project, Artifact requestedArtifact )
+ {
+ String requestedRepositoryConflictId = ArtifactIdUtils.toVersionlessId( requestedArtifact );
+
+ Artifact mainArtifact = RepositoryUtils.toArtifact( project.getArtifact() );
+ if ( requestedRepositoryConflictId.equals( ArtifactIdUtils.toVersionlessId( mainArtifact ) ) )
+ {
+ return mainArtifact;
+ }
+
+ for ( Artifact attachedArtifact : RepositoryUtils.toArtifacts( project.getAttachedArtifacts() ) )
+ {
+ if ( attachedArtifactComparison( requestedArtifact, attachedArtifact ) )
+ {
+ return attachedArtifact;
+ }
+ }
+
+ return null;
+ }
+
+ private boolean attachedArtifactComparison( Artifact requested, Artifact attached )
+ {
+ //
+ // We are taking as much as we can from the DefaultArtifact.equals(). The requested artifact has no file so
+ // we want to remove that from the comparison.
+ //
+ return requested.getArtifactId().equals( attached.getArtifactId() )
+ && requested.getGroupId().equals( attached.getGroupId() )
+ && requested.getVersion().equals( attached.getVersion() )
+ && requested.getExtension().equals( attached.getExtension() )
+ && requested.getClassifier().equals( attached.getClassifier() );
+ }
+
+ /**
+ * Determines whether the specified artifact refers to test classes.
+ *
+ * @param artifact The artifact to check, must not be {@code null}.
+ * @return {@code true} if the artifact refers to test classes, {@code false} otherwise.
+ */
+ private static boolean isTestArtifact( Artifact artifact )
+ {
+ return ( "test-jar".equals( artifact.getProperty( "type", "" ) ) )
+ || ( "jar".equals( artifact.getExtension() ) && "tests".equals( artifact.getClassifier() ) );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/RepositoryUtils.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/RepositoryUtils.java
new file mode 100644
index 00000000..d7fd88e2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/RepositoryUtils.java
@@ -0,0 +1,362 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.DefaultArtifactHandler;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.ArtifactProperties;
+import org.eclipse.aether.artifact.ArtifactType;
+import org.eclipse.aether.artifact.ArtifactTypeRegistry;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.artifact.DefaultArtifactType;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.graph.Exclusion;
+import org.eclipse.aether.repository.Authentication;
+import org.eclipse.aether.repository.Proxy;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.repository.RepositoryPolicy;
+import org.eclipse.aether.util.repository.AuthenticationBuilder;
+
+/**
+ * <strong>Warning:</strong> This is an internal utility class that is only public for technical reasons, it is not part
+ * of the public API. In particular, this class can be changed or deleted without prior notice.
+ *
+ * @author Benjamin Bentmann
+ */
+public class RepositoryUtils
+{
+
+ private static String nullify( String string )
+ {
+ return ( string == null || string.length() <= 0 ) ? null : string;
+ }
+
+ private static org.apache.maven.artifact.Artifact toArtifact( Dependency dependency )
+ {
+ if ( dependency == null )
+ {
+ return null;
+ }
+
+ org.apache.maven.artifact.Artifact result = toArtifact( dependency.getArtifact() );
+ result.setScope( dependency.getScope() );
+ result.setOptional( dependency.isOptional() );
+
+ return result;
+ }
+
+ public static org.apache.maven.artifact.Artifact toArtifact( Artifact artifact )
+ {
+ if ( artifact == null )
+ {
+ return null;
+ }
+
+ ArtifactHandler handler = newHandler( artifact );
+
+ /*
+ * NOTE: From Artifact.hasClassifier(), an empty string and a null both denote "no classifier". However, some
+ * plugins only check for null, so be sure to nullify an empty classifier.
+ */
+ org.apache.maven.artifact.Artifact result =
+ new org.apache.maven.artifact.DefaultArtifact( artifact.getGroupId(), artifact.getArtifactId(),
+ artifact.getVersion(), null,
+ artifact.getProperty( ArtifactProperties.TYPE,
+ artifact.getExtension() ),
+ nullify( artifact.getClassifier() ), handler );
+
+ result.setFile( artifact.getFile() );
+ result.setResolved( artifact.getFile() != null );
+
+ List<String> trail = new ArrayList<String>( 1 );
+ trail.add( result.getId() );
+ result.setDependencyTrail( trail );
+
+ return result;
+ }
+
+ public static void toArtifacts( Collection<org.apache.maven.artifact.Artifact> artifacts,
+ Collection<? extends DependencyNode> nodes, List<String> trail,
+ DependencyFilter filter )
+ {
+ for ( DependencyNode node : nodes )
+ {
+ org.apache.maven.artifact.Artifact artifact = toArtifact( node.getDependency() );
+
+ List<String> nodeTrail = new ArrayList<String>( trail.size() + 1 );
+ nodeTrail.addAll( trail );
+ nodeTrail.add( artifact.getId() );
+
+ if ( filter == null || filter.accept( node, Collections.<DependencyNode>emptyList() ) )
+ {
+ artifact.setDependencyTrail( nodeTrail );
+ artifacts.add( artifact );
+ }
+
+ toArtifacts( artifacts, node.getChildren(), nodeTrail, filter );
+ }
+ }
+
+ public static Artifact toArtifact( org.apache.maven.artifact.Artifact artifact )
+ {
+ if ( artifact == null )
+ {
+ return null;
+ }
+
+ String version = artifact.getVersion();
+ if ( version == null && artifact.getVersionRange() != null )
+ {
+ version = artifact.getVersionRange().toString();
+ }
+
+ Map<String, String> props = null;
+ if ( org.apache.maven.artifact.Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) )
+ {
+ String localPath = ( artifact.getFile() != null ) ? artifact.getFile().getPath() : "";
+ props = Collections.singletonMap( ArtifactProperties.LOCAL_PATH, localPath );
+ }
+
+ Artifact result =
+ new DefaultArtifact( artifact.getGroupId(), artifact.getArtifactId(), artifact.getClassifier(),
+ artifact.getArtifactHandler().getExtension(), version, props,
+ newArtifactType( artifact.getType(), artifact.getArtifactHandler() ) );
+ result = result.setFile( artifact.getFile() );
+
+ return result;
+ }
+
+ public static Dependency toDependency( org.apache.maven.artifact.Artifact artifact,
+ Collection<org.apache.maven.model.Exclusion> exclusions )
+ {
+ if ( artifact == null )
+ {
+ return null;
+ }
+
+ Artifact result = toArtifact( artifact );
+
+ List<Exclusion> excl = null;
+ if ( exclusions != null )
+ {
+ excl = new ArrayList<Exclusion>( exclusions.size() );
+ for ( org.apache.maven.model.Exclusion exclusion : exclusions )
+ {
+ excl.add( toExclusion( exclusion ) );
+ }
+ }
+
+ return new Dependency( result, artifact.getScope(), artifact.isOptional(), excl );
+ }
+
+ public static List<RemoteRepository> toRepos( List<ArtifactRepository> repos )
+ {
+ if ( repos == null )
+ {
+ return null;
+ }
+
+ List<RemoteRepository> results = new ArrayList<RemoteRepository>( repos.size() );
+ for ( ArtifactRepository repo : repos )
+ {
+ results.add( toRepo( repo ) );
+ }
+ return results;
+ }
+
+ public static RemoteRepository toRepo( ArtifactRepository repo )
+ {
+ RemoteRepository result = null;
+ if ( repo != null )
+ {
+ RemoteRepository.Builder builder =
+ new RemoteRepository.Builder( repo.getId(), getLayout( repo ), repo.getUrl() );
+ builder.setSnapshotPolicy( toPolicy( repo.getSnapshots() ) );
+ builder.setReleasePolicy( toPolicy( repo.getReleases() ) );
+ builder.setAuthentication( toAuthentication( repo.getAuthentication() ) );
+ builder.setProxy( toProxy( repo.getProxy() ) );
+ builder.setMirroredRepositories( toRepos( repo.getMirroredRepositories() ) );
+ result = builder.build();
+ }
+ return result;
+ }
+
+ public static String getLayout( ArtifactRepository repo )
+ {
+ try
+ {
+ return repo.getLayout().getId();
+ }
+ catch ( LinkageError e )
+ {
+ /*
+ * NOTE: getId() was added in 3.x and is as such not implemented by plugins compiled against 2.x APIs.
+ */
+ String className = repo.getLayout().getClass().getSimpleName();
+ if ( className.endsWith( "RepositoryLayout" ) )
+ {
+ String layout = className.substring( 0, className.length() - "RepositoryLayout".length() );
+ if ( layout.length() > 0 )
+ {
+ layout = Character.toLowerCase( layout.charAt( 0 ) ) + layout.substring( 1 );
+ return layout;
+ }
+ }
+ return "";
+ }
+ }
+
+ private static RepositoryPolicy toPolicy( ArtifactRepositoryPolicy policy )
+ {
+ RepositoryPolicy result = null;
+ if ( policy != null )
+ {
+ result = new RepositoryPolicy( policy.isEnabled(), policy.getUpdatePolicy(), policy.getChecksumPolicy() );
+ }
+ return result;
+ }
+
+ private static Authentication toAuthentication( org.apache.maven.artifact.repository.Authentication auth )
+ {
+ Authentication result = null;
+ if ( auth != null )
+ {
+ AuthenticationBuilder authBuilder = new AuthenticationBuilder();
+ authBuilder.addUsername( auth.getUsername() ).addPassword( auth.getPassword() );
+ authBuilder.addPrivateKey( auth.getPrivateKey(), auth.getPassphrase() );
+ result = authBuilder.build();
+ }
+ return result;
+ }
+
+ private static Proxy toProxy( org.apache.maven.repository.Proxy proxy )
+ {
+ Proxy result = null;
+ if ( proxy != null )
+ {
+ AuthenticationBuilder authBuilder = new AuthenticationBuilder();
+ authBuilder.addUsername( proxy.getUserName() ).addPassword( proxy.getPassword() );
+ result = new Proxy( proxy.getProtocol(), proxy.getHost(), proxy.getPort(), authBuilder.build() );
+ }
+ return result;
+ }
+
+ public static ArtifactHandler newHandler( Artifact artifact )
+ {
+ String type = artifact.getProperty( ArtifactProperties.TYPE, artifact.getExtension() );
+ DefaultArtifactHandler handler = new DefaultArtifactHandler( type );
+ handler.setExtension( artifact.getExtension() );
+ handler.setLanguage( artifact.getProperty( ArtifactProperties.LANGUAGE, null ) );
+ String addedToClasspath = artifact.getProperty( ArtifactProperties.CONSTITUTES_BUILD_PATH, "" );
+ handler.setAddedToClasspath( Boolean.parseBoolean( addedToClasspath ) );
+ String includesDependencies = artifact.getProperty( ArtifactProperties.INCLUDES_DEPENDENCIES, "" );
+ handler.setIncludesDependencies( Boolean.parseBoolean( includesDependencies ) );
+ return handler;
+ }
+
+ public static ArtifactType newArtifactType( String id, ArtifactHandler handler )
+ {
+ return new DefaultArtifactType( id, handler.getExtension(), handler.getClassifier(), handler.getLanguage(),
+ handler.isAddedToClasspath(), handler.isIncludesDependencies() );
+ }
+
+ public static Dependency toDependency( org.apache.maven.model.Dependency dependency,
+ ArtifactTypeRegistry stereotypes )
+ {
+ ArtifactType stereotype = stereotypes.get( dependency.getType() );
+ if ( stereotype == null )
+ {
+ stereotype = new DefaultArtifactType( dependency.getType() );
+ }
+
+ boolean system = dependency.getSystemPath() != null && dependency.getSystemPath().length() > 0;
+
+ Map<String, String> props = null;
+ if ( system )
+ {
+ props = Collections.singletonMap( ArtifactProperties.LOCAL_PATH, dependency.getSystemPath() );
+ }
+
+ Artifact artifact =
+ new DefaultArtifact( dependency.getGroupId(), dependency.getArtifactId(), dependency.getClassifier(), null,
+ dependency.getVersion(), props, stereotype );
+
+ List<Exclusion> exclusions = new ArrayList<Exclusion>( dependency.getExclusions().size() );
+ for ( org.apache.maven.model.Exclusion exclusion : dependency.getExclusions() )
+ {
+ exclusions.add( toExclusion( exclusion ) );
+ }
+
+ Dependency result = new Dependency( artifact, dependency.getScope(), dependency.isOptional(), exclusions );
+
+ return result;
+ }
+
+ private static Exclusion toExclusion( org.apache.maven.model.Exclusion exclusion )
+ {
+ return new Exclusion( exclusion.getGroupId(), exclusion.getArtifactId(), "*", "*" );
+ }
+
+ public static ArtifactTypeRegistry newArtifactTypeRegistry( ArtifactHandlerManager handlerManager )
+ {
+ return new MavenArtifactTypeRegistry( handlerManager );
+ }
+
+ static class MavenArtifactTypeRegistry
+ implements ArtifactTypeRegistry
+ {
+
+ private final ArtifactHandlerManager handlerManager;
+
+ public MavenArtifactTypeRegistry( ArtifactHandlerManager handlerManager )
+ {
+ this.handlerManager = handlerManager;
+ }
+
+ public ArtifactType get( String stereotypeId )
+ {
+ ArtifactHandler handler = handlerManager.getArtifactHandler( stereotypeId );
+ return newArtifactType( stereotypeId, handler );
+ }
+
+ }
+
+ public static Collection<Artifact> toArtifacts( Collection<org.apache.maven.artifact.Artifact> artifactsToConvert )
+ {
+ List<Artifact> artifacts = new ArrayList<Artifact>();
+ for ( org.apache.maven.artifact.Artifact a : artifactsToConvert )
+ {
+ artifacts.add( toArtifact( a ) );
+ }
+ return artifacts;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/SessionScoped.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/SessionScoped.java
new file mode 100644
index 00000000..63b1eb77
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/SessionScoped.java
@@ -0,0 +1,42 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import com.google.inject.ScopeAnnotation;
+
+/**
+ * Indicates that annotated component should be instantiated before session starts and discarded after session execution
+ * completes.
+ *
+ * @author Jason van Zyl
+ * @since 3.2.0
+ */
+@Target( { TYPE } )
+@Retention( RUNTIME )
+@ScopeAnnotation
+public @interface SessionScoped
+{
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/DependencyResolutionRequiredException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/DependencyResolutionRequiredException.java
new file mode 100644
index 00000000..b54ba070
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/DependencyResolutionRequiredException.java
@@ -0,0 +1,35 @@
+package org.apache.maven.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Exception that occurs when an artifact file is used, but has not been resolved.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @todo it may be better for artifact.getFile() to throw it - perhaps it is a runtime exception?
+ */
+public class DependencyResolutionRequiredException
+ extends Exception
+{
+ public DependencyResolutionRequiredException( Artifact artifact )
+ {
+ super( "Attempted to access the artifact " + artifact + "; which has not yet been resolved" );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/InvalidRepositoryException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/InvalidRepositoryException.java
new file mode 100644
index 00000000..62991f11
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/InvalidRepositoryException.java
@@ -0,0 +1,65 @@
+package org.apache.maven.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.net.MalformedURLException;
+
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+
+/**
+ * Error constructing an artifact repository.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class InvalidRepositoryException
+ extends Exception
+{
+ private final String repositoryId;
+
+ public InvalidRepositoryException( String message, String repositoryId, MalformedURLException cause )
+ {
+ super( message, cause );
+ this.repositoryId = repositoryId;
+ }
+
+ protected InvalidRepositoryException( String message, String repositoryId, ComponentLookupException cause )
+ {
+ super( message, cause );
+ this.repositoryId = repositoryId;
+ }
+
+ @Deprecated
+ public InvalidRepositoryException( String message, Throwable t )
+ {
+ super( message, t );
+ this.repositoryId = null;
+ }
+
+ public InvalidRepositoryException( String message, String repositoryId )
+ {
+ super( message );
+ this.repositoryId = repositoryId;
+ }
+
+ public String getRepositoryId()
+ {
+ return repositoryId;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/factory/ArtifactFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/factory/ArtifactFactory.java
new file mode 100644
index 00000000..a16f64f6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/factory/ArtifactFactory.java
@@ -0,0 +1,59 @@
+package org.apache.maven.artifact.factory;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.versioning.VersionRange;
+
+@Deprecated
+public interface ArtifactFactory
+{
+ @Deprecated
+ String ROLE = ArtifactFactory.class.getName();
+
+ Artifact createArtifact( String groupId, String artifactId, String version, String scope, String type );
+
+ Artifact createArtifactWithClassifier( String groupId, String artifactId, String version, String type,
+ String classifier );
+
+ Artifact createDependencyArtifact( String groupId, String artifactId, VersionRange versionRange, String type,
+ String classifier, String scope );
+
+ Artifact createDependencyArtifact( String groupId, String artifactId, VersionRange versionRange, String type,
+ String classifier, String scope, boolean optional );
+
+ Artifact createDependencyArtifact( String groupId, String artifactId, VersionRange versionRange, String type,
+ String classifier, String scope, String inheritedScope );
+
+ Artifact createDependencyArtifact( String groupId, String artifactId, VersionRange versionRange, String type,
+ String classifier, String scope, String inheritedScope, boolean optional );
+
+ Artifact createBuildArtifact( String groupId, String artifactId, String version, String packaging );
+
+ Artifact createProjectArtifact( String groupId, String artifactId, String version );
+
+ Artifact createParentArtifact( String groupId, String artifactId, String version );
+
+ Artifact createPluginArtifact( String groupId, String artifactId, VersionRange versionRange );
+
+ Artifact createProjectArtifact( String groupId, String artifactId, String version, String scope );
+
+ Artifact createExtensionArtifact( String groupId, String artifactId, VersionRange versionRange );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/factory/DefaultArtifactFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/factory/DefaultArtifactFactory.java
new file mode 100644
index 00000000..dfcac019
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/factory/DefaultArtifactFactory.java
@@ -0,0 +1,160 @@
+package org.apache.maven.artifact.factory;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+@Component( role = ArtifactFactory.class )
+public class DefaultArtifactFactory
+ implements ArtifactFactory
+{
+ @Requirement
+ private ArtifactHandlerManager artifactHandlerManager;
+
+ public Artifact createArtifact( String groupId, String artifactId, String version, String scope, String type )
+ {
+ return createArtifact( groupId, artifactId, version, scope, type, null, null );
+ }
+
+ public Artifact createArtifactWithClassifier( String groupId, String artifactId, String version, String type,
+ String classifier )
+ {
+ return createArtifact( groupId, artifactId, version, null, type, classifier, null );
+ }
+
+ public Artifact createDependencyArtifact( String groupId, String artifactId, VersionRange versionRange,
+ String type, String classifier, String scope )
+ {
+ return createArtifact( groupId, artifactId, versionRange, type, classifier, scope, null );
+ }
+
+ public Artifact createDependencyArtifact( String groupId, String artifactId, VersionRange versionRange,
+ String type, String classifier, String scope, boolean optional )
+ {
+ return createArtifact( groupId, artifactId, versionRange, type, classifier, scope, null, optional );
+ }
+
+ public Artifact createDependencyArtifact( String groupId, String artifactId, VersionRange versionRange,
+ String type, String classifier, String scope, String inheritedScope )
+ {
+ return createArtifact( groupId, artifactId, versionRange, type, classifier, scope, inheritedScope );
+ }
+
+ public Artifact createDependencyArtifact( String groupId, String artifactId, VersionRange versionRange,
+ String type, String classifier, String scope, String inheritedScope,
+ boolean optional )
+ {
+ return createArtifact( groupId, artifactId, versionRange, type, classifier, scope, inheritedScope, optional );
+ }
+
+ public Artifact createBuildArtifact( String groupId, String artifactId, String version, String packaging )
+ {
+ return createArtifact( groupId, artifactId, version, null, packaging, null, null );
+ }
+
+ public Artifact createProjectArtifact( String groupId, String artifactId, String version )
+ {
+ return createProjectArtifact( groupId, artifactId, version, null );
+ }
+
+ public Artifact createParentArtifact( String groupId, String artifactId, String version )
+ {
+ return createProjectArtifact( groupId, artifactId, version );
+ }
+
+ public Artifact createPluginArtifact( String groupId, String artifactId, VersionRange versionRange )
+ {
+ return createArtifact( groupId, artifactId, versionRange, "maven-plugin", null, Artifact.SCOPE_RUNTIME, null );
+ }
+
+ public Artifact createProjectArtifact( String groupId, String artifactId, String version, String scope )
+ {
+ return createArtifact( groupId, artifactId, version, scope, "pom" );
+ }
+
+ public Artifact createExtensionArtifact( String groupId, String artifactId, VersionRange versionRange )
+ {
+ return createArtifact( groupId, artifactId, versionRange, "jar", null, Artifact.SCOPE_RUNTIME, null );
+ }
+
+ private Artifact createArtifact( String groupId, String artifactId, String version, String scope, String type,
+ String classifier, String inheritedScope )
+ {
+ VersionRange versionRange = null;
+ if ( version != null )
+ {
+ versionRange = VersionRange.createFromVersion( version );
+ }
+ return createArtifact( groupId, artifactId, versionRange, type, classifier, scope, inheritedScope );
+ }
+
+ private Artifact createArtifact( String groupId, String artifactId, VersionRange versionRange, String type,
+ String classifier, String scope, String inheritedScope )
+ {
+ return createArtifact( groupId, artifactId, versionRange, type, classifier, scope, inheritedScope, false );
+ }
+
+ private Artifact createArtifact( String groupId, String artifactId, VersionRange versionRange, String type,
+ String classifier, String scope, String inheritedScope, boolean optional )
+ {
+ String desiredScope = Artifact.SCOPE_RUNTIME;
+
+ if ( inheritedScope == null )
+ {
+ desiredScope = scope;
+ }
+ else if ( Artifact.SCOPE_TEST.equals( scope ) || Artifact.SCOPE_PROVIDED.equals( scope ) )
+ {
+ return null;
+ }
+ else if ( Artifact.SCOPE_COMPILE.equals( scope ) && Artifact.SCOPE_COMPILE.equals( inheritedScope ) )
+ {
+ // added to retain compile artifactScope. Remove if you want compile inherited as runtime
+ desiredScope = Artifact.SCOPE_COMPILE;
+ }
+
+ if ( Artifact.SCOPE_TEST.equals( inheritedScope ) )
+ {
+ desiredScope = Artifact.SCOPE_TEST;
+ }
+
+ if ( Artifact.SCOPE_PROVIDED.equals( inheritedScope ) )
+ {
+ desiredScope = Artifact.SCOPE_PROVIDED;
+ }
+
+ if ( Artifact.SCOPE_SYSTEM.equals( scope ) )
+ {
+ // system scopes come through unchanged...
+ desiredScope = Artifact.SCOPE_SYSTEM;
+ }
+
+ ArtifactHandler handler = artifactHandlerManager.getArtifactHandler( type );
+
+ return new DefaultArtifact( groupId, artifactId, versionRange, desiredScope, type, classifier, handler,
+ optional );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/handler/DefaultArtifactHandler.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/handler/DefaultArtifactHandler.java
new file mode 100644
index 00000000..628f38bc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/handler/DefaultArtifactHandler.java
@@ -0,0 +1,134 @@
+package org.apache.maven.artifact.handler;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @author Jason van Zyl
+ */
+@Component( role = ArtifactHandler.class )
+public class DefaultArtifactHandler
+ implements ArtifactHandler
+{
+ private String extension;
+
+ private String type;
+
+ private String classifier;
+
+ private String directory;
+
+ private String packaging;
+
+ private boolean includesDependencies;
+
+ private String language;
+
+ private boolean addedToClasspath;
+
+ public DefaultArtifactHandler()
+ {
+ }
+
+ public DefaultArtifactHandler( String type )
+ {
+ this.type = type;
+ }
+
+ public String getExtension()
+ {
+ if ( extension == null )
+ {
+ extension = type;
+ }
+ return extension;
+ }
+
+ public void setExtension( String extension )
+ {
+ this.extension = extension;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+
+ public String getClassifier()
+ {
+ return classifier;
+ }
+
+ public String getDirectory()
+ {
+ if ( directory == null )
+ {
+ directory = getPackaging() + "s";
+ }
+ return directory;
+ }
+
+ public String getPackaging()
+ {
+ if ( packaging == null )
+ {
+ packaging = type;
+ }
+ return packaging;
+ }
+
+ public boolean isIncludesDependencies()
+ {
+ return includesDependencies;
+ }
+
+ public void setIncludesDependencies( boolean includesDependencies )
+ {
+ this.includesDependencies = includesDependencies;
+ }
+
+ public String getLanguage()
+ {
+ if ( language == null )
+ {
+ language = "none";
+ }
+
+ return language;
+ }
+
+ public void setLanguage( String language )
+ {
+ this.language = language;
+ }
+
+ public boolean isAddedToClasspath()
+ {
+ return addedToClasspath;
+ }
+
+ public void setAddedToClasspath( boolean addedToClasspath )
+ {
+ this.addedToClasspath = addedToClasspath;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/ArtifactHandlerManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/ArtifactHandlerManager.java
new file mode 100644
index 00000000..cada9e93
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/ArtifactHandlerManager.java
@@ -0,0 +1,37 @@
+package org.apache.maven.artifact.handler.manager;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Map;
+
+import org.apache.maven.artifact.handler.ArtifactHandler;
+
+/**
+ * @author Jason van Zyl
+ */
+public interface ArtifactHandlerManager
+{
+ String ROLE = ArtifactHandlerManager.class.getName();
+
+ ArtifactHandler getArtifactHandler( String type );
+
+ @Deprecated
+ void addHandlers( Map<String, ArtifactHandler> handlers );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java
new file mode 100644
index 00000000..6be636b0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java
@@ -0,0 +1,73 @@
+package org.apache.maven.artifact.handler.manager;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.DefaultArtifactHandler;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+/**
+ * @author Jason van Zyl
+ */
+@Component( role = ArtifactHandlerManager.class )
+public class DefaultArtifactHandlerManager
+ implements ArtifactHandlerManager
+{
+
+ @Requirement( role = ArtifactHandler.class )
+ private Map<String, ArtifactHandler> artifactHandlers;
+
+ private Map<String, ArtifactHandler> unmanagedHandlers = new ConcurrentHashMap<String, ArtifactHandler>();
+
+ public ArtifactHandler getArtifactHandler( String type )
+ {
+ ArtifactHandler handler = unmanagedHandlers.get( type );
+
+ if ( handler == null )
+ {
+ handler = artifactHandlers.get( type );
+
+ if ( handler == null )
+ {
+ handler = new DefaultArtifactHandler( type );
+ }
+ }
+
+ return handler;
+ }
+
+ public void addHandlers( Map<String, ArtifactHandler> handlers )
+ {
+ // legacy support for maven-gpg-plugin:1.0
+ unmanagedHandlers.putAll( handlers );
+ }
+
+ @Deprecated
+ public Set<String> getHandlerTypes()
+ {
+ return artifactHandlers.keySet();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/AbstractArtifactMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/AbstractArtifactMetadata.java
new file mode 100644
index 00000000..5ef3a980
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/AbstractArtifactMetadata.java
@@ -0,0 +1,33 @@
+package org.apache.maven.artifact.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+@Deprecated
+public abstract class AbstractArtifactMetadata
+ extends org.apache.maven.repository.legacy.metadata.AbstractArtifactMetadata
+ implements org.apache.maven.artifact.metadata.ArtifactMetadata
+{
+ protected AbstractArtifactMetadata( Artifact artifact )
+ {
+ super( artifact );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataRetrievalException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataRetrievalException.java
new file mode 100644
index 00000000..e419ef9e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataRetrievalException.java
@@ -0,0 +1,55 @@
+package org.apache.maven.artifact.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+@Deprecated
+public class ArtifactMetadataRetrievalException
+ extends org.apache.maven.repository.legacy.metadata.ArtifactMetadataRetrievalException
+{
+
+ /** @deprecated use {@link #ArtifactMetadataRetrievalException(String, Throwable, Artifact)} */
+ @Deprecated
+ public ArtifactMetadataRetrievalException( String message )
+ {
+ super( message, null, null );
+ }
+
+ /** @deprecated use {@link #ArtifactMetadataRetrievalException(String, Throwable, Artifact)} */
+ @Deprecated
+ public ArtifactMetadataRetrievalException( Throwable cause )
+ {
+ super( null, cause, null );
+ }
+
+ /** @deprecated use {@link #ArtifactMetadataRetrievalException(String, Throwable, Artifact)} */
+ @Deprecated
+ public ArtifactMetadataRetrievalException( String message,
+ Throwable cause )
+ {
+ super( message, cause, null );
+ }
+
+ public ArtifactMetadataRetrievalException( String message, Throwable cause, Artifact artifact )
+ {
+ super( message, cause, artifact );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataSource.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataSource.java
new file mode 100644
index 00000000..ccd58363
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataSource.java
@@ -0,0 +1,52 @@
+package org.apache.maven.artifact.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.repository.legacy.metadata.MetadataResolutionRequest;
+
+@Deprecated
+public interface ArtifactMetadataSource
+ extends org.apache.maven.repository.legacy.metadata.ArtifactMetadataSource
+{
+
+ ResolutionGroup retrieve( MetadataResolutionRequest request )
+ throws ArtifactMetadataRetrievalException;
+
+ ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException;
+
+ List<ArtifactVersion> retrieveAvailableVersions( MetadataResolutionRequest request )
+ throws ArtifactMetadataRetrievalException;
+
+ List<ArtifactVersion> retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException;
+
+ List<ArtifactVersion> retrieveAvailableVersionsFromDeploymentRepository( Artifact artifact,
+ ArtifactRepository localRepository,
+ ArtifactRepository remoteRepository )
+ throws ArtifactMetadataRetrievalException;
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/ResolutionGroup.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/ResolutionGroup.java
new file mode 100644
index 00000000..c219b24e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/ResolutionGroup.java
@@ -0,0 +1,46 @@
+package org.apache.maven.artifact.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+@Deprecated
+public class ResolutionGroup
+ extends org.apache.maven.repository.legacy.metadata.ResolutionGroup
+{
+
+ public ResolutionGroup( Artifact pomArtifact, Set<Artifact> artifacts,
+ List<ArtifactRepository> resolutionRepositories )
+ {
+ super( pomArtifact, artifacts, resolutionRepositories );
+ }
+
+ public ResolutionGroup( Artifact pomArtifact, Artifact relocatedArtifact, Set<Artifact> artifacts,
+ Map<String, Artifact> managedVersions, List<ArtifactRepository> resolutionRepositories )
+ {
+ super( pomArtifact, relocatedArtifact, artifacts, managedVersions, resolutionRepositories );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/DefaultRepositoryRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/DefaultRepositoryRequest.java
new file mode 100644
index 00000000..6b18789d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/DefaultRepositoryRequest.java
@@ -0,0 +1,134 @@
+package org.apache.maven.artifact.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Collects basic settings to access the repository system.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DefaultRepositoryRequest
+ implements RepositoryRequest
+{
+
+ private boolean offline;
+
+ private boolean forceUpdate;
+
+ private ArtifactRepository localRepository;
+
+ private List<ArtifactRepository> remoteRepositories;
+
+ /**
+ * Creates an empty repository request.
+ */
+ public DefaultRepositoryRequest()
+ {
+ // enables no-arg constructor
+ }
+
+ /**
+ * Creates a shallow copy of the specified repository request.
+ *
+ * @param repositoryRequest The repository request to copy from, must not be {@code null}.
+ */
+ public DefaultRepositoryRequest( RepositoryRequest repositoryRequest )
+ {
+ setLocalRepository( repositoryRequest.getLocalRepository() );
+ setRemoteRepositories( repositoryRequest.getRemoteRepositories() );
+ setOffline( repositoryRequest.isOffline() );
+ setForceUpdate( repositoryRequest.isForceUpdate() );
+ }
+
+ public static RepositoryRequest getRepositoryRequest( MavenSession session, MavenProject project )
+ {
+ RepositoryRequest request = new DefaultRepositoryRequest();
+
+ request.setLocalRepository( session.getLocalRepository() );
+ if ( project != null )
+ {
+ request.setRemoteRepositories( project.getPluginArtifactRepositories() );
+ }
+ request.setOffline( session.isOffline() );
+ request.setForceUpdate( session.getRequest().isUpdateSnapshots() );
+
+ return request;
+ }
+
+ public boolean isOffline()
+ {
+ return offline;
+ }
+
+ public DefaultRepositoryRequest setOffline( boolean offline )
+ {
+ this.offline = offline;
+
+ return this;
+ }
+
+ public boolean isForceUpdate()
+ {
+ return forceUpdate;
+ }
+
+ public DefaultRepositoryRequest setForceUpdate( boolean forceUpdate )
+ {
+ this.forceUpdate = forceUpdate;
+
+ return this;
+ }
+
+ public ArtifactRepository getLocalRepository()
+ {
+ return localRepository;
+ }
+
+ public DefaultRepositoryRequest setLocalRepository( ArtifactRepository localRepository )
+ {
+ this.localRepository = localRepository;
+
+ return this;
+ }
+
+ public List<ArtifactRepository> getRemoteRepositories()
+ {
+ if ( remoteRepositories == null )
+ {
+ remoteRepositories = new ArrayList<ArtifactRepository>();
+ }
+
+ return remoteRepositories;
+ }
+
+ public DefaultRepositoryRequest setRemoteRepositories( List<ArtifactRepository> remoteRepositories )
+ {
+ this.remoteRepositories = remoteRepositories;
+
+ return this;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/LegacyLocalRepositoryManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/LegacyLocalRepositoryManager.java
new file mode 100644
index 00000000..f56fb459
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/LegacyLocalRepositoryManager.java
@@ -0,0 +1,435 @@
+package org.apache.maven.artifact.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataStoreException;
+import org.apache.maven.repository.Proxy;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.metadata.Metadata;
+import org.eclipse.aether.repository.LocalArtifactRegistration;
+import org.eclipse.aether.repository.LocalArtifactRequest;
+import org.eclipse.aether.repository.LocalArtifactResult;
+import org.eclipse.aether.repository.LocalMetadataRegistration;
+import org.eclipse.aether.repository.LocalMetadataRequest;
+import org.eclipse.aether.repository.LocalMetadataResult;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.LocalRepositoryManager;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * <strong>Warning:</strong> This is an internal utility class that is only public for technical reasons, it is not part
+ * of the public API. In particular, this class can be changed or deleted without prior notice.
+ *
+ * @author Benjamin Bentmann
+ */
+public class LegacyLocalRepositoryManager
+ implements LocalRepositoryManager
+{
+
+ private final ArtifactRepository delegate;
+
+ private final LocalRepository repo;
+
+ private final boolean realLocalRepo;
+
+ public static RepositorySystemSession overlay( ArtifactRepository repository, RepositorySystemSession session,
+ RepositorySystem system )
+ {
+ if ( repository == null || repository.getBasedir() == null )
+ {
+ return session;
+ }
+
+ if ( session != null )
+ {
+ LocalRepositoryManager lrm = session.getLocalRepositoryManager();
+ if ( lrm != null && lrm.getRepository().getBasedir().equals( new File( repository.getBasedir() ) ) )
+ {
+ return session;
+ }
+ }
+ else
+ {
+ session = new DefaultRepositorySystemSession();
+ }
+
+ final LocalRepositoryManager llrm = new LegacyLocalRepositoryManager( repository );
+
+ return new DefaultRepositorySystemSession( session ).setLocalRepositoryManager( llrm );
+ }
+
+ private LegacyLocalRepositoryManager( ArtifactRepository delegate )
+ {
+ if ( delegate == null )
+ {
+ throw new IllegalArgumentException( "local repository delegate missing" );
+ }
+ this.delegate = delegate;
+
+ ArtifactRepositoryLayout layout = delegate.getLayout();
+ repo =
+ new LocalRepository( new File( delegate.getBasedir() ),
+ ( layout != null ) ? layout.getClass().getSimpleName() : "legacy" );
+
+ /*
+ * NOTE: "invoker:install" vs "appassembler:assemble": Both mojos use the artifact installer to put an artifact
+ * into a repository. In the first case, the result needs to be a proper local repository that one can use for
+ * local artifact resolution. In the second case, the result needs to precisely obey the path information of the
+ * repository's layout to allow pointing at artifacts within the repository. Unfortunately,
+ * DefaultRepositoryLayout does not correctly describe the layout of a local repository which unlike a remote
+ * repository never uses timestamps in the filename of a snapshot artifact. The discrepancy gets notable when a
+ * remotely resolved snapshot artifact gets passed into pathOf(). So producing a proper local artifact path
+ * using DefaultRepositoryLayout requires us to enforce usage of the artifact's base version. This
+ * transformation however contradicts the other use case of precisely obeying the repository's layout. The below
+ * flag tries to detect which use case applies to make both plugins happy.
+ */
+ realLocalRepo = ( layout instanceof DefaultRepositoryLayout ) && "local".equals( delegate.getId() );
+ }
+
+ public LocalRepository getRepository()
+ {
+ return repo;
+ }
+
+ public String getPathForLocalArtifact( Artifact artifact )
+ {
+ if ( realLocalRepo )
+ {
+ return delegate.pathOf( RepositoryUtils.toArtifact( artifact.setVersion( artifact.getBaseVersion() ) ) );
+ }
+ return delegate.pathOf( RepositoryUtils.toArtifact( artifact ) );
+ }
+
+ public String getPathForRemoteArtifact( Artifact artifact, RemoteRepository repository, String context )
+ {
+ return delegate.pathOf( RepositoryUtils.toArtifact( artifact ) );
+ }
+
+ public String getPathForLocalMetadata( Metadata metadata )
+ {
+ return delegate.pathOfLocalRepositoryMetadata( new ArtifactMetadataAdapter( metadata ), delegate );
+ }
+
+ public String getPathForRemoteMetadata( Metadata metadata, RemoteRepository repository, String context )
+ {
+ return delegate.pathOfLocalRepositoryMetadata( new ArtifactMetadataAdapter( metadata ),
+ new ArtifactRepositoryAdapter( repository ) );
+ }
+
+ public LocalArtifactResult find( RepositorySystemSession session, LocalArtifactRequest request )
+ {
+ String path = getPathForLocalArtifact( request.getArtifact() );
+ File file = new File( getRepository().getBasedir(), path );
+
+ LocalArtifactResult result = new LocalArtifactResult( request );
+ if ( file.isFile() )
+ {
+ result.setFile( file );
+ result.setAvailable( true );
+ }
+
+ return result;
+ }
+
+ public LocalMetadataResult find( RepositorySystemSession session, LocalMetadataRequest request )
+ {
+ Metadata metadata = request.getMetadata();
+
+ String path;
+ if ( request.getRepository() == null )
+ {
+ path = getPathForLocalMetadata( metadata );
+ }
+ else
+ {
+ path = getPathForRemoteMetadata( metadata, request.getRepository(), request.getContext() );
+ }
+
+ File file = new File( getRepository().getBasedir(), path );
+
+ LocalMetadataResult result = new LocalMetadataResult( request );
+ if ( file.isFile() )
+ {
+ result.setFile( file );
+ }
+
+ return result;
+ }
+
+ public void add( RepositorySystemSession session, LocalArtifactRegistration request )
+ {
+ // noop
+ }
+
+ public void add( RepositorySystemSession session, LocalMetadataRegistration request )
+ {
+ // noop
+ }
+
+ static class ArtifactMetadataAdapter
+ implements ArtifactMetadata
+ {
+
+ private final Metadata metadata;
+
+ public ArtifactMetadataAdapter( Metadata metadata )
+ {
+ this.metadata = metadata;
+ }
+
+ public boolean storedInArtifactVersionDirectory()
+ {
+ return metadata.getVersion().length() > 0;
+ }
+
+ public boolean storedInGroupDirectory()
+ {
+ return metadata.getArtifactId().length() <= 0;
+ }
+
+ public String getGroupId()
+ {
+ return nullify( metadata.getGroupId() );
+ }
+
+ public String getArtifactId()
+ {
+ return nullify( metadata.getArtifactId() );
+ }
+
+ public String getBaseVersion()
+ {
+ return nullify( metadata.getVersion() );
+ }
+
+ private String nullify( String str )
+ {
+ return ( str == null || str.length() <= 0 ) ? null : str;
+ }
+
+ public Object getKey()
+ {
+ return metadata.toString();
+ }
+
+ public String getRemoteFilename()
+ {
+ return metadata.getType();
+ }
+
+ public String getLocalFilename( ArtifactRepository repository )
+ {
+ return insertRepositoryKey( getRemoteFilename(), repository.getKey() );
+ }
+
+ private String insertRepositoryKey( String filename, String repositoryKey )
+ {
+ String result;
+ int idx = filename.indexOf( '.' );
+ if ( idx < 0 )
+ {
+ result = filename + '-' + repositoryKey;
+ }
+ else
+ {
+ result = filename.substring( 0, idx ) + '-' + repositoryKey + filename.substring( idx );
+ }
+ return result;
+ }
+
+ public void merge( org.apache.maven.repository.legacy.metadata.ArtifactMetadata metadata )
+ {
+ // not used
+ }
+
+ public void merge( ArtifactMetadata metadata )
+ {
+ // not used
+ }
+
+ public void storeInLocalRepository( ArtifactRepository localRepository, ArtifactRepository remoteRepository )
+ throws RepositoryMetadataStoreException
+ {
+ // not used
+ }
+
+ public String extendedToString()
+ {
+ return metadata.toString();
+ }
+
+ }
+
+ static class ArtifactRepositoryAdapter
+ implements ArtifactRepository
+ {
+
+ private final RemoteRepository repository;
+
+ public ArtifactRepositoryAdapter( RemoteRepository repository )
+ {
+ this.repository = repository;
+ }
+
+ public String pathOf( org.apache.maven.artifact.Artifact artifact )
+ {
+ return null;
+ }
+
+ public String pathOfRemoteRepositoryMetadata( ArtifactMetadata artifactMetadata )
+ {
+ return null;
+ }
+
+ public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+ {
+ return null;
+ }
+
+ public String getUrl()
+ {
+ return repository.getUrl();
+ }
+
+ public void setUrl( String url )
+ {
+ }
+
+ public String getBasedir()
+ {
+ return null;
+ }
+
+ public String getProtocol()
+ {
+ return repository.getProtocol();
+ }
+
+ public String getId()
+ {
+ return repository.getId();
+ }
+
+ public void setId( String id )
+ {
+ }
+
+ public ArtifactRepositoryPolicy getSnapshots()
+ {
+ return null;
+ }
+
+ public void setSnapshotUpdatePolicy( ArtifactRepositoryPolicy policy )
+ {
+ }
+
+ public ArtifactRepositoryPolicy getReleases()
+ {
+ return null;
+ }
+
+ public void setReleaseUpdatePolicy( ArtifactRepositoryPolicy policy )
+ {
+ }
+
+ public ArtifactRepositoryLayout getLayout()
+ {
+ return null;
+ }
+
+ public void setLayout( ArtifactRepositoryLayout layout )
+ {
+ }
+
+ public String getKey()
+ {
+ return getId();
+ }
+
+ public boolean isUniqueVersion()
+ {
+ return true;
+ }
+
+ public boolean isBlacklisted()
+ {
+ return false;
+ }
+
+ public void setBlacklisted( boolean blackListed )
+ {
+ }
+
+ public org.apache.maven.artifact.Artifact find( org.apache.maven.artifact.Artifact artifact )
+ {
+ return null;
+ }
+
+ public List<String> findVersions( org.apache.maven.artifact.Artifact artifact )
+ {
+ return Collections.emptyList();
+ }
+
+ public boolean isProjectAware()
+ {
+ return false;
+ }
+
+ public void setAuthentication( Authentication authentication )
+ {
+ }
+
+ public Authentication getAuthentication()
+ {
+ return null;
+ }
+
+ public void setProxy( Proxy proxy )
+ {
+ }
+
+ public Proxy getProxy()
+ {
+ return null;
+ }
+
+ public List<ArtifactRepository> getMirroredRepositories()
+ {
+ return Collections.emptyList();
+ }
+
+ public void setMirroredRepositories( List<ArtifactRepository> mirroredRepositories )
+ {
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/MavenArtifactRepository.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/MavenArtifactRepository.java
new file mode 100644
index 00000000..8e45b203
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/MavenArtifactRepository.java
@@ -0,0 +1,412 @@
+package org.apache.maven.artifact.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.repository.Proxy;
+
+//TODO: completely separate local and remote artifact repositories
+public class MavenArtifactRepository
+ implements ArtifactRepository
+{
+ private String id;
+
+ private String url;
+
+ private String basedir;
+
+ private String protocol;
+
+ private ArtifactRepositoryLayout layout;
+
+ private ArtifactRepositoryPolicy snapshots;
+
+ private ArtifactRepositoryPolicy releases;
+
+ private Authentication authentication;
+
+ private Proxy proxy;
+
+ private List<ArtifactRepository> mirroredRepositories = Collections.emptyList();
+
+ public MavenArtifactRepository()
+ {
+ }
+
+ /**
+ * Create a remote download repository.
+ *
+ * @param id the unique identifier of the repository
+ * @param url the URL of the repository
+ * @param layout the layout of the repository
+ * @param snapshots the policies to use for snapshots
+ * @param releases the policies to use for releases
+ */
+ public MavenArtifactRepository( String id, String url, ArtifactRepositoryLayout layout,
+ ArtifactRepositoryPolicy snapshots, ArtifactRepositoryPolicy releases )
+ {
+ this.id = id;
+ this.url = url;
+ this.layout = layout;
+ this.snapshots = snapshots;
+ this.releases = releases;
+ //
+ // Derive these from the URL
+ //
+ this.protocol = protocol( url );
+ this.basedir = basedir( url );
+ }
+
+ public String pathOf( Artifact artifact )
+ {
+ return layout.pathOf( artifact );
+ }
+
+ public String pathOfRemoteRepositoryMetadata( ArtifactMetadata artifactMetadata )
+ {
+ return layout.pathOfRemoteRepositoryMetadata( artifactMetadata );
+ }
+
+ public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+ {
+ return layout.pathOfLocalRepositoryMetadata( metadata, repository );
+ }
+
+ public void setLayout( ArtifactRepositoryLayout layout )
+ {
+ this.layout = layout;
+ }
+
+ public ArtifactRepositoryLayout getLayout()
+ {
+ return layout;
+ }
+
+ public void setSnapshotUpdatePolicy( ArtifactRepositoryPolicy snapshots )
+ {
+ this.snapshots = snapshots;
+ }
+
+ public ArtifactRepositoryPolicy getSnapshots()
+ {
+ return snapshots;
+ }
+
+ public void setReleaseUpdatePolicy( ArtifactRepositoryPolicy releases )
+ {
+ this.releases = releases;
+ }
+
+ public ArtifactRepositoryPolicy getReleases()
+ {
+ return releases;
+ }
+
+ public String getKey()
+ {
+ return getId();
+ }
+
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( " id: " ).append( getId() ).append( "\n" );
+ sb.append( " url: " ).append( getUrl() ).append( "\n" );
+ sb.append( " layout: " ).append( layout != null ? layout : "none" ).append( "\n" );
+
+ if ( proxy != null )
+ {
+ sb.append( " proxy: " ).append( proxy.getHost() ).append( ":" ).append( proxy.getPort() ).append( "\n" );
+ }
+
+ if ( snapshots != null )
+ {
+ sb.append( "snapshots: [enabled => " ).append( snapshots.isEnabled() );
+ sb.append( ", update => " ).append( snapshots.getUpdatePolicy() ).append( "]\n" );
+ }
+
+ if ( releases != null )
+ {
+ sb.append( " releases: [enabled => " ).append( releases.isEnabled() );
+ sb.append( ", update => " ).append( releases.getUpdatePolicy() ).append( "]\n" );
+ }
+
+ return sb.toString();
+ }
+
+ public Artifact find( Artifact artifact )
+ {
+ File artifactFile = new File( getBasedir(), pathOf( artifact ) );
+
+ // We need to set the file here or the resolver will fail with an NPE, not fully equipped to deal
+ // with multiple local repository implementations yet.
+ artifact.setFile( artifactFile );
+
+ return artifact;
+ }
+
+ public List<String> findVersions( Artifact artifact )
+ {
+ return Collections.emptyList();
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+
+ public String getUrl()
+ {
+ return url;
+ }
+
+ public String getBasedir()
+ {
+ return basedir;
+ }
+
+ public String getProtocol()
+ {
+ return protocol;
+ }
+
+ public void setId( String id )
+ {
+ this.id = id;
+ }
+
+ public void setUrl( String url )
+ {
+ this.url = url;
+
+ this.protocol = protocol( url );
+ this.basedir = basedir( url );
+ }
+
+ // Path Utils
+
+ /**
+ * Return the protocol name.
+ * <br/>
+ * E.g: for input
+ * <code>http://www.codehause.org</code> this method will return <code>http</code>
+ *
+ * @param url the url
+ * @return the host name
+ */
+ private static String protocol( final String url )
+ {
+ final int pos = url.indexOf( ":" );
+
+ if ( pos == -1 )
+ {
+ return "";
+ }
+ return url.substring( 0, pos ).trim();
+ }
+
+ /**
+ * Derive the path portion of the given URL.
+ *
+ * @param url the repository URL
+ * @return the basedir of the repository
+ * @todo need to URL decode for spaces?
+ */
+ private String basedir( String url )
+ {
+ String retValue = null;
+
+ if ( protocol.equalsIgnoreCase( "file" ) )
+ {
+ retValue = url.substring( protocol.length() + 1 );
+ retValue = decode( retValue );
+ // special case: if omitted // on protocol, keep path as is
+ if ( retValue.startsWith( "//" ) )
+ {
+ retValue = retValue.substring( 2 );
+
+ if ( retValue.length() >= 2 && ( retValue.charAt( 1 ) == '|' || retValue.charAt( 1 ) == ':' ) )
+ {
+ // special case: if there is a windows drive letter, then keep the original return value
+ retValue = retValue.charAt( 0 ) + ":" + retValue.substring( 2 );
+ }
+ else
+ {
+ // Now we expect the host
+ int index = retValue.indexOf( "/" );
+ if ( index >= 0 )
+ {
+ retValue = retValue.substring( index + 1 );
+ }
+
+ // special case: if there is a windows drive letter, then keep the original return value
+ if ( retValue.length() >= 2 && ( retValue.charAt( 1 ) == '|' || retValue.charAt( 1 ) == ':' ) )
+ {
+ retValue = retValue.charAt( 0 ) + ":" + retValue.substring( 2 );
+ }
+ else if ( index >= 0 )
+ {
+ // leading / was previously stripped
+ retValue = "/" + retValue;
+ }
+ }
+ }
+
+ // special case: if there is a windows drive letter using |, switch to :
+ if ( retValue.length() >= 2 && retValue.charAt( 1 ) == '|' )
+ {
+ retValue = retValue.charAt( 0 ) + ":" + retValue.substring( 2 );
+ }
+
+ // normalize separators
+ retValue = new File( retValue ).getPath();
+ }
+
+ if ( retValue == null )
+ {
+ retValue = "/";
+ }
+ return retValue.trim();
+ }
+
+ /**
+ * Decodes the specified (portion of a) URL. <strong>Note:</strong> This decoder assumes that ISO-8859-1 is used to
+ * convert URL-encoded bytes to characters.
+ *
+ * @param url The URL to decode, may be <code>null</code>.
+ * @return The decoded URL or <code>null</code> if the input was <code>null</code>.
+ */
+ private static String decode( String url )
+ {
+ String decoded = url;
+ if ( url != null )
+ {
+ int pos = -1;
+ while ( ( pos = decoded.indexOf( '%', pos + 1 ) ) >= 0 )
+ {
+ if ( pos + 2 < decoded.length() )
+ {
+ String hexStr = decoded.substring( pos + 1, pos + 3 );
+ char ch = (char) Integer.parseInt( hexStr, 16 );
+ decoded = decoded.substring( 0, pos ) + ch + decoded.substring( pos + 3 );
+ }
+ }
+ }
+ return decoded;
+ }
+
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ( ( getId() == null ) ? 0 : getId().hashCode() );
+ return result;
+ }
+
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+ if ( obj == null )
+ {
+ return false;
+ }
+ if ( getClass() != obj.getClass() )
+ {
+ return false;
+ }
+
+ ArtifactRepository other = (ArtifactRepository) obj;
+
+ return eq( getId(), other.getId() );
+ }
+
+ protected static <T> boolean eq( T s1, T s2 )
+ {
+ return s1 != null ? s1.equals( s2 ) : s2 == null;
+ }
+
+ public Authentication getAuthentication()
+ {
+ return authentication;
+ }
+
+ public void setAuthentication( Authentication authentication )
+ {
+ this.authentication = authentication;
+ }
+
+ public Proxy getProxy()
+ {
+ return proxy;
+ }
+
+ public void setProxy( Proxy proxy )
+ {
+ this.proxy = proxy;
+ }
+
+ public boolean isBlacklisted()
+ {
+ return false;
+ }
+
+ public void setBlacklisted( boolean blackListed )
+ {
+ // no op
+ }
+
+ public boolean isUniqueVersion()
+ {
+ return true;
+ }
+
+ public boolean isProjectAware()
+ {
+ return false;
+ }
+
+ public List<ArtifactRepository> getMirroredRepositories()
+ {
+ return mirroredRepositories;
+ }
+
+ public void setMirroredRepositories( List<ArtifactRepository> mirroredRepositories )
+ {
+ if ( mirroredRepositories != null )
+ {
+ this.mirroredRepositories = mirroredRepositories;
+ }
+ else
+ {
+ this.mirroredRepositories = Collections.emptyList();
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/RepositoryCache.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/RepositoryCache.java
new file mode 100644
index 00000000..bf79d698
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/RepositoryCache.java
@@ -0,0 +1,58 @@
+package org.apache.maven.artifact.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Caches auxiliary data used during repository access like already processed metadata. The data in the cache is meant
+ * for exclusive consumption by the repository system and is opaque to the cache implementation.
+ *
+ * @author Benjamin Bentmann
+ */
+@Deprecated
+//
+// Used by Tycho and will break users and force them to upgrade to Maven 3.1 so we should really leave
+// this here, possibly indefinitely.
+//
+public interface RepositoryCache
+{
+
+ /**
+ * Puts the specified data into the cache. <strong>Warning:</strong> The cache will directly save the provided
+ * reference. If the cached data is mutable, i.e. could be modified after being put into the cache, the caller is
+ * responsible for creating a copy of the original data and store the copy in the cache.
+ *
+ * @param request The repository request from which this cache was retrieved, must not be {@code null}.
+ * @param key The key to use associate the data with, must not be {@code null}.
+ * @param data The data to store in the cache, may be {@code null}.
+ */
+ void put( RepositoryRequest request, Object key, Object data );
+
+ /**
+ * Gets the specified data from the cache. <strong>Warning:</strong> The cache will directly return the saved
+ * reference. If the cached data is to be modified after its retrieval, the caller is responsible to create a copy
+ * of the returned data and use this instead of the cache record.
+ *
+ * @param request The repository request from which this cache was retrieved, must not be {@code null}.
+ * @param key The key to use for lookup of the data, must not be {@code null}.
+ * @return The requested data or {@code null} if none was present in the cache.
+ */
+ Object get( RepositoryRequest request, Object key );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/RepositoryRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/RepositoryRequest.java
new file mode 100644
index 00000000..55f60686
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/RepositoryRequest.java
@@ -0,0 +1,95 @@
+package org.apache.maven.artifact.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+/**
+ * Collects basic settings to access the repository system.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface RepositoryRequest
+{
+
+ /**
+ * Indicates whether network access to remote repositories has been disabled.
+ *
+ * @return {@code true} if remote access has been disabled, {@code false} otherwise.
+ */
+ boolean isOffline();
+
+ /**
+ * Enables/disables network access to remote repositories.
+ *
+ * @param offline {@code true} to disable remote access, {@code false} to allow network access.
+ * @return This request, never {@code null}.
+ */
+ RepositoryRequest setOffline( boolean offline );
+
+ /**
+ * Indicates whether remote repositories should be re-checked for updated artifacts/metadata regardless of their
+ * configured update policy.
+ *
+ * @return {@code true} if remote repositories should be re-checked for updated artifacts/metadata, {@code false}
+ * otherwise.
+ */
+ boolean isForceUpdate();
+
+ /**
+ * Enables/disabled forced checks for updated artifacts/metadata on remote repositories.
+ *
+ * @param forceUpdate {@code true} to forcibly check the remote repositories for updated artifacts/metadata, {@code
+ * false} to use the update policy configured on each repository.
+ * @return This request, never {@code null}.
+ */
+ RepositoryRequest setForceUpdate( boolean forceUpdate );
+
+ /**
+ * Gets the local repository to use.
+ *
+ * @return The local repository to use or {@code null} if not set.
+ */
+ ArtifactRepository getLocalRepository();
+
+ /**
+ * Sets the local repository to use.
+ *
+ * @param localRepository The local repository to use.
+ * @return This request, never {@code null}.
+ */
+ RepositoryRequest setLocalRepository( ArtifactRepository localRepository );
+
+ /**
+ * Gets the remote repositories to use.
+ *
+ * @return The remote repositories to use, never {@code null}.
+ */
+ List<ArtifactRepository> getRemoteRepositories();
+
+ /**
+ * Sets the remote repositories to use.
+ *
+ * @param remoteRepositories The remote repositories to use.
+ * @return This request, never {@code null}.
+ */
+ RepositoryRequest setRemoteRepositories( List<ArtifactRepository> remoteRepositories );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java
new file mode 100644
index 00000000..70c0b14c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java
@@ -0,0 +1,112 @@
+package org.apache.maven.artifact.repository.layout;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * @author jdcasey
+ */
+@Component( role = ArtifactRepositoryLayout.class, hint = "default" )
+public class DefaultRepositoryLayout
+ implements ArtifactRepositoryLayout
+{
+ private static final char PATH_SEPARATOR = '/';
+
+ private static final char GROUP_SEPARATOR = '.';
+
+ private static final char ARTIFACT_SEPARATOR = '-';
+
+ public String getId()
+ {
+ return "default";
+ }
+
+ public String pathOf( Artifact artifact )
+ {
+ ArtifactHandler artifactHandler = artifact.getArtifactHandler();
+
+ StringBuilder path = new StringBuilder( 128 );
+
+ path.append( formatAsDirectory( artifact.getGroupId() ) ).append( PATH_SEPARATOR );
+ path.append( artifact.getArtifactId() ).append( PATH_SEPARATOR );
+ path.append( artifact.getBaseVersion() ).append( PATH_SEPARATOR );
+ path.append( artifact.getArtifactId() ).append( ARTIFACT_SEPARATOR ).append( artifact.getVersion() );
+
+ if ( artifact.hasClassifier() )
+ {
+ path.append( ARTIFACT_SEPARATOR ).append( artifact.getClassifier() );
+ }
+
+ if ( artifactHandler.getExtension() != null && artifactHandler.getExtension().length() > 0 )
+ {
+ path.append( GROUP_SEPARATOR ).append( artifactHandler.getExtension() );
+ }
+
+ return path.toString();
+ }
+
+ public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+ {
+ return pathOfRepositoryMetadata( metadata, metadata.getLocalFilename( repository ) );
+ }
+
+ private String pathOfRepositoryMetadata( ArtifactMetadata metadata,
+ String filename )
+ {
+ StringBuilder path = new StringBuilder( 128 );
+
+ path.append( formatAsDirectory( metadata.getGroupId() ) ).append( PATH_SEPARATOR );
+ if ( !metadata.storedInGroupDirectory() )
+ {
+ path.append( metadata.getArtifactId() ).append( PATH_SEPARATOR );
+
+ if ( metadata.storedInArtifactVersionDirectory() )
+ {
+ path.append( metadata.getBaseVersion() ).append( PATH_SEPARATOR );
+ }
+ }
+
+ path.append( filename );
+
+ return path.toString();
+ }
+
+ public String pathOfRemoteRepositoryMetadata( ArtifactMetadata metadata )
+ {
+ return pathOfRepositoryMetadata( metadata, metadata.getRemoteFilename() );
+ }
+
+ private String formatAsDirectory( String directory )
+ {
+ return directory.replace( GROUP_SEPARATOR, PATH_SEPARATOR );
+ }
+
+ @Override
+ public String toString()
+ {
+ return getId();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java
new file mode 100644
index 00000000..e1e5fe3f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java
@@ -0,0 +1,255 @@
+package org.apache.maven.artifact.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
+import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.WriterFactory;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * Shared methods of the repository metadata handling.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public abstract class AbstractRepositoryMetadata
+ implements RepositoryMetadata
+{
+ private Metadata metadata;
+
+ protected AbstractRepositoryMetadata( Metadata metadata )
+ {
+ this.metadata = metadata;
+ }
+
+ public String getRemoteFilename()
+ {
+ return "maven-metadata.xml";
+ }
+
+ public String getLocalFilename( ArtifactRepository repository )
+ {
+ return "maven-metadata-" + repository.getKey() + ".xml";
+ }
+
+ public void storeInLocalRepository( ArtifactRepository localRepository,
+ ArtifactRepository remoteRepository )
+ throws RepositoryMetadataStoreException
+ {
+ try
+ {
+ updateRepositoryMetadata( localRepository, remoteRepository );
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryMetadataStoreException( "Error updating group repository metadata", e );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new RepositoryMetadataStoreException( "Error updating group repository metadata", e );
+ }
+ }
+
+ protected void updateRepositoryMetadata( ArtifactRepository localRepository,
+ ArtifactRepository remoteRepository )
+ throws IOException, XmlPullParserException
+ {
+ MetadataXpp3Reader mappingReader = new MetadataXpp3Reader();
+
+ Metadata metadata = null;
+
+ File metadataFile = new File( localRepository.getBasedir(),
+ localRepository.pathOfLocalRepositoryMetadata( this, remoteRepository ) );
+
+ if ( metadataFile.length() == 0 )
+ {
+ if ( !metadataFile.delete() )
+ {
+ // sleep for 10ms just in case this is windows holding a file lock
+ try
+ {
+ Thread.sleep( 10 );
+ }
+ catch ( InterruptedException e )
+ {
+ // ignore
+ }
+ metadataFile.delete(); // if this fails, forget about it, we'll try to overwrite it anyway so no need
+ // to delete on exit
+ }
+ }
+ else if ( metadataFile.exists() )
+ {
+ Reader reader = null;
+
+ try
+ {
+ reader = ReaderFactory.newXmlReader( metadataFile );
+
+ metadata = mappingReader.read( reader, false );
+ }
+ finally
+ {
+ IOUtil.close( reader );
+ }
+ }
+
+ boolean changed;
+
+ // If file could not be found or was not valid, start from scratch
+ if ( metadata == null )
+ {
+ metadata = this.metadata;
+
+ changed = true;
+ }
+ else
+ {
+ changed = metadata.merge( this.metadata );
+ }
+
+ // beware meta-versions!
+ String version = metadata.getVersion();
+ if ( version != null && ( Artifact.LATEST_VERSION.equals( version ) || Artifact.RELEASE_VERSION.equals(
+ version ) ) )
+ {
+ // meta-versions are not valid <version/> values...don't write them.
+ metadata.setVersion( null );
+ }
+
+ if ( changed || !metadataFile.exists() )
+ {
+ Writer writer = null;
+ try
+ {
+ metadataFile.getParentFile().mkdirs();
+ writer = WriterFactory.newXmlWriter( metadataFile );
+
+ MetadataXpp3Writer mappingWriter = new MetadataXpp3Writer();
+
+ mappingWriter.write( writer, metadata );
+ }
+ finally
+ {
+ IOUtil.close( writer );
+ }
+ }
+ else
+ {
+ metadataFile.setLastModified( System.currentTimeMillis() );
+ }
+ }
+
+ public String toString()
+ {
+ return "repository metadata for: \'" + getKey() + "\'";
+ }
+
+ protected static Metadata createMetadata( Artifact artifact,
+ Versioning versioning )
+ {
+ Metadata metadata = new Metadata();
+ metadata.setGroupId( artifact.getGroupId() );
+ metadata.setArtifactId( artifact.getArtifactId() );
+ metadata.setVersion( artifact.getVersion() );
+ metadata.setVersioning( versioning );
+ return metadata;
+ }
+
+ protected static Versioning createVersioning( Snapshot snapshot )
+ {
+ Versioning versioning = new Versioning();
+ versioning.setSnapshot( snapshot );
+ versioning.updateTimestamp();
+ return versioning;
+ }
+
+ public void setMetadata( Metadata metadata )
+ {
+ this.metadata = metadata;
+ }
+
+ public Metadata getMetadata()
+ {
+ return metadata;
+ }
+
+ public void merge( org.apache.maven.repository.legacy.metadata.ArtifactMetadata metadata )
+ {
+ // TODO: not sure that it should assume this, maybe the calls to addMetadata should pre-merge, then artifact replaces?
+ AbstractRepositoryMetadata repoMetadata = (AbstractRepositoryMetadata) metadata;
+ this.metadata.merge( repoMetadata.getMetadata() );
+ }
+
+ public void merge( ArtifactMetadata metadata )
+ {
+ // TODO: not sure that it should assume this, maybe the calls to addMetadata should pre-merge, then artifact replaces?
+ AbstractRepositoryMetadata repoMetadata = (AbstractRepositoryMetadata) metadata;
+ this.metadata.merge( repoMetadata.getMetadata() );
+ }
+
+ public String extendedToString()
+ {
+ StringBuilder buffer = new StringBuilder();
+
+ buffer.append( "\nRepository Metadata\n--------------------------" );
+ buffer.append( "\nGroupId: " ).append( getGroupId() );
+ buffer.append( "\nArtifactId: " ).append( getArtifactId() );
+ buffer.append( "\nMetadata Type: " ).append( getClass().getName() );
+
+ return buffer.toString();
+ }
+
+ public int getNature()
+ {
+ return RELEASE;
+ }
+
+ public ArtifactRepositoryPolicy getPolicy( ArtifactRepository repository )
+ {
+ int nature = getNature();
+ if ( ( nature & RepositoryMetadata.RELEASE_OR_SNAPSHOT ) == RepositoryMetadata.RELEASE_OR_SNAPSHOT )
+ {
+ ArtifactRepositoryPolicy policy = new ArtifactRepositoryPolicy( repository.getReleases() );
+ policy.merge( repository.getSnapshots() );
+ return policy;
+ }
+ else if ( ( nature & RepositoryMetadata.SNAPSHOT ) != 0 )
+ {
+ return repository.getSnapshots();
+ }
+ else
+ {
+ return repository.getReleases();
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/ArtifactRepositoryMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/ArtifactRepositoryMetadata.java
new file mode 100644
index 00000000..85fc6018
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/ArtifactRepositoryMetadata.java
@@ -0,0 +1,129 @@
+package org.apache.maven.artifact.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.Restriction;
+import org.apache.maven.artifact.versioning.VersionRange;
+
+/**
+ * Metadata for the artifact directory of the repository.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class ArtifactRepositoryMetadata
+ extends AbstractRepositoryMetadata
+{
+ private Artifact artifact;
+
+ public ArtifactRepositoryMetadata( Artifact artifact )
+ {
+ this( artifact, null );
+ }
+
+ public ArtifactRepositoryMetadata( Artifact artifact,
+ Versioning versioning )
+ {
+ super( createMetadata( artifact, versioning ) );
+ this.artifact = artifact;
+ }
+
+ public boolean storedInGroupDirectory()
+ {
+ return false;
+ }
+
+ public boolean storedInArtifactVersionDirectory()
+ {
+ return false;
+ }
+
+ public String getGroupId()
+ {
+ return artifact.getGroupId();
+ }
+
+ public String getArtifactId()
+ {
+ return artifact.getArtifactId();
+ }
+
+ public String getBaseVersion()
+ {
+ // Don't want the artifact's version in here, as this is stored in the directory above that
+ return null;
+ }
+
+ public Object getKey()
+ {
+ return "artifact " + artifact.getGroupId() + ":" + artifact.getArtifactId();
+ }
+
+ public boolean isSnapshot()
+ {
+ // Don't consider the artifact's version in here, as this is stored in the directory above that
+ return false;
+ }
+
+ public int getNature()
+ {
+ if ( artifact.getVersion() != null )
+ {
+ return artifact.isSnapshot() ? SNAPSHOT : RELEASE;
+ }
+
+ VersionRange range = artifact.getVersionRange();
+ if ( range != null )
+ {
+ for ( Restriction restriction : range.getRestrictions() )
+ {
+ if ( isSnapshot( restriction.getLowerBound() ) || isSnapshot( restriction.getUpperBound() ) )
+ {
+ return RELEASE_OR_SNAPSHOT;
+ }
+ }
+ }
+
+ return RELEASE;
+ }
+
+ private boolean isSnapshot( ArtifactVersion version )
+ {
+ return version != null && ArtifactUtils.isSnapshot( version.getQualifier() );
+ }
+
+ public ArtifactRepository getRepository()
+ {
+ return null;
+ }
+
+ public void setRepository( ArtifactRepository remoteRepository )
+ {
+ /*
+ * NOTE: Metadata at the g:a level contains a collection of available versions. After merging, we can't tell
+ * which repository provides which version so the metadata manager must not restrict the artifact resolution to
+ * the repository with the most recent updates.
+ */
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java
new file mode 100644
index 00000000..22e3ade8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java
@@ -0,0 +1,92 @@
+package org.apache.maven.artifact.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+
+/**
+ * Describes repository directory metadata.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @todo not happy about the store method - they use "this"
+ */
+public interface RepositoryMetadata
+ extends org.apache.maven.artifact.metadata.ArtifactMetadata
+{
+
+ int RELEASE = 1;
+
+ int SNAPSHOT = 2;
+
+ int RELEASE_OR_SNAPSHOT = RELEASE | SNAPSHOT;
+
+ /**
+ * Get the repository the metadata was located in.
+ *
+ * @return the repository
+ */
+ ArtifactRepository getRepository();
+
+ /**
+ * Set the repository the metadata was located in.
+ *
+ * @param remoteRepository the repository
+ */
+ void setRepository( ArtifactRepository remoteRepository );
+
+ /**
+ * Get the repository metadata associated with this marker.
+ *
+ * @return the metadata, or <code>null</code> if none loaded
+ */
+ Metadata getMetadata();
+
+ /**
+ * Set the metadata contents.
+ *
+ * @param metadata the metadata
+ */
+ void setMetadata( Metadata metadata );
+
+ /**
+ * Whether this represents a snapshot.
+ *
+ * @return if it is a snapshot
+ */
+ boolean isSnapshot();
+
+ /**
+ * Gets the artifact quality this metadata refers to. One of {@link #RELEASE}, {@link #SNAPSHOT} or
+ * {@link #RELEASE_OR_SNAPSHOT}.
+ *
+ * @return The artifact quality this metadata refers to.
+ */
+ int getNature();
+
+ /**
+ * Gets the policy that applies to this metadata regarding the specified repository.
+ *
+ * @param repository The repository for which to determine the policy, must not be {@code null}.
+ * @return The policy, never {@code null}.
+ */
+ ArtifactRepositoryPolicy getPolicy( ArtifactRepository repository );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataDeploymentException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataDeploymentException.java
new file mode 100644
index 00000000..94545650
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataDeploymentException.java
@@ -0,0 +1,40 @@
+package org.apache.maven.artifact.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Error while deploying repository metadata.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class RepositoryMetadataDeploymentException
+ extends Throwable
+{
+ public RepositoryMetadataDeploymentException( String message )
+ {
+ super( message );
+ }
+
+ public RepositoryMetadataDeploymentException( String message,
+ Exception e )
+ {
+ super( message, e );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataInstallationException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataInstallationException.java
new file mode 100644
index 00000000..55bb57ed
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataInstallationException.java
@@ -0,0 +1,40 @@
+package org.apache.maven.artifact.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Error while installing repository metadata.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class RepositoryMetadataInstallationException
+ extends Throwable
+{
+ public RepositoryMetadataInstallationException( String message )
+ {
+ super( message );
+ }
+
+ public RepositoryMetadataInstallationException( String message,
+ Exception e )
+ {
+ super( message, e );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java
new file mode 100644
index 00000000..35626e58
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java
@@ -0,0 +1,61 @@
+package org.apache.maven.artifact.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.RepositoryRequest;
+
+public interface RepositoryMetadataManager
+{
+
+ void resolve( RepositoryMetadata repositoryMetadata, RepositoryRequest repositoryRequest )
+ throws RepositoryMetadataResolutionException;
+
+ void resolve( RepositoryMetadata repositoryMetadata, List<ArtifactRepository> repositories,
+ ArtifactRepository localRepository )
+ throws RepositoryMetadataResolutionException;
+
+ void resolveAlways( RepositoryMetadata metadata, ArtifactRepository localRepository,
+ ArtifactRepository remoteRepository )
+ throws RepositoryMetadataResolutionException;
+
+ /**
+ * Deploy metadata to the remote repository.
+ *
+ * @param metadata the metadata to deploy
+ * @param localRepository the local repository to install to first
+ * @param deploymentRepository the remote repository to deploy to
+ */
+ void deploy( ArtifactMetadata metadata, ArtifactRepository localRepository,
+ ArtifactRepository deploymentRepository )
+ throws RepositoryMetadataDeploymentException;
+
+ /**
+ * Install the metadata in the local repository.
+ *
+ * @param metadata the metadata
+ * @param localRepository the local repository
+ */
+ void install( ArtifactMetadata metadata, ArtifactRepository localRepository )
+ throws RepositoryMetadataInstallationException;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataResolutionException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataResolutionException.java
new file mode 100644
index 00000000..8a6f38d4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataResolutionException.java
@@ -0,0 +1,40 @@
+package org.apache.maven.artifact.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Error while retrieving repository metadata from the repository.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class RepositoryMetadataResolutionException
+ extends Exception
+{
+ public RepositoryMetadataResolutionException( String message )
+ {
+ super( message );
+ }
+
+ public RepositoryMetadataResolutionException( String message,
+ Exception e )
+ {
+ super( message, e );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/DefaultMetadataReader.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/DefaultMetadataReader.java
new file mode 100644
index 00000000..6a1578d8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/DefaultMetadataReader.java
@@ -0,0 +1,110 @@
+package org.apache.maven.artifact.repository.metadata.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.Map;
+
+import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * Handles deserialization of metadata from some kind of textual format like XML.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = MetadataReader.class )
+public class DefaultMetadataReader
+ implements MetadataReader
+{
+
+ public Metadata read( File input, Map<String, ?> options )
+ throws IOException
+ {
+ if ( input == null )
+ {
+ throw new IllegalArgumentException( "input file missing" );
+ }
+
+ Metadata metadata = read( ReaderFactory.newXmlReader( input ), options );
+
+ return metadata;
+ }
+
+ public Metadata read( Reader input, Map<String, ?> options )
+ throws IOException
+ {
+ if ( input == null )
+ {
+ throw new IllegalArgumentException( "input reader missing" );
+ }
+
+ try
+ {
+ MetadataXpp3Reader r = new MetadataXpp3Reader();
+ return r.read( input, isStrict( options ) );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new MetadataParseException( e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
+ }
+ finally
+ {
+ IOUtil.close( input );
+ }
+ }
+
+ public Metadata read( InputStream input, Map<String, ?> options )
+ throws IOException
+ {
+ if ( input == null )
+ {
+ throw new IllegalArgumentException( "input stream missing" );
+ }
+
+ try
+ {
+ MetadataXpp3Reader r = new MetadataXpp3Reader();
+ return r.read( input, isStrict( options ) );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new MetadataParseException( e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
+ }
+ finally
+ {
+ IOUtil.close( input );
+ }
+ }
+
+ private boolean isStrict( Map<String, ?> options )
+ {
+ Object value = ( options != null ) ? options.get( IS_STRICT ) : null;
+ return value == null || Boolean.parseBoolean( value.toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/MetadataParseException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/MetadataParseException.java
new file mode 100644
index 00000000..e3e141b1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/MetadataParseException.java
@@ -0,0 +1,93 @@
+package org.apache.maven.artifact.repository.metadata.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+
+/**
+ * Signals a failure to parse the metadata due to invalid syntax (e.g. non-wellformed XML or unknown elements).
+ *
+ * @author Benjamin Bentmann
+ */
+public class MetadataParseException
+ extends IOException
+{
+
+ /**
+ * The one-based index of the line containing the error.
+ */
+ private final int lineNumber;
+
+ /**
+ * The one-based index of the column containing the error.
+ */
+ private final int columnNumber;
+
+ /**
+ * Creates a new parser exception with the specified details.
+ *
+ * @param message The error message, may be {@code null}.
+ * @param lineNumber The one-based index of the line containing the error or {@code -1} if unknown.
+ * @param columnNumber The one-based index of the column containing the error or {@code -1} if unknown.
+ */
+ public MetadataParseException( String message, int lineNumber, int columnNumber )
+ {
+ super( message );
+ this.lineNumber = lineNumber;
+ this.columnNumber = columnNumber;
+ }
+
+ /**
+ * Creates a new parser exception with the specified details.
+ *
+ * @param message The error message, may be {@code null}.
+ * @param lineNumber The one-based index of the line containing the error or {@code -1} if unknown.
+ * @param columnNumber The one-based index of the column containing the error or {@code -1} if unknown.
+ * @param cause The nested cause of this error, may be {@code null}.
+ */
+ public MetadataParseException( String message, int lineNumber, int columnNumber, Throwable cause )
+ {
+ super( message );
+ initCause( cause );
+ this.lineNumber = lineNumber;
+ this.columnNumber = columnNumber;
+ }
+
+ /**
+ * Gets the one-based index of the line containing the error.
+ *
+ * @return The one-based index of the line containing the error or a non-positive value if unknown.
+ */
+ public int getLineNumber()
+ {
+ return lineNumber;
+ }
+
+ /**
+ * Gets the one-based index of the column containing the error.
+ *
+ * @return The one-based index of the column containing the error or non-positive value if unknown.
+ */
+ public int getColumnNumber()
+ {
+ return columnNumber;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/MetadataReader.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/MetadataReader.java
new file mode 100644
index 00000000..232246fd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/MetadataReader.java
@@ -0,0 +1,82 @@
+package org.apache.maven.artifact.repository.metadata.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.Map;
+
+import org.apache.maven.artifact.repository.metadata.Metadata;
+
+/**
+ * Handles deserialization of metadata from some kind of textual format like XML.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface MetadataReader
+{
+
+ /**
+ * The key for the option to enable strict parsing. This option is of type {@link Boolean} and defaults to {@code
+ * true}. If {@code false}, unknown elements will be ignored instead of causing a failure.
+ */
+ String IS_STRICT = "org.apache.maven.artifact.repository.metadata.io.isStrict";
+
+ /**
+ * Reads the metadata from the specified file.
+ *
+ * @param input The file to deserialize the metadata from, must not be {@code null}.
+ * @param options The options to use for deserialization, may be {@code null} to use the default values.
+ * @return The deserialized metadata, never {@code null}.
+ * @throws IOException If the metadata could not be deserialized.
+ * @throws MetadataParseException If the input format could not be parsed.
+ */
+ Metadata read( File input, Map<String, ?> options )
+ throws IOException, MetadataParseException;
+
+ /**
+ * Reads the metadata from the specified character reader. The reader will be automatically closed before the method
+ * returns.
+ *
+ * @param input The reader to deserialize the metadata from, must not be {@code null}.
+ * @param options The options to use for deserialization, may be {@code null} to use the default values.
+ * @return The deserialized metadata, never {@code null}.
+ * @throws IOException If the metadata could not be deserialized.
+ * @throws MetadataParseException If the input format could not be parsed.
+ */
+ Metadata read( Reader input, Map<String, ?> options )
+ throws IOException, MetadataParseException;
+
+ /**
+ * Reads the metadata from the specified byte stream. The stream will be automatically closed before the method
+ * returns.
+ *
+ * @param input The stream to deserialize the metadata from, must not be {@code null}.
+ * @param options The options to use for deserialization, may be {@code null} to use the default values.
+ * @return The deserialized metadata, never {@code null}.
+ * @throws IOException If the metadata could not be deserialized.
+ * @throws MetadataParseException If the input format could not be parsed.
+ */
+ Metadata read( InputStream input, Map<String, ?> options )
+ throws IOException, MetadataParseException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java
new file mode 100644
index 00000000..050ec478
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java
@@ -0,0 +1,329 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.RepositoryCache;
+import org.apache.maven.artifact.repository.RepositoryRequest;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.settings.Mirror;
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Server;
+
+/**
+ * A resolution request allows you to either use an existing MavenProject, or a coordinate (gid:aid:version)
+ * to process a POMs dependencies.
+ *
+ * @author Jason van Zyl
+ */
+public class ArtifactResolutionRequest
+ implements RepositoryRequest
+{
+
+ private Artifact artifact;
+
+ // Needs to go away
+ // These are really overrides now, projects defining dependencies for a plugin that override what is
+ // specified in the plugin itself.
+ private Set<Artifact> artifactDependencies;
+
+ private ArtifactRepository localRepository;
+
+ private List<ArtifactRepository> remoteRepositories;
+
+ private ArtifactFilter collectionFilter;
+
+ private ArtifactFilter resolutionFilter;
+
+ // Needs to go away
+ private List<ResolutionListener> listeners = new ArrayList<ResolutionListener>();
+
+ // This is like a filter but overrides all transitive versions
+ private Map<String, Artifact> managedVersionMap;
+
+ private boolean resolveRoot = true;
+
+ private boolean resolveTransitively = false;
+
+ private boolean offline;
+
+ private boolean forceUpdate;
+
+ private List<Server> servers;
+
+ private List<Mirror> mirrors;
+
+ private List<Proxy> proxies;
+
+ public ArtifactResolutionRequest()
+ {
+ // nothing here
+ }
+
+ public ArtifactResolutionRequest( RepositoryRequest request )
+ {
+ setLocalRepository( request.getLocalRepository() );
+ setRemoteRepositories( request.getRemoteRepositories() );
+ setOffline( request.isOffline() );
+ setForceUpdate( request.isForceUpdate() );
+ }
+
+ public Artifact getArtifact()
+ {
+ return artifact;
+ }
+
+ public ArtifactResolutionRequest setArtifact( Artifact artifact )
+ {
+ this.artifact = artifact;
+
+ return this;
+ }
+
+ public ArtifactResolutionRequest setArtifactDependencies( Set<Artifact> artifactDependencies )
+ {
+ this.artifactDependencies = artifactDependencies;
+
+ return this;
+ }
+
+ public Set<Artifact> getArtifactDependencies()
+ {
+ return artifactDependencies;
+ }
+
+ public ArtifactRepository getLocalRepository()
+ {
+ return localRepository;
+ }
+
+ public ArtifactResolutionRequest setLocalRepository( ArtifactRepository localRepository )
+ {
+ this.localRepository = localRepository;
+
+ return this;
+ }
+
+ public List<ArtifactRepository> getRemoteRepositories()
+ {
+ return remoteRepositories;
+ }
+
+ public ArtifactResolutionRequest setRemoteRepositories( List<ArtifactRepository> remoteRepositories )
+ {
+ this.remoteRepositories = remoteRepositories;
+
+ return this;
+ }
+
+ /**
+ * Gets the artifact filter that controls traversal of the dependency graph.
+ *
+ * @return The filter used to determine which of the artifacts in the dependency graph should be traversed or
+ * {@code null} to collect all transitive dependencies.
+ */
+ public ArtifactFilter getCollectionFilter()
+ {
+ return collectionFilter;
+ }
+
+ public ArtifactResolutionRequest setCollectionFilter( ArtifactFilter filter )
+ {
+ this.collectionFilter = filter;
+
+ return this;
+ }
+
+ /**
+ * Gets the artifact filter that controls downloading of artifact files. This filter operates on those artifacts
+ * that have been included by the {@link #getCollectionFilter()}.
+ *
+ * @return The filter used to determine which of the artifacts should have their files resolved or {@code null} to
+ * resolve the files for all collected artifacts.
+ */
+ public ArtifactFilter getResolutionFilter()
+ {
+ return resolutionFilter;
+ }
+
+ public ArtifactResolutionRequest setResolutionFilter( ArtifactFilter filter )
+ {
+ this.resolutionFilter = filter;
+
+ return this;
+ }
+
+ public List<ResolutionListener> getListeners()
+ {
+ return listeners;
+ }
+
+ public ArtifactResolutionRequest setListeners( List<ResolutionListener> listeners )
+ {
+ this.listeners = listeners;
+
+ return this;
+ }
+
+ public ArtifactResolutionRequest addListener( ResolutionListener listener )
+ {
+ listeners.add( listener );
+
+ return this;
+ }
+
+ public Map<String, Artifact> getManagedVersionMap()
+ {
+ return managedVersionMap;
+ }
+
+ public ArtifactResolutionRequest setManagedVersionMap( Map<String, Artifact> managedVersionMap )
+ {
+ this.managedVersionMap = managedVersionMap;
+
+ return this;
+ }
+
+ public ArtifactResolutionRequest setResolveRoot( boolean resolveRoot )
+ {
+ this.resolveRoot = resolveRoot;
+
+ return this;
+ }
+
+ public boolean isResolveRoot()
+ {
+ return resolveRoot;
+ }
+
+ public ArtifactResolutionRequest setResolveTransitively( boolean resolveDependencies )
+ {
+ this.resolveTransitively = resolveDependencies;
+
+ return this;
+ }
+
+ public boolean isResolveTransitively()
+ {
+ return resolveTransitively;
+ }
+
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder()
+ .append( "REQUEST: " ).append( "\n" )
+ .append( "artifact: " ).append( artifact ).append( "\n" )
+ .append( artifactDependencies ).append( "\n" )
+ .append( "localRepository: " ).append( localRepository ).append( "\n" )
+ .append( "remoteRepositories: " ).append( remoteRepositories ).append( "\n" );
+
+ return sb.toString();
+ }
+
+ public boolean isOffline()
+ {
+ return offline;
+ }
+
+ public ArtifactResolutionRequest setOffline( boolean offline )
+ {
+ this.offline = offline;
+
+ return this;
+ }
+
+ public boolean isForceUpdate()
+ {
+ return forceUpdate;
+ }
+
+ public ArtifactResolutionRequest setForceUpdate( boolean forceUpdate )
+ {
+ this.forceUpdate = forceUpdate;
+
+ return this;
+ }
+
+ public ArtifactResolutionRequest setServers( List<Server> servers )
+ {
+ this.servers = servers;
+
+ return this;
+ }
+
+ public List<Server> getServers()
+ {
+ if ( servers == null )
+ {
+ servers = new ArrayList<Server>();
+ }
+
+ return servers;
+ }
+
+ public ArtifactResolutionRequest setMirrors( List<Mirror> mirrors )
+ {
+ this.mirrors = mirrors;
+
+ return this;
+ }
+
+ public List<Mirror> getMirrors()
+ {
+ if ( mirrors == null )
+ {
+ mirrors = new ArrayList<Mirror>();
+ }
+
+ return mirrors;
+ }
+
+ public ArtifactResolutionRequest setProxies( List<Proxy> proxies )
+ {
+ this.proxies = proxies;
+
+ return this;
+ }
+
+ public List<Proxy> getProxies()
+ {
+ if ( proxies == null )
+ {
+ proxies = new ArrayList<Proxy>();
+ }
+
+ return proxies;
+ }
+
+ //
+ // Used by Tycho and will break users and force them to upgrade to Maven 3.1 so we should really leave
+ // this here, possibly indefinitely.
+ //
+ public ArtifactResolutionRequest setCache( RepositoryCache cache )
+ {
+ return this;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java
new file mode 100644
index 00000000..86bfdb60
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java
@@ -0,0 +1,358 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
+
+/**
+ * Specific problems during resolution that we want to account for:
+ * <p/>
+ * - missing metadata - version range violations - version circular dependencies - missing artifacts
+ * - network/transfer errors - file system errors: permissions
+ *
+ * @author Jason van Zyl
+ * @TODO carlos: all these possible has*Exceptions and get*Exceptions methods make the clients too
+ * complex requiring a long list of checks, need to create a parent/interfact/encapsulation
+ * for the types of exceptions
+ */
+public class ArtifactResolutionResult
+{
+ private Artifact originatingArtifact;
+
+ private List<Artifact> missingArtifacts;
+
+ // Exceptions
+
+ private List<Exception> exceptions;
+
+ private List<Exception> versionRangeViolations;
+
+ private List<ArtifactResolutionException> metadataResolutionExceptions;
+
+ private List<CyclicDependencyException> circularDependencyExceptions;
+
+ private List<ArtifactResolutionException> errorArtifactExceptions;
+
+ // file system errors
+
+ private List<ArtifactRepository> repositories;
+
+ private Set<Artifact> artifacts;
+
+ private Set<ResolutionNode> resolutionNodes;
+
+ public Artifact getOriginatingArtifact()
+ {
+ return originatingArtifact;
+ }
+
+ public ArtifactResolutionResult setOriginatingArtifact( final Artifact originatingArtifact )
+ {
+ this.originatingArtifact = originatingArtifact;
+
+ return this;
+ }
+
+ public void addArtifact( Artifact artifact )
+ {
+ if ( artifacts == null )
+ {
+ artifacts = new LinkedHashSet<Artifact>();
+ }
+
+ artifacts.add( artifact );
+ }
+
+ public Set<Artifact> getArtifacts()
+ {
+ if ( artifacts == null )
+ {
+ artifacts = new LinkedHashSet<Artifact>();
+ }
+
+ return artifacts;
+ }
+
+ public void setArtifacts( Set<Artifact> artifacts )
+ {
+ this.artifacts = artifacts;
+ }
+
+ public Set<ResolutionNode> getArtifactResolutionNodes()
+ {
+ if ( resolutionNodes == null )
+ {
+ resolutionNodes = new LinkedHashSet<ResolutionNode>();
+ }
+
+ return resolutionNodes;
+ }
+
+ public void setArtifactResolutionNodes( Set<ResolutionNode> resolutionNodes )
+ {
+ this.resolutionNodes = resolutionNodes;
+ }
+
+ public boolean hasMissingArtifacts()
+ {
+ return missingArtifacts != null && !missingArtifacts.isEmpty();
+ }
+
+ public List<Artifact> getMissingArtifacts()
+ {
+ return missingArtifacts == null ? Collections.<Artifact>emptyList() : missingArtifacts;
+ }
+
+ public ArtifactResolutionResult addMissingArtifact( Artifact artifact )
+ {
+ missingArtifacts = initList( missingArtifacts );
+
+ missingArtifacts.add( artifact );
+
+ return this;
+ }
+
+ public ArtifactResolutionResult setUnresolvedArtifacts( final List<Artifact> unresolvedArtifacts )
+ {
+ this.missingArtifacts = unresolvedArtifacts;
+
+ return this;
+ }
+
+ public boolean isSuccess()
+ {
+ return !( hasMissingArtifacts() || hasExceptions() );
+ }
+
+ // ------------------------------------------------------------------------
+ // Exceptions
+ // ------------------------------------------------------------------------
+
+ public boolean hasExceptions()
+ {
+ return exceptions != null && !exceptions.isEmpty();
+ }
+
+ public List<Exception> getExceptions()
+ {
+ return exceptions == null ? Collections.<Exception>emptyList() : exceptions;
+ }
+
+ // ------------------------------------------------------------------------
+ // Version Range Violations
+ // ------------------------------------------------------------------------
+
+ public boolean hasVersionRangeViolations()
+ {
+ return versionRangeViolations != null;
+ }
+
+ /**
+ * @TODO this needs to accept a {@link OverConstrainedVersionException} as returned by
+ * {@link #getVersionRangeViolation(int)} but it's not used like that in
+ * {@link DefaultLegacyArtifactCollector}
+ */
+ public ArtifactResolutionResult addVersionRangeViolation( Exception e )
+ {
+ versionRangeViolations = initList( versionRangeViolations );
+
+ versionRangeViolations.add( e );
+
+ exceptions = initList( exceptions );
+
+ exceptions.add( e );
+
+ return this;
+ }
+
+ public OverConstrainedVersionException getVersionRangeViolation( int i )
+ {
+ return (OverConstrainedVersionException) versionRangeViolations.get( i );
+ }
+
+ public List<Exception> getVersionRangeViolations()
+ {
+ return versionRangeViolations == null ? Collections.<Exception>emptyList() : versionRangeViolations;
+ }
+
+ // ------------------------------------------------------------------------
+ // Metadata Resolution Exceptions: ArtifactResolutionExceptions
+ // ------------------------------------------------------------------------
+
+ public boolean hasMetadataResolutionExceptions()
+ {
+ return metadataResolutionExceptions != null;
+ }
+
+ public ArtifactResolutionResult addMetadataResolutionException( ArtifactResolutionException e )
+ {
+ metadataResolutionExceptions = initList( metadataResolutionExceptions );
+
+ metadataResolutionExceptions.add( e );
+
+ exceptions = initList( exceptions );
+
+ exceptions.add( e );
+
+ return this;
+ }
+
+ public ArtifactResolutionException getMetadataResolutionException( int i )
+ {
+ return metadataResolutionExceptions.get( i );
+ }
+
+ public List<ArtifactResolutionException> getMetadataResolutionExceptions()
+ {
+ return metadataResolutionExceptions == null ? Collections.<ArtifactResolutionException>emptyList()
+ : metadataResolutionExceptions;
+ }
+
+ // ------------------------------------------------------------------------
+ // ErrorArtifactExceptions: ArtifactResolutionExceptions
+ // ------------------------------------------------------------------------
+
+ public boolean hasErrorArtifactExceptions()
+ {
+ return errorArtifactExceptions != null;
+ }
+
+ public ArtifactResolutionResult addErrorArtifactException( ArtifactResolutionException e )
+ {
+ errorArtifactExceptions = initList( errorArtifactExceptions );
+
+ errorArtifactExceptions.add( e );
+
+ exceptions = initList( exceptions );
+
+ exceptions.add( e );
+
+ return this;
+ }
+
+ public List<ArtifactResolutionException> getErrorArtifactExceptions()
+ {
+ if ( errorArtifactExceptions == null )
+ {
+ return Collections.emptyList();
+ }
+
+ return errorArtifactExceptions;
+ }
+
+ // ------------------------------------------------------------------------
+ // Circular Dependency Exceptions
+ // ------------------------------------------------------------------------
+
+ public boolean hasCircularDependencyExceptions()
+ {
+ return circularDependencyExceptions != null;
+ }
+
+ public ArtifactResolutionResult addCircularDependencyException( CyclicDependencyException e )
+ {
+ circularDependencyExceptions = initList( circularDependencyExceptions );
+
+ circularDependencyExceptions.add( e );
+
+ exceptions = initList( exceptions );
+
+ exceptions.add( e );
+
+ return this;
+ }
+
+ public CyclicDependencyException getCircularDependencyException( int i )
+ {
+ return circularDependencyExceptions.get( i );
+ }
+
+ public List<CyclicDependencyException> getCircularDependencyExceptions()
+ {
+ if ( circularDependencyExceptions == null )
+ {
+ return Collections.emptyList();
+ }
+
+ return circularDependencyExceptions;
+ }
+
+ // ------------------------------------------------------------------------
+ // Repositories
+ // ------------------------------------------------------------------------
+
+ public List<ArtifactRepository> getRepositories()
+ {
+ if ( repositories == null )
+ {
+ return Collections.emptyList();
+ }
+
+ return repositories;
+ }
+
+ public ArtifactResolutionResult setRepositories( final List<ArtifactRepository> repositories )
+ {
+ this.repositories = repositories;
+
+ return this;
+ }
+
+ //
+ // Internal
+ //
+
+ private <T> List<T> initList( final List<T> l )
+ {
+ if ( l == null )
+ {
+ return new ArrayList<T>();
+ }
+ return l;
+ }
+
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ if ( artifacts != null )
+ {
+ int i = 1;
+ sb.append( "---------" ).append( "\n" );
+ sb.append( artifacts.size() ).append( "\n" );
+ for ( Artifact a : artifacts )
+ {
+ sb.append( i ).append( " " ).append( a ).append( "\n" );
+ i++;
+ }
+ sb.append( "---------" ).append( "\n" );
+ }
+
+ return sb.toString();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/DefaultResolutionErrorHandler.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/DefaultResolutionErrorHandler.java
new file mode 100644
index 00000000..a8caa79b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/DefaultResolutionErrorHandler.java
@@ -0,0 +1,89 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * @author Benjamin Bentmann
+ */
+@Component( role = ResolutionErrorHandler.class )
+public class DefaultResolutionErrorHandler
+ implements ResolutionErrorHandler
+{
+
+ public void throwErrors( ArtifactResolutionRequest request, ArtifactResolutionResult result )
+ throws ArtifactResolutionException
+ {
+ // Metadata cannot be found
+
+ if ( result.hasMetadataResolutionExceptions() )
+ {
+ throw result.getMetadataResolutionException( 0 );
+ }
+
+ // Metadata cannot be retrieved
+
+ // Cyclic Dependency Error
+
+ if ( result.hasCircularDependencyExceptions() )
+ {
+ throw result.getCircularDependencyException( 0 );
+ }
+
+ // Version Range Violation
+
+ if ( result.hasVersionRangeViolations() )
+ {
+ throw result.getVersionRangeViolation( 0 );
+ }
+
+ // Transfer Error
+
+ if ( result.hasErrorArtifactExceptions() )
+ {
+ throw result.getErrorArtifactExceptions().get( 0 );
+ }
+
+ if ( result.hasMissingArtifacts() )
+ {
+ throw new MultipleArtifactsNotFoundException( request.getArtifact(), toList( result.getArtifacts() ),
+ result.getMissingArtifacts(),
+ request.getRemoteRepositories() );
+ }
+
+ // this should never happen since we checked all possible error sources before but better be sure
+ if ( result.hasExceptions() )
+ {
+ throw new ArtifactResolutionException( "Unknown error during artifact resolution, " + request + ", "
+ + result.getExceptions(), request.getArtifact(), request.getRemoteRepositories() );
+ }
+ }
+
+ private static <T> List<T> toList( Collection<T> items )
+ {
+ return ( items != null ) ? new ArrayList<T>( items ) : null;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionErrorHandler.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionErrorHandler.java
new file mode 100644
index 00000000..c54e5b6c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionErrorHandler.java
@@ -0,0 +1,31 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author Benjamin Bentmann
+ */
+public interface ResolutionErrorHandler
+{
+
+ void throwErrors( ArtifactResolutionRequest request, ArtifactResolutionResult result )
+ throws ArtifactResolutionException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionListener.java
new file mode 100644
index 00000000..97687de2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionListener.java
@@ -0,0 +1,109 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.versioning.VersionRange;
+
+/**
+ * Listens to the resolution process and handles events.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public interface ResolutionListener
+{
+ String ROLE = ResolutionListener.class.getName();
+
+ int TEST_ARTIFACT = 1;
+
+ int PROCESS_CHILDREN = 2;
+
+ int FINISH_PROCESSING_CHILDREN = 3;
+
+ int INCLUDE_ARTIFACT = 4;
+
+ int OMIT_FOR_NEARER = 5;
+
+ int UPDATE_SCOPE = 6;
+
+ @Deprecated
+ int MANAGE_ARTIFACT = 7;
+
+ int OMIT_FOR_CYCLE = 8;
+
+ /**
+ * this event means that the artifactScope has NOT been updated to a farther node artifactScope because current
+ * node is in the first level pom
+ */
+ int UPDATE_SCOPE_CURRENT_POM = 9;
+
+ int SELECT_VERSION_FROM_RANGE = 10;
+
+ int RESTRICT_RANGE = 11;
+
+ int MANAGE_ARTIFACT_VERSION = 12;
+
+ int MANAGE_ARTIFACT_SCOPE = 13;
+
+ int MANAGE_ARTIFACT_SYSTEM_PATH = 14;
+
+ void testArtifact( Artifact node );
+
+ void startProcessChildren( Artifact artifact );
+
+ void endProcessChildren( Artifact artifact );
+
+ void includeArtifact( Artifact artifact );
+
+ void omitForNearer( Artifact omitted,
+ Artifact kept );
+
+ void updateScope( Artifact artifact,
+ String scope );
+
+ @Deprecated
+ void manageArtifact( Artifact artifact,
+ Artifact replacement );
+
+ // TODO Use the following two instead of manageArtifact
+ // TODO Remove ResolutionListenerDM interface
+
+ //void manageArtifactVersion( Artifact artifact, Artifact replacement );
+
+ //void manageArtifactScope( Artifact artifact, Artifact replacement );
+
+ void omitForCycle( Artifact artifact );
+
+ /**
+ * This event means that the artifactScope has NOT been updated to a farther node artifactScope because current
+ * node is in the first level pom
+ *
+ * @param artifact current node artifact, the one in the first level pom
+ * @param ignoredScope artifactScope that was ignored because artifact was in first level pom
+ */
+ void updateScopeCurrentPom( Artifact artifact,
+ String ignoredScope );
+
+ void selectVersionFromRange( Artifact artifact );
+
+ void restrictRange( Artifact artifact,
+ Artifact replacement,
+ VersionRange newRange );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java
new file mode 100644
index 00000000..ae6c9214
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java
@@ -0,0 +1,251 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
+
+public class ResolutionNode
+{
+ private Artifact artifact;
+
+ private List<ResolutionNode> children;
+
+ private final List<Object> parents;
+
+ private final int depth;
+
+ private final ResolutionNode parent;
+
+ private final List<ArtifactRepository> remoteRepositories;
+
+ private boolean active = true;
+
+ private List<Artifact> trail;
+
+ public ResolutionNode( Artifact artifact, List<ArtifactRepository> remoteRepositories )
+ {
+ this.artifact = artifact;
+ this.remoteRepositories = remoteRepositories;
+ depth = 0;
+ parents = Collections.emptyList();
+ parent = null;
+ }
+
+ public ResolutionNode( Artifact artifact, List<ArtifactRepository> remoteRepositories, ResolutionNode parent )
+ {
+ this.artifact = artifact;
+ this.remoteRepositories = remoteRepositories;
+ depth = parent.depth + 1;
+ parents = new ArrayList<Object>();
+ parents.addAll( parent.parents );
+ parents.add( parent.getKey() );
+ this.parent = parent;
+ }
+
+ public Artifact getArtifact()
+ {
+ return artifact;
+ }
+
+ public Object getKey()
+ {
+ return artifact.getDependencyConflictId();
+ }
+
+ public void addDependencies( Set<Artifact> artifacts, List<ArtifactRepository> remoteRepositories,
+ ArtifactFilter filter )
+ throws CyclicDependencyException, OverConstrainedVersionException
+ {
+ if ( artifacts != null && !artifacts.isEmpty() )
+ {
+ children = new ArrayList<ResolutionNode>( artifacts.size() );
+
+ for ( Artifact a : artifacts )
+ {
+ if ( parents.contains( a.getDependencyConflictId() ) )
+ {
+ a.setDependencyTrail( getDependencyTrail() );
+
+ throw new CyclicDependencyException( "A dependency has introduced a cycle", a );
+ }
+
+ children.add( new ResolutionNode( a, remoteRepositories, this ) );
+ }
+ }
+ else
+ {
+ children = Collections.emptyList();
+ }
+ trail = null;
+ }
+
+ /**
+ * @return {@link List} &lt; {@link String} > with artifact ids
+ * @throws OverConstrainedVersionException
+ */
+ public List<String> getDependencyTrail()
+ throws OverConstrainedVersionException
+ {
+ List<Artifact> trial = getTrail();
+
+ List<String> ret = new ArrayList<String>( trial.size() );
+
+ for ( Artifact artifact : trial )
+ {
+ ret.add( artifact.getId() );
+ }
+
+ return ret;
+ }
+
+ private List<Artifact> getTrail()
+ throws OverConstrainedVersionException
+ {
+ if ( trail == null )
+ {
+ List<Artifact> ids = new LinkedList<Artifact>();
+ ResolutionNode node = this;
+ while ( node != null )
+ {
+ Artifact artifact = node.getArtifact();
+ if ( artifact.getVersion() == null )
+ {
+ // set the recommended version
+ ArtifactVersion selected = artifact.getSelectedVersion();
+ // MNG-2123: null is a valid response to getSelectedVersion, don't
+ // assume it won't ever be.
+ if ( selected != null )
+ {
+ artifact.selectVersion( selected.toString() );
+ }
+ else
+ {
+ throw new OverConstrainedVersionException( "Unable to get a selected Version for "
+ + artifact.getArtifactId(), artifact );
+ }
+ }
+
+ ids.add( 0, artifact );
+ node = node.parent;
+ }
+ trail = ids;
+ }
+ return trail;
+ }
+
+ public boolean isResolved()
+ {
+ return children != null;
+ }
+
+ /**
+ * Test whether the node is direct or transitive dependency.
+ */
+ public boolean isChildOfRootNode()
+ {
+ return parent != null && parent.parent == null;
+ }
+
+ public Iterator<ResolutionNode> getChildrenIterator()
+ {
+ return children.iterator();
+ }
+
+ public int getDepth()
+ {
+ return depth;
+ }
+
+ public List<ArtifactRepository> getRemoteRepositories()
+ {
+ return remoteRepositories;
+ }
+
+ public boolean isActive()
+ {
+ return active;
+ }
+
+ public void enable()
+ {
+ active = true;
+
+ // TODO: if it was null, we really need to go find them now... or is this taken care of by the ordering?
+ if ( children != null )
+ {
+ for ( ResolutionNode node : children )
+ {
+ node.enable();
+ }
+ }
+ }
+
+ public void disable()
+ {
+ active = false;
+ if ( children != null )
+ {
+ for ( ResolutionNode node : children )
+ {
+ node.disable();
+ }
+ }
+ }
+
+ public boolean filterTrail( ArtifactFilter filter )
+ throws OverConstrainedVersionException
+ {
+ boolean success = true;
+ if ( filter != null )
+ {
+ for ( Artifact artifact : getTrail() )
+ {
+ if ( !filter.include( artifact ) )
+ {
+ success = false;
+ }
+ }
+ }
+ return success;
+ }
+
+ @Override
+ public String toString()
+ {
+ return artifact.toString() + " (" + depth + "; " + ( active ? "enabled" : "disabled" ) + ")";
+ }
+
+ public void setArtifact( Artifact artifact )
+ {
+ this.artifact = artifact;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/AbstractScopeArtifactFilter.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/AbstractScopeArtifactFilter.java
new file mode 100644
index 00000000..95872dbb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/AbstractScopeArtifactFilter.java
@@ -0,0 +1,107 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * Filter to only retain objects in the given artifactScope or better.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+abstract class AbstractScopeArtifactFilter
+ implements ArtifactFilter
+{
+
+ private boolean compileScope;
+
+ private boolean runtimeScope;
+
+ private boolean testScope;
+
+ private boolean providedScope;
+
+ private boolean systemScope;
+
+ void addScopeInternal( String scope )
+ {
+ if ( Artifact.SCOPE_COMPILE.equals( scope ) )
+ {
+ systemScope = true;
+ providedScope = true;
+ compileScope = true;
+ }
+ else if ( Artifact.SCOPE_RUNTIME.equals( scope ) )
+ {
+ compileScope = true;
+ runtimeScope = true;
+ }
+ else if ( Artifact.SCOPE_COMPILE_PLUS_RUNTIME.equals( scope ) )
+ {
+ systemScope = true;
+ providedScope = true;
+ compileScope = true;
+ runtimeScope = true;
+ }
+ else if ( Artifact.SCOPE_RUNTIME_PLUS_SYSTEM.equals( scope ) )
+ {
+ systemScope = true;
+ compileScope = true;
+ runtimeScope = true;
+ }
+ else if ( Artifact.SCOPE_TEST.equals( scope ) )
+ {
+ systemScope = true;
+ providedScope = true;
+ compileScope = true;
+ runtimeScope = true;
+ testScope = true;
+ }
+ }
+
+ public boolean include( Artifact artifact )
+ {
+ if ( Artifact.SCOPE_COMPILE.equals( artifact.getScope() ) )
+ {
+ return compileScope;
+ }
+ else if ( Artifact.SCOPE_RUNTIME.equals( artifact.getScope() ) )
+ {
+ return runtimeScope;
+ }
+ else if ( Artifact.SCOPE_TEST.equals( artifact.getScope() ) )
+ {
+ return testScope;
+ }
+ else if ( Artifact.SCOPE_PROVIDED.equals( artifact.getScope() ) )
+ {
+ return providedScope;
+ }
+ else if ( Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) )
+ {
+ return systemScope;
+ }
+ else
+ {
+ return true;
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/AndArtifactFilter.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/AndArtifactFilter.java
new file mode 100644
index 00000000..5c6689de
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/AndArtifactFilter.java
@@ -0,0 +1,99 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * Apply multiple filters.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class AndArtifactFilter
+ implements ArtifactFilter
+{
+ private Set<ArtifactFilter> filters;
+
+ public AndArtifactFilter()
+ {
+ this.filters = new LinkedHashSet<ArtifactFilter>();
+ }
+
+ public AndArtifactFilter( List<ArtifactFilter> filters )
+ {
+ this.filters = new LinkedHashSet<ArtifactFilter>( filters );
+ }
+
+ public boolean include( Artifact artifact )
+ {
+ boolean include = true;
+ for ( Iterator<ArtifactFilter> i = filters.iterator(); i.hasNext() && include; )
+ {
+ ArtifactFilter filter = i.next();
+ if ( !filter.include( artifact ) )
+ {
+ include = false;
+ }
+ }
+ return include;
+ }
+
+ public void add( ArtifactFilter artifactFilter )
+ {
+ filters.add( artifactFilter );
+ }
+
+ public List<ArtifactFilter> getFilters()
+ {
+ return new ArrayList<ArtifactFilter>( filters );
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int hash = 17;
+ hash = hash * 31 + filters.hashCode();
+ return hash;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ if ( !( obj instanceof AndArtifactFilter ) )
+ {
+ return false;
+ }
+
+ AndArtifactFilter other = (AndArtifactFilter) obj;
+
+ return filters.equals( other.filters );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/CumulativeScopeArtifactFilter.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/CumulativeScopeArtifactFilter.java
new file mode 100644
index 00000000..fb0afcfb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/CumulativeScopeArtifactFilter.java
@@ -0,0 +1,122 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Filter to only retain objects in the given scope or better. This implementation allows the accumulation of multiple
+ * scopes and their associated implied scopes, so that the user can filter apply a series of implication rules in a
+ * single step. This should be a more efficient implementation of multiple standard {@link ScopeArtifactFilter}
+ * instances ORed together.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @author jdcasey
+ */
+public class CumulativeScopeArtifactFilter
+ extends AbstractScopeArtifactFilter
+{
+
+ private Set<String> scopes;
+
+ /**
+ * Create a new filter with the specified scopes and their implied scopes enabled.
+ *
+ * @param scopes The scopes to enable, along with all implied scopes, may be {@code null}.
+ */
+ public CumulativeScopeArtifactFilter( Collection<String> scopes )
+ {
+ this.scopes = new HashSet<String>();
+
+ addScopes( scopes );
+ }
+
+ /**
+ * Creates a new filter that combines the specified filters.
+ *
+ * @param filters The filters to combine, may be {@code null}.
+ */
+ public CumulativeScopeArtifactFilter( CumulativeScopeArtifactFilter... filters )
+ {
+ this.scopes = new HashSet<String>();
+
+ if ( filters != null )
+ {
+ for ( CumulativeScopeArtifactFilter filter : filters )
+ {
+ addScopes( filter.getScopes() );
+ }
+ }
+ }
+
+ private void addScopes( Collection<String> scopes )
+ {
+ if ( scopes != null )
+ {
+ for ( String scope : scopes )
+ {
+ addScope( scope );
+ }
+ }
+ }
+
+ private void addScope( String scope )
+ {
+ this.scopes.add( scope );
+
+ addScopeInternal( scope );
+ }
+
+ public Set<String> getScopes()
+ {
+ return scopes;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int hash = 17;
+
+ hash = hash * 31 + scopes.hashCode();
+
+ return hash;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ if ( !( obj instanceof CumulativeScopeArtifactFilter ) )
+ {
+ return false;
+ }
+
+ CumulativeScopeArtifactFilter that = (CumulativeScopeArtifactFilter) obj;
+
+ return scopes.equals( that.scopes );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExcludesArtifactFilter.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExcludesArtifactFilter.java
new file mode 100644
index 00000000..b6ef02e5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExcludesArtifactFilter.java
@@ -0,0 +1,44 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * Filter to exclude from a list of artifact patterns.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @todo I think this is equiv. to exclusion set filter in maven-core
+ */
+public class ExcludesArtifactFilter
+ extends IncludesArtifactFilter
+{
+ public ExcludesArtifactFilter( List<String> patterns )
+ {
+ super( patterns );
+ }
+
+ public boolean include( Artifact artifact )
+ {
+ return !super.include( artifact );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionSetFilter.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionSetFilter.java
new file mode 100644
index 00000000..c3dc9812
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionSetFilter.java
@@ -0,0 +1,86 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Arrays;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ */
+public class ExclusionSetFilter
+ implements ArtifactFilter
+{
+ private Set<String> excludes;
+
+ public ExclusionSetFilter( String[] excludes )
+ {
+ this.excludes = new LinkedHashSet<String>( Arrays.asList( excludes ) );
+ }
+
+ public ExclusionSetFilter( Set<String> excludes )
+ {
+ this.excludes = excludes;
+ }
+
+ public boolean include( Artifact artifact )
+ {
+ String id = artifact.getArtifactId();
+
+ if ( excludes.contains( id ) )
+ {
+ return false;
+ }
+
+ id = artifact.getGroupId() + ':' + id;
+
+ return !excludes.contains( id );
+
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int hash = 17;
+ hash = hash * 31 + excludes.hashCode();
+ return hash;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ if ( !( obj instanceof ExclusionSetFilter ) )
+ {
+ return false;
+ }
+
+ ExclusionSetFilter other = (ExclusionSetFilter) obj;
+
+ return excludes.equals( other.excludes );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/IncludesArtifactFilter.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/IncludesArtifactFilter.java
new file mode 100644
index 00000000..403e1251
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/IncludesArtifactFilter.java
@@ -0,0 +1,93 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * Filter to include from a list of artifact patterns.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class IncludesArtifactFilter
+ implements ArtifactFilter
+{
+ private final Set<String> patterns;
+
+ public IncludesArtifactFilter( List<String> patterns )
+ {
+ this.patterns = new LinkedHashSet<String>( patterns );
+ }
+
+ public boolean include( Artifact artifact )
+ {
+ String id = artifact.getGroupId() + ":" + artifact.getArtifactId();
+
+ boolean matched = false;
+ for ( Iterator<String> i = patterns.iterator(); i.hasNext() & !matched; )
+ {
+ // TODO: what about wildcards? Just specifying groups? versions?
+ if ( id.equals( i.next() ) )
+ {
+ matched = true;
+ }
+ }
+ return matched;
+ }
+
+ public List<String> getPatterns()
+ {
+ return new ArrayList<String>( patterns );
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int hash = 17;
+ hash = hash * 31 + patterns.hashCode();
+
+ return hash;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ // make sure IncludesArtifactFilter is not equal ExcludesArtifactFilter!
+ if ( obj == null || getClass() != obj.getClass() )
+ {
+ return false;
+ }
+
+ IncludesArtifactFilter other = (IncludesArtifactFilter) obj;
+
+ return patterns.equals( other.patterns );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java
new file mode 100644
index 00000000..1d131b71
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java
@@ -0,0 +1,78 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Filter to only retain objects in the given artifactScope or better.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class ScopeArtifactFilter
+ extends AbstractScopeArtifactFilter
+{
+
+ private final String scope;
+
+ public ScopeArtifactFilter( String scope )
+ {
+ this.scope = scope;
+
+ addScopeInternal( scope );
+ }
+
+ public String getScope()
+ {
+ return scope;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int hash = 17;
+
+ hash = hash * 31 + ( scope != null ? scope.hashCode() : 0 );
+
+ return hash;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ if ( !( obj instanceof ScopeArtifactFilter ) )
+ {
+ return false;
+ }
+
+ ScopeArtifactFilter other = (ScopeArtifactFilter) obj;
+
+ return equals( scope, other.scope );
+ }
+
+ private static <T> boolean equals( T str1, T str2 )
+ {
+ return str1 != null ? str1.equals( str2 ) : str2 == null;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/bridge/MavenRepositorySystem.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/bridge/MavenRepositorySystem.java
new file mode 100644
index 00000000..f33bc328
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/bridge/MavenRepositorySystem.java
@@ -0,0 +1,785 @@
+package org.apache.maven.bridge;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.Authentication;
+import org.apache.maven.artifact.repository.MavenArtifactRepository;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout2;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Exclusion;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.repository.Proxy;
+import org.apache.maven.repository.RepositorySystem;
+import org.apache.maven.settings.Mirror;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.util.StringUtils;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.AuthenticationContext;
+import org.eclipse.aether.repository.AuthenticationSelector;
+import org.eclipse.aether.repository.ProxySelector;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * @author Jason van Zyl
+ */
+@Component( role = MavenRepositorySystem.class, hint = "default" )
+public class MavenRepositorySystem
+{
+ @Requirement
+ private ArtifactHandlerManager artifactHandlerManager;
+
+ @Requirement( role = ArtifactRepositoryLayout.class )
+ private Map<String, ArtifactRepositoryLayout> layouts;
+
+ // DefaultProjectBuilder
+ public Artifact createArtifact( String groupId, String artifactId, String version, String scope, String type )
+ {
+ return XcreateArtifact( groupId, artifactId, version, scope, type );
+ }
+
+ // DefaultProjectBuilder
+ public Artifact createProjectArtifact( String groupId, String artifactId, String metaVersionId )
+ {
+ return XcreateProjectArtifact( groupId, artifactId, metaVersionId );
+ }
+
+ // DefaultProjectBuilder
+ public Artifact createDependencyArtifact( Dependency d )
+ {
+ if ( d.getVersion() == null )
+ {
+ return null;
+ }
+
+ VersionRange versionRange;
+ try
+ {
+ versionRange = VersionRange.createFromVersionSpec( d.getVersion() );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ return null;
+ }
+
+ Artifact artifact =
+ XcreateDependencyArtifact( d.getGroupId(), d.getArtifactId(), versionRange, d.getType(),
+ d.getClassifier(), d.getScope(), d.isOptional() );
+
+ if ( Artifact.SCOPE_SYSTEM.equals( d.getScope() ) && d.getSystemPath() != null )
+ {
+ artifact.setFile( new File( d.getSystemPath() ) );
+ }
+
+ if ( !d.getExclusions().isEmpty() )
+ {
+ List<String> exclusions = new ArrayList<String>();
+
+ for ( Exclusion exclusion : d.getExclusions() )
+ {
+ exclusions.add( exclusion.getGroupId() + ':' + exclusion.getArtifactId() );
+ }
+
+ artifact.setDependencyFilter( new ExcludesArtifactFilter( exclusions ) );
+ }
+
+ return artifact;
+ }
+
+ // DefaultProjectBuilder
+ public Artifact createExtensionArtifact( String groupId, String artifactId, String version )
+ {
+ VersionRange versionRange;
+ try
+ {
+ versionRange = VersionRange.createFromVersionSpec( version );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ return null;
+ }
+
+ return XcreateExtensionArtifact( groupId, artifactId, versionRange );
+ }
+
+ // DefaultProjectBuilder
+ public Artifact createParentArtifact( String groupId, String artifactId, String version )
+ {
+ return XcreateParentArtifact( groupId, artifactId, version );
+ }
+
+ // DefaultProjectBuilder
+ public Artifact createPluginArtifact( Plugin plugin )
+ {
+ VersionRange versionRange;
+ try
+ {
+ String version = plugin.getVersion();
+ if ( StringUtils.isEmpty( version ) )
+ {
+ version = "RELEASE";
+ }
+ versionRange = VersionRange.createFromVersionSpec( version );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ return null;
+ }
+
+ return XcreatePluginArtifact( plugin.getGroupId(), plugin.getArtifactId(), versionRange );
+ }
+
+ public void injectMirror( List<ArtifactRepository> repositories, List<Mirror> mirrors )
+ {
+ if ( repositories != null && mirrors != null )
+ {
+ for ( ArtifactRepository repository : repositories )
+ {
+ Mirror mirror = getMirror( repository, mirrors );
+ injectMirror( repository, mirror );
+ }
+ }
+ }
+
+ private Mirror getMirror( RepositorySystemSession session, ArtifactRepository repository )
+ {
+ if ( session != null )
+ {
+ org.eclipse.aether.repository.MirrorSelector selector = session.getMirrorSelector();
+ if ( selector != null )
+ {
+ RemoteRepository repo = selector.getMirror( RepositoryUtils.toRepo( repository ) );
+ if ( repo != null )
+ {
+ Mirror mirror = new Mirror();
+ mirror.setId( repo.getId() );
+ mirror.setUrl( repo.getUrl() );
+ mirror.setLayout( repo.getContentType() );
+ return mirror;
+ }
+ }
+ }
+ return null;
+ }
+
+ public void injectMirror( RepositorySystemSession session, List<ArtifactRepository> repositories )
+ {
+ if ( repositories != null && session != null )
+ {
+ for ( ArtifactRepository repository : repositories )
+ {
+ Mirror mirror = getMirror( session, repository );
+ injectMirror( repository, mirror );
+ }
+ }
+ }
+
+ private void injectMirror( ArtifactRepository repository, Mirror mirror )
+ {
+ if ( mirror != null )
+ {
+ ArtifactRepository original =
+ createArtifactRepository( repository.getId(), repository.getUrl(), repository.getLayout(),
+ repository.getSnapshots(), repository.getReleases() );
+
+ repository.setMirroredRepositories( Collections.singletonList( original ) );
+
+ repository.setId( mirror.getId() );
+ repository.setUrl( mirror.getUrl() );
+
+ if ( StringUtils.isNotEmpty( mirror.getLayout() ) )
+ {
+ repository.setLayout( getLayout( mirror.getLayout() ) );
+ }
+ }
+ }
+
+ private Authentication getAuthentication( RepositorySystemSession session, ArtifactRepository repository )
+ {
+ if ( session != null )
+ {
+ AuthenticationSelector selector = session.getAuthenticationSelector();
+ if ( selector != null )
+ {
+ RemoteRepository repo = RepositoryUtils.toRepo( repository );
+ org.eclipse.aether.repository.Authentication auth = selector.getAuthentication( repo );
+ if ( auth != null )
+ {
+ repo = new RemoteRepository.Builder( repo ).setAuthentication( auth ).build();
+ AuthenticationContext authCtx = AuthenticationContext.forRepository( session, repo );
+ Authentication result =
+ new Authentication( authCtx.get( AuthenticationContext.USERNAME ),
+ authCtx.get( AuthenticationContext.PASSWORD ) );
+ result.setPrivateKey( authCtx.get( AuthenticationContext.PRIVATE_KEY_PATH ) );
+ result.setPassphrase( authCtx.get( AuthenticationContext.PRIVATE_KEY_PASSPHRASE ) );
+ authCtx.close();
+ return result;
+ }
+ }
+ }
+ return null;
+ }
+
+ public void injectAuthentication( RepositorySystemSession session, List<ArtifactRepository> repositories )
+ {
+ if ( repositories != null && session != null )
+ {
+ for ( ArtifactRepository repository : repositories )
+ {
+ repository.setAuthentication( getAuthentication( session, repository ) );
+ }
+ }
+ }
+
+ private Proxy getProxy( RepositorySystemSession session, ArtifactRepository repository )
+ {
+ if ( session != null )
+ {
+ ProxySelector selector = session.getProxySelector();
+ if ( selector != null )
+ {
+ RemoteRepository repo = RepositoryUtils.toRepo( repository );
+ org.eclipse.aether.repository.Proxy proxy = selector.getProxy( repo );
+ if ( proxy != null )
+ {
+ Proxy p = new Proxy();
+ p.setHost( proxy.getHost() );
+ p.setProtocol( proxy.getType() );
+ p.setPort( proxy.getPort() );
+ if ( proxy.getAuthentication() != null )
+ {
+ repo = new RemoteRepository.Builder( repo ).setProxy( proxy ).build();
+ AuthenticationContext authCtx = AuthenticationContext.forProxy( session, repo );
+ p.setUserName( authCtx.get( AuthenticationContext.USERNAME ) );
+ p.setPassword( authCtx.get( AuthenticationContext.PASSWORD ) );
+ p.setNtlmDomain( authCtx.get( AuthenticationContext.NTLM_DOMAIN ) );
+ p.setNtlmHost( authCtx.get( AuthenticationContext.NTLM_WORKSTATION ) );
+ authCtx.close();
+ }
+ return p;
+ }
+ }
+ }
+ return null;
+ }
+
+ public void injectProxy( RepositorySystemSession session, List<ArtifactRepository> repositories )
+ {
+ if ( repositories != null && session != null )
+ {
+ for ( ArtifactRepository repository : repositories )
+ {
+ repository.setProxy( getProxy( session, repository ) );
+ }
+ }
+ }
+
+ private ArtifactRepositoryLayout getLayout( String id )
+ {
+ ArtifactRepositoryLayout layout = layouts.get( id );
+
+ return layout;
+ }
+
+
+ //
+ // Taken from LegacyRepositorySystem
+ //
+
+ public static org.apache.maven.model.Repository fromSettingsRepository( org.apache.maven.settings.Repository
+ settingsRepository )
+ {
+ org.apache.maven.model.Repository modelRepository = new org.apache.maven.model.Repository();
+ modelRepository.setId( settingsRepository.getId() );
+ modelRepository.setLayout( settingsRepository.getLayout() );
+ modelRepository.setName( settingsRepository.getName() );
+ modelRepository.setUrl( settingsRepository.getUrl() );
+ modelRepository.setReleases( fromSettingsRepositoryPolicy( settingsRepository.getReleases() ) );
+ modelRepository.setSnapshots( fromSettingsRepositoryPolicy( settingsRepository.getSnapshots() ) );
+ return modelRepository;
+ }
+
+ public static org.apache.maven.model.RepositoryPolicy fromSettingsRepositoryPolicy(
+ org.apache.maven.settings.RepositoryPolicy settingsRepositoryPolicy )
+ {
+ org.apache.maven.model.RepositoryPolicy modelRepositoryPolicy = new org.apache.maven.model.RepositoryPolicy();
+ if ( settingsRepositoryPolicy != null )
+ {
+ modelRepositoryPolicy.setEnabled( settingsRepositoryPolicy.isEnabled() );
+ modelRepositoryPolicy.setUpdatePolicy( settingsRepositoryPolicy.getUpdatePolicy() );
+ modelRepositoryPolicy.setChecksumPolicy( settingsRepositoryPolicy.getChecksumPolicy() );
+ }
+ return modelRepositoryPolicy;
+ }
+
+ public static ArtifactRepository buildArtifactRepository( org.apache.maven.settings.Repository repo )
+ throws InvalidRepositoryException
+ {
+ return buildArtifactRepository( fromSettingsRepository( repo ) );
+ }
+
+ public static ArtifactRepository buildArtifactRepository( org.apache.maven.model.Repository repo )
+ throws InvalidRepositoryException
+ {
+ if ( repo != null )
+ {
+ String id = repo.getId();
+
+ if ( StringUtils.isEmpty( id ) )
+ {
+ throw new InvalidRepositoryException( "Repository identifier missing", "" );
+ }
+
+ String url = repo.getUrl();
+
+ if ( StringUtils.isEmpty( url ) )
+ {
+ throw new InvalidRepositoryException( "URL missing for repository " + id, id );
+ }
+
+ ArtifactRepositoryPolicy snapshots = buildArtifactRepositoryPolicy( repo.getSnapshots() );
+
+ ArtifactRepositoryPolicy releases = buildArtifactRepositoryPolicy( repo.getReleases() );
+
+ ArtifactRepositoryLayout layout = new DefaultRepositoryLayout();
+
+ return createArtifactRepository( id, url, layout, snapshots, releases );
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ public static ArtifactRepositoryPolicy buildArtifactRepositoryPolicy( org.apache.maven.model.RepositoryPolicy
+ policy )
+ {
+ boolean enabled = true;
+
+ String updatePolicy = null;
+
+ String checksumPolicy = null;
+
+ if ( policy != null )
+ {
+ enabled = policy.isEnabled();
+
+ if ( policy.getUpdatePolicy() != null )
+ {
+ updatePolicy = policy.getUpdatePolicy();
+ }
+ if ( policy.getChecksumPolicy() != null )
+ {
+ checksumPolicy = policy.getChecksumPolicy();
+ }
+ }
+
+ return new ArtifactRepositoryPolicy( enabled, updatePolicy, checksumPolicy );
+ }
+
+ public ArtifactRepository createArtifactRepository( String id, String url, String layoutId,
+ ArtifactRepositoryPolicy snapshots,
+ ArtifactRepositoryPolicy releases )
+ throws Exception
+ {
+ ArtifactRepositoryLayout layout = layouts.get( layoutId );
+
+ checkLayout( id, layoutId, layout );
+
+ return createArtifactRepository( id, url, layout, snapshots, releases );
+ }
+
+ private void checkLayout( String repositoryId, String layoutId, ArtifactRepositoryLayout layout )
+ throws Exception
+ {
+ if ( layout == null )
+ {
+ throw new Exception( String.format( "Cannot find ArtifactRepositoryLayout instance for: %s %s", layoutId,
+ repositoryId ) );
+ }
+ }
+
+ public static ArtifactRepository createArtifactRepository( String id, String url,
+ ArtifactRepositoryLayout repositoryLayout,
+ ArtifactRepositoryPolicy snapshots,
+ ArtifactRepositoryPolicy releases )
+ {
+ if ( snapshots == null )
+ {
+ snapshots = new ArtifactRepositoryPolicy();
+ }
+
+ if ( releases == null )
+ {
+ releases = new ArtifactRepositoryPolicy();
+ }
+
+ ArtifactRepository repository;
+ if ( repositoryLayout instanceof ArtifactRepositoryLayout2 )
+ {
+ repository =
+ ( (ArtifactRepositoryLayout2) repositoryLayout ).newMavenArtifactRepository( id, url, snapshots,
+ releases );
+ }
+ else
+ {
+ repository = new MavenArtifactRepository( id, url, repositoryLayout, snapshots, releases );
+ }
+
+ return repository;
+ }
+
+ // ArtifactFactory
+ private Artifact XcreateArtifact( String groupId, String artifactId, String version, String scope, String type )
+ {
+ return XcreateArtifact( groupId, artifactId, version, scope, type, null, null );
+ }
+
+ private Artifact XcreateDependencyArtifact( String groupId, String artifactId, VersionRange versionRange,
+ String type, String classifier, String scope, boolean optional )
+ {
+ return XcreateArtifact( groupId, artifactId, versionRange, type, classifier, scope, null, optional );
+ }
+
+ private Artifact XcreateProjectArtifact( String groupId, String artifactId, String version )
+ {
+ return XcreateProjectArtifact( groupId, artifactId, version, null );
+ }
+
+ private Artifact XcreateParentArtifact( String groupId, String artifactId, String version )
+ {
+ return XcreateProjectArtifact( groupId, artifactId, version );
+ }
+
+ private Artifact XcreatePluginArtifact( String groupId, String artifactId, VersionRange versionRange )
+ {
+ return XcreateArtifact( groupId, artifactId, versionRange, "maven-plugin", null, Artifact.SCOPE_RUNTIME, null );
+ }
+
+ private Artifact XcreateProjectArtifact( String groupId, String artifactId, String version, String scope )
+ {
+ return XcreateArtifact( groupId, artifactId, version, scope, "pom" );
+ }
+
+ private Artifact XcreateExtensionArtifact( String groupId, String artifactId, VersionRange versionRange )
+ {
+ return XcreateArtifact( groupId, artifactId, versionRange, "jar", null, Artifact.SCOPE_RUNTIME, null );
+ }
+
+ private Artifact XcreateArtifact( String groupId, String artifactId, String version, String scope, String type,
+ String classifier, String inheritedScope )
+ {
+ VersionRange versionRange = null;
+ if ( version != null )
+ {
+ versionRange = VersionRange.createFromVersion( version );
+ }
+ return XcreateArtifact( groupId, artifactId, versionRange, type, classifier, scope, inheritedScope );
+ }
+
+ private Artifact XcreateArtifact( String groupId, String artifactId, VersionRange versionRange, String type,
+ String classifier, String scope, String inheritedScope )
+ {
+ return XcreateArtifact( groupId, artifactId, versionRange, type, classifier, scope, inheritedScope, false );
+ }
+
+ private Artifact XcreateArtifact( String groupId, String artifactId, VersionRange versionRange, String type,
+ String classifier, String scope, String inheritedScope, boolean optional )
+ {
+ String desiredScope = Artifact.SCOPE_RUNTIME;
+
+ if ( inheritedScope == null )
+ {
+ desiredScope = scope;
+ }
+ else if ( Artifact.SCOPE_TEST.equals( scope ) || Artifact.SCOPE_PROVIDED.equals( scope ) )
+ {
+ return null;
+ }
+ else if ( Artifact.SCOPE_COMPILE.equals( scope ) && Artifact.SCOPE_COMPILE.equals( inheritedScope ) )
+ {
+ // added to retain compile artifactScope. Remove if you want compile inherited as runtime
+ desiredScope = Artifact.SCOPE_COMPILE;
+ }
+
+ if ( Artifact.SCOPE_TEST.equals( inheritedScope ) )
+ {
+ desiredScope = Artifact.SCOPE_TEST;
+ }
+
+ if ( Artifact.SCOPE_PROVIDED.equals( inheritedScope ) )
+ {
+ desiredScope = Artifact.SCOPE_PROVIDED;
+ }
+
+ if ( Artifact.SCOPE_SYSTEM.equals( scope ) )
+ {
+ // system scopes come through unchanged...
+ desiredScope = Artifact.SCOPE_SYSTEM;
+ }
+
+ ArtifactHandler handler = artifactHandlerManager.getArtifactHandler( type );
+
+ return new DefaultArtifact( groupId, artifactId, versionRange, desiredScope, type, classifier, handler,
+ optional );
+ }
+
+ //
+ // Code taken from LegacyRepositorySystem
+ //
+
+ public ArtifactRepository createDefaultRemoteRepository( MavenExecutionRequest request )
+ throws Exception
+ {
+ return createRepository( RepositorySystem.DEFAULT_REMOTE_REPO_URL, RepositorySystem.DEFAULT_REMOTE_REPO_ID,
+ true, ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY, false,
+ ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY,
+ ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN );
+ }
+
+ public ArtifactRepository createRepository( String url, String repositoryId, boolean releases,
+ String releaseUpdates, boolean snapshots, String snapshotUpdates,
+ String checksumPolicy ) throws Exception
+ {
+ ArtifactRepositoryPolicy snapshotsPolicy =
+ new ArtifactRepositoryPolicy( snapshots, snapshotUpdates, checksumPolicy );
+
+ ArtifactRepositoryPolicy releasesPolicy =
+ new ArtifactRepositoryPolicy( releases, releaseUpdates, checksumPolicy );
+
+ return createArtifactRepository( repositoryId, url, "default", snapshotsPolicy, releasesPolicy );
+ }
+
+ public Set<String> getRepoIds( List<ArtifactRepository> repositories )
+ {
+ Set<String> repoIds = new HashSet<String>();
+
+ if ( repositories != null )
+ {
+ for ( ArtifactRepository repository : repositories )
+ {
+ repoIds.add( repository.getId() );
+ }
+ }
+
+ return repoIds;
+ }
+
+
+ public ArtifactRepository createLocalRepository( MavenExecutionRequest request, File localRepository )
+ throws Exception
+ {
+ return createRepository( "file://" + localRepository.toURI().getRawPath(),
+ RepositorySystem.DEFAULT_LOCAL_REPO_ID, true,
+ ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS, true,
+ ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS,
+ ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE );
+ }
+
+ private static final String WILDCARD = "*";
+
+ private static final String EXTERNAL_WILDCARD = "external:*";
+
+ public static Mirror getMirror( ArtifactRepository repository, List<Mirror> mirrors )
+ {
+ String repoId = repository.getId();
+
+ if ( repoId != null && mirrors != null )
+ {
+ for ( Mirror mirror : mirrors )
+ {
+ if ( repoId.equals( mirror.getMirrorOf() ) && matchesLayout( repository, mirror ) )
+ {
+ return mirror;
+ }
+ }
+
+ for ( Mirror mirror : mirrors )
+ {
+ if ( matchPattern( repository, mirror.getMirrorOf() ) && matchesLayout( repository, mirror ) )
+ {
+ return mirror;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * This method checks if the pattern matches the originalRepository. Valid patterns: * = everything external:* =
+ * everything not on the localhost and not file based. repo,repo1 = repo or repo1 *,!repo1 = everything except repo1
+ *
+ * @param originalRepository to compare for a match.
+ * @param pattern used for match. Currently only '*' is supported.
+ * @return true if the repository is a match to this pattern.
+ */
+ static boolean matchPattern( ArtifactRepository originalRepository, String pattern )
+ {
+ boolean result = false;
+ String originalId = originalRepository.getId();
+
+ // simple checks first to short circuit processing below.
+ if ( WILDCARD.equals( pattern ) || pattern.equals( originalId ) )
+ {
+ result = true;
+ }
+ else
+ {
+ // process the list
+ String[] repos = pattern.split( "," );
+ for ( String repo : repos )
+ {
+ // see if this is a negative match
+ if ( repo.length() > 1 && repo.startsWith( "!" ) )
+ {
+ if ( repo.substring( 1 ).equals( originalId ) )
+ {
+ // explicitly exclude. Set result and stop processing.
+ result = false;
+ break;
+ }
+ }
+ // check for exact match
+ else if ( repo.equals( originalId ) )
+ {
+ result = true;
+ break;
+ }
+ // check for external:*
+ else if ( EXTERNAL_WILDCARD.equals( repo ) && isExternalRepo( originalRepository ) )
+ {
+ result = true;
+ // don't stop processing in case a future segment explicitly excludes this repo
+ }
+ else if ( WILDCARD.equals( repo ) )
+ {
+ result = true;
+ // don't stop processing in case a future segment explicitly excludes this repo
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Checks the URL to see if this repository refers to an external repository
+ *
+ * @param originalRepository
+ * @return true if external.
+ */
+ static boolean isExternalRepo( ArtifactRepository originalRepository )
+ {
+ try
+ {
+ URL url = new URL( originalRepository.getUrl() );
+ return !( url.getHost().equals( "localhost" ) || url.getHost().equals( "127.0.0.1" )
+ || url.getProtocol().equals( "file" ) );
+ }
+ catch ( MalformedURLException e )
+ {
+ // bad url just skip it here. It should have been validated already, but the wagon lookup will deal with it
+ return false;
+ }
+ }
+
+ static boolean matchesLayout( ArtifactRepository repository, Mirror mirror )
+ {
+ return matchesLayout( RepositoryUtils.getLayout( repository ), mirror.getMirrorOfLayouts() );
+ }
+
+ /**
+ * Checks whether the layouts configured for a mirror match with the layout of the repository.
+ *
+ * @param repoLayout The layout of the repository, may be {@code null}.
+ * @param mirrorLayout The layouts supported by the mirror, may be {@code null}.
+ * @return {@code true} if the layouts associated with the mirror match the layout of the original repository,
+ * {@code false} otherwise.
+ */
+ static boolean matchesLayout( String repoLayout, String mirrorLayout )
+ {
+ boolean result = false;
+
+ // simple checks first to short circuit processing below.
+ if ( StringUtils.isEmpty( mirrorLayout ) || WILDCARD.equals( mirrorLayout ) )
+ {
+ result = true;
+ }
+ else if ( mirrorLayout.equals( repoLayout ) )
+ {
+ result = true;
+ }
+ else
+ {
+ // process the list
+ String[] layouts = mirrorLayout.split( "," );
+ for ( String layout : layouts )
+ {
+ // see if this is a negative match
+ if ( layout.length() > 1 && layout.startsWith( "!" ) )
+ {
+ if ( layout.substring( 1 ).equals( repoLayout ) )
+ {
+ // explicitly exclude. Set result and stop processing.
+ result = false;
+ break;
+ }
+ }
+ // check for exact match
+ else if ( layout.equals( repoLayout ) )
+ {
+ result = true;
+ break;
+ }
+ else if ( WILDCARD.equals( layout ) )
+ {
+ result = true;
+ // don't stop processing in case a future segment explicitly excludes this repo
+ }
+ }
+ }
+
+ return result;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ArtifactClassRealmConstituent.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ArtifactClassRealmConstituent.java
new file mode 100644
index 00000000..562d6f47
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ArtifactClassRealmConstituent.java
@@ -0,0 +1,76 @@
+package org.apache.maven.classrealm;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.eclipse.aether.artifact.Artifact;
+
+/**
+ * @author Benjamin Bentmann
+ */
+class ArtifactClassRealmConstituent
+ implements ClassRealmConstituent
+{
+
+ private final Artifact artifact;
+
+ public ArtifactClassRealmConstituent( Artifact artifact )
+ {
+ this.artifact = artifact;
+ }
+
+ public String getGroupId()
+ {
+ return artifact.getGroupId();
+ }
+
+ public String getArtifactId()
+ {
+ return artifact.getArtifactId();
+ }
+
+ public String getType()
+ {
+ return artifact.getExtension();
+ }
+
+ public String getClassifier()
+ {
+ return artifact.getClassifier();
+ }
+
+ public String getVersion()
+ {
+ return artifact.getBaseVersion();
+ }
+
+ public File getFile()
+ {
+ return artifact.getFile();
+ }
+
+ @Override
+ public String toString()
+ {
+ return artifact.toString();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmConstituent.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmConstituent.java
new file mode 100644
index 00000000..f658eb43
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmConstituent.java
@@ -0,0 +1,74 @@
+package org.apache.maven.classrealm;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+/**
+ * Describes a constituent of a class realm.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ClassRealmConstituent
+{
+
+ /**
+ * Gets the group id of the constituent's artifact.
+ *
+ * @return The group id, never {@code null}.
+ */
+ String getGroupId();
+
+ /**
+ * Gets the artifact id of the constituent's artifact.
+ *
+ * @return The artifact id, never {@code null}.
+ */
+ String getArtifactId();
+
+ /**
+ * Gets the type of the constituent's artifact.
+ *
+ * @return The type, never {@code null}.
+ */
+ String getType();
+
+ /**
+ * Gets the classifier of the constituent's artifact.
+ *
+ * @return The classifier or an empty string, never {@code null}.
+ */
+ String getClassifier();
+
+ /**
+ * Gets the version of the constituent's artifact.
+ *
+ * @return The version, never {@code null}.
+ */
+ String getVersion();
+
+ /**
+ * Gets the file of the constituent's artifact.
+ *
+ * @return The file, never {@code null}.
+ */
+ File getFile();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmManager.java
new file mode 100644
index 00000000..e5d15143
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmManager.java
@@ -0,0 +1,88 @@
+package org.apache.maven.classrealm;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.eclipse.aether.artifact.Artifact;
+
+/**
+ * Manages the class realms used by Maven. <strong>Warning:</strong> This is an internal utility interface that is only
+ * public for technical reasons, it is not part of the public API. In particular, this interface can be changed or
+ * deleted without prior notice.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ClassRealmManager
+{
+
+ /**
+ * Gets the class realm hosting the Maven core.
+ *
+ * @return The class realm hosting the Maven core, never {@code null}.
+ */
+ ClassRealm getCoreRealm();
+
+ /**
+ * Gets the class realm exposing the Maven API. This is basically a restricted view on the Maven core realm.
+ *
+ * @return The class realm exposing the Maven API, never {@code null}.
+ */
+ ClassRealm getMavenApiRealm();
+
+ /**
+ * Creates a new class realm for the specified project and its build extensions.
+ *
+ * @param model The model of the project for which to create a realm, must not be {@code null}.
+ * @param artifacts The artifacts to add to the class realm, may be {@code null}. Unresolved artifacts (i.e. with a
+ * missing file) will automatically be excluded from the realm.
+ * @return The new project realm, never {@code null}.
+ */
+ ClassRealm createProjectRealm( Model model, List<Artifact> artifacts );
+
+ /**
+ * Creates a new class realm for the specified build extension.
+ *
+ * @param extension The extension plugin for which to create a realm, must not be {@code null}.
+ * @param artifacts The artifacts to add to the class realm, may be {@code null}. Unresolved artifacts (i.e. with a
+ * missing file) will automatically be excluded from the realm.
+ * @return The new extension realm, never {@code null}.
+ */
+ ClassRealm createExtensionRealm( Plugin extension, List<Artifact> artifacts );
+
+ /**
+ * Creates a new class realm for the specified plugin.
+ *
+ * @param plugin The plugin for which to create a realm, must not be {@code null}.
+ * @param parent The parent realm for the new realm, may be {@code null}.
+ * @param parentImports The packages/types to import from the parent realm, may be {@code null}.
+ * @param foreignImports The packages/types to import from foreign realms, may be {@code null}.
+ * @param artifacts The artifacts to add to the class realm, may be {@code null}. Unresolved artifacts (i.e. with a
+ * missing file) will automatically be excluded from the realm.
+ * @return The new plugin realm, never {@code null}.
+ */
+ ClassRealm createPluginRealm( Plugin plugin, ClassLoader parent, List<String> parentImports,
+ Map<String, ClassLoader> foreignImports, List<Artifact> artifacts );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmManagerDelegate.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmManagerDelegate.java
new file mode 100644
index 00000000..b0229b97
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmManagerDelegate.java
@@ -0,0 +1,36 @@
+package org.apache.maven.classrealm;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+
+/**
+ * ClassRealmManagerDelegate is used to perform addition configuration of
+ * class realms created by ClassRealmManager.
+ *
+ * @author igor
+ */
+public interface ClassRealmManagerDelegate
+{
+
+ void setupRealm( ClassRealm classRealm, ClassRealmRequest request );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmRequest.java
new file mode 100644
index 00000000..9b62108f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmRequest.java
@@ -0,0 +1,100 @@
+package org.apache.maven.classrealm;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Describes the requirements for a new class realm.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ClassRealmRequest
+{
+
+ /**
+ * The type of a class realm.
+ */
+ enum RealmType
+ {
+ /**
+ * The class realm for the public API of the Maven core.
+ */
+ Core,
+
+ /**
+ * A class realm for a project to aggregates its build extensions.
+ */
+ Project,
+
+ /**
+ * A class realm for a build extension.
+ */
+ Extension,
+
+ /**
+ * A class realm for a plugin.
+ */
+ Plugin,
+ }
+
+ /**
+ * Gets the type of the class realm.
+ *
+ * @return The type of the class realm, never {@code null}.
+ */
+ RealmType getType();
+
+ /**
+ * Gets the parent class realm (if any).
+ *
+ * @return The parent class realm or {@code null} if using the default parent.
+ */
+ ClassLoader getParent();
+
+ /**
+ * @deprecated Use {@link #getParentImports()} instead.
+ */
+ @Deprecated
+ List<String> getImports();
+
+ /**
+ * Gets the packages/types to import from the parent realm.
+ *
+ * @return The modifiable list of packages/types to import from the parent realm, never {@code null}.
+ */
+ List<String> getParentImports();
+
+ /**
+ * Gets the packages/types to import from foreign realms.
+ *
+ * @return The modifiable map of packages/types to import from foreign realms, never {@code null}.
+ */
+ Map<String, ClassLoader> getForeignImports();
+
+ /**
+ * Gets the constituents for the class realm.
+ *
+ * @return The modifiable list of constituents for the class realm, never {@code null}.
+ */
+ List<ClassRealmConstituent> getConstituents();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java
new file mode 100644
index 00000000..69ee04a9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java
@@ -0,0 +1,416 @@
+package org.apache.maven.classrealm;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+import java.util.TreeMap;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.classrealm.ClassRealmRequest.RealmType;
+import org.apache.maven.extension.internal.CoreExportsProvider;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.codehaus.plexus.MutablePlexusContainer;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.classworlds.ClassWorld;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.classworlds.realm.DuplicateRealmException;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.StringUtils;
+import org.eclipse.aether.artifact.Artifact;
+
+/**
+ * Manages the class realms used by Maven. <strong>Warning:</strong> This is an internal utility class that is only
+ * public for technical reasons, it is not part of the public API. In particular, this class can be changed or deleted
+ * without prior notice.
+ *
+ * @author Benjamin Bentmann
+ */
+@Named
+@Singleton
+public class DefaultClassRealmManager
+ implements ClassRealmManager
+{
+ public static final String API_REALMID = "maven.api";
+
+ /**
+ * During normal command line build, ClassWorld is loaded by jvm system classloader, which only includes
+ * plexus-classworlds jar and possibly javaagent classes, see http://jira.codehaus.org/browse/MNG-4747.
+ * <p>
+ * Using ClassWorld to determine plugin/extensions realm parent classloaders gives m2e and integration test harness
+ * flexibility to load multiple version of maven into dedicated classloaders without assuming state of jvm system
+ * classloader.
+ */
+ private static final ClassLoader PARENT_CLASSLOADER = ClassWorld.class.getClassLoader();
+
+ private final Logger logger;
+
+ private final ClassWorld world;
+
+ private final ClassRealm containerRealm;
+
+ // this is a live injected collection
+ private final List<ClassRealmManagerDelegate> delegates;
+
+ private final ClassRealm mavenApiRealm;
+
+ /**
+ * Patterns of artifacts provided by maven core and exported via maven api realm. These artifacts are filtered from
+ * plugin and build extensions realms to avoid presence of duplicate and possibly conflicting classes on classpath.
+ */
+ private final Set<String> providedArtifacts;
+
+ @Inject
+ public DefaultClassRealmManager( Logger logger, PlexusContainer container,
+ List<ClassRealmManagerDelegate> delegates, CoreExportsProvider exports )
+ {
+ this.logger = logger;
+ this.world = ( (MutablePlexusContainer) container ).getClassWorld();
+ this.containerRealm = container.getContainerRealm();
+ this.delegates = delegates;
+
+ Map<String, ClassLoader> foreignImports = exports.get().getExportedPackages();
+
+ this.mavenApiRealm =
+ createRealm( API_REALMID, RealmType.Core, null /* parent */, null /* parentImports */,
+ foreignImports, null /* artifacts */ );
+
+ this.providedArtifacts = exports.get().getExportedArtifacts();
+ }
+
+ private ClassRealm newRealm( String id )
+ {
+ synchronized ( world )
+ {
+ String realmId = id;
+
+ Random random = new Random();
+
+ while ( true )
+ {
+ try
+ {
+ ClassRealm classRealm = world.newRealm( realmId, null );
+
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Created new class realm " + realmId );
+ }
+
+ return classRealm;
+ }
+ catch ( DuplicateRealmException e )
+ {
+ realmId = id + '-' + random.nextInt();
+ }
+ }
+ }
+ }
+
+ public ClassRealm getMavenApiRealm()
+ {
+ return mavenApiRealm;
+ }
+
+ /**
+ * Creates a new class realm with the specified parent and imports.
+ *
+ * @param baseRealmId The base id to use for the new realm, must not be {@code null}.
+ * @param type The type of the class realm, must not be {@code null}.
+ * @param parent The parent realm for the new realm, may be {@code null}.
+ * @param parentImports The packages/types to import from the parent realm, may be {@code null}.
+ * @param foreignImports The packages/types to import from foreign realms, may be {@code null}.
+ * @param artifacts The artifacts to add to the realm, may be {@code null}. Unresolved artifacts (i.e. with a
+ * missing file) will automatically be excluded from the realm.
+ * @return The created class realm, never {@code null}.
+ */
+ private ClassRealm createRealm( String baseRealmId, RealmType type, ClassLoader parent, List<String> parentImports,
+ Map<String, ClassLoader> foreignImports, List<Artifact> artifacts )
+ {
+ Set<String> artifactIds = new LinkedHashSet<String>();
+
+ List<ClassRealmConstituent> constituents = new ArrayList<ClassRealmConstituent>();
+
+ if ( artifacts != null )
+ {
+ for ( Artifact artifact : artifacts )
+ {
+ if ( !isProvidedArtifact( artifact ) )
+ {
+ artifactIds.add( getId( artifact ) );
+ if ( artifact.getFile() != null )
+ {
+ constituents.add( new ArtifactClassRealmConstituent( artifact ) );
+ }
+ }
+ }
+ }
+
+ if ( parentImports != null )
+ {
+ parentImports = new ArrayList<String>( parentImports );
+ }
+ else
+ {
+ parentImports = new ArrayList<String>();
+ }
+
+ if ( foreignImports != null )
+ {
+ foreignImports = new TreeMap<String, ClassLoader>( foreignImports );
+ }
+ else
+ {
+ foreignImports = new TreeMap<String, ClassLoader>();
+ }
+
+ ClassRealm classRealm = newRealm( baseRealmId );
+
+ if ( parent != null )
+ {
+ classRealm.setParentClassLoader( parent );
+ }
+
+ callDelegates( classRealm, type, parent, parentImports, foreignImports, constituents );
+
+ wireRealm( classRealm, parentImports, foreignImports );
+
+ Set<String> includedIds = populateRealm( classRealm, constituents );
+
+ if ( logger.isDebugEnabled() )
+ {
+ artifactIds.removeAll( includedIds );
+
+ for ( String id : artifactIds )
+ {
+ logger.debug( " Excluded: " + id );
+ }
+ }
+
+ return classRealm;
+ }
+
+ public ClassRealm getCoreRealm()
+ {
+ return containerRealm;
+ }
+
+ public ClassRealm createProjectRealm( Model model, List<Artifact> artifacts )
+ {
+ if ( model == null )
+ {
+ throw new IllegalArgumentException( "model missing" );
+ }
+
+ ClassLoader parent = getMavenApiRealm();
+
+ return createRealm( getKey( model ), RealmType.Project, parent, null, null, artifacts );
+ }
+
+ private static String getKey( Model model )
+ {
+ return "project>" + model.getGroupId() + ":" + model.getArtifactId() + ":" + model.getVersion();
+ }
+
+ public ClassRealm createExtensionRealm( Plugin plugin, List<Artifact> artifacts )
+ {
+ if ( plugin == null )
+ {
+ throw new IllegalArgumentException( "extension plugin missing" );
+ }
+
+ ClassLoader parent = PARENT_CLASSLOADER;
+
+ Map<String, ClassLoader> foreignImports =
+ Collections.<String, ClassLoader>singletonMap( "", getMavenApiRealm() );
+
+ return createRealm( getKey( plugin, true ), RealmType.Extension, parent, null, foreignImports, artifacts );
+ }
+
+ private boolean isProvidedArtifact( Artifact artifact )
+ {
+ return providedArtifacts.contains( artifact.getGroupId() + ":" + artifact.getArtifactId() );
+ }
+
+ public ClassRealm createPluginRealm( Plugin plugin, ClassLoader parent, List<String> parentImports,
+ Map<String, ClassLoader> foreignImports, List<Artifact> artifacts )
+ {
+ if ( plugin == null )
+ {
+ throw new IllegalArgumentException( "plugin missing" );
+ }
+
+ if ( parent == null )
+ {
+ parent = PARENT_CLASSLOADER;
+ }
+
+ return createRealm( getKey( plugin, false ), RealmType.Plugin, parent, parentImports, foreignImports,
+ artifacts );
+ }
+
+ private static String getKey( Plugin plugin, boolean extension )
+ {
+ String version = ArtifactUtils.toSnapshotVersion( plugin.getVersion() );
+ return ( extension ? "extension>" : "plugin>" ) + plugin.getGroupId() + ":" + plugin.getArtifactId() + ":"
+ + version;
+ }
+
+ private static String getId( Artifact artifact )
+ {
+ return getId( artifact.getGroupId(), artifact.getArtifactId(), artifact.getExtension(),
+ artifact.getClassifier(), artifact.getBaseVersion() );
+ }
+
+ private static String getId( ClassRealmConstituent constituent )
+ {
+ return getId( constituent.getGroupId(), constituent.getArtifactId(), constituent.getType(),
+ constituent.getClassifier(), constituent.getVersion() );
+ }
+
+ private static String getId( String gid, String aid, String type, String cls, String ver )
+ {
+ return gid + ':' + aid + ':' + type + ( StringUtils.isNotEmpty( cls ) ? ':' + cls : "" ) + ':' + ver;
+ }
+
+ private void callDelegates( ClassRealm classRealm, RealmType type, ClassLoader parent, List<String> parentImports,
+ Map<String, ClassLoader> foreignImports, List<ClassRealmConstituent> constituents )
+ {
+ List<ClassRealmManagerDelegate> delegates = new ArrayList<ClassRealmManagerDelegate>( this.delegates );
+
+ if ( !delegates.isEmpty() )
+ {
+ ClassRealmRequest request =
+ new DefaultClassRealmRequest( type, parent, parentImports, foreignImports, constituents );
+
+ for ( ClassRealmManagerDelegate delegate : delegates )
+ {
+ try
+ {
+ delegate.setupRealm( classRealm, request );
+ }
+ catch ( Exception e )
+ {
+ logger.error( delegate.getClass().getName() + " failed to setup class realm " + classRealm + ": "
+ + e.getMessage(), e );
+ }
+ }
+ }
+ }
+
+ private Set<String> populateRealm( ClassRealm classRealm, List<ClassRealmConstituent> constituents )
+ {
+ Set<String> includedIds = new LinkedHashSet<String>();
+
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Populating class realm " + classRealm.getId() );
+ }
+
+ for ( ClassRealmConstituent constituent : constituents )
+ {
+ File file = constituent.getFile();
+
+ String id = getId( constituent );
+ includedIds.add( id );
+
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( " Included: " + id );
+ }
+
+ try
+ {
+ classRealm.addURL( file.toURI().toURL() );
+ }
+ catch ( MalformedURLException e )
+ {
+ // Not going to happen
+ logger.error( e.getMessage(), e );
+ }
+ }
+
+ return includedIds;
+ }
+
+ private void wireRealm( ClassRealm classRealm, List<String> parentImports, Map<String, ClassLoader> foreignImports )
+ {
+ if ( foreignImports != null && !foreignImports.isEmpty() )
+ {
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Importing foreign packages into class realm " + classRealm.getId() );
+ }
+
+ for ( Map.Entry<String, ClassLoader> entry : foreignImports.entrySet() )
+ {
+ ClassLoader importedRealm = entry.getValue();
+ String imp = entry.getKey();
+
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( " Imported: " + imp + " < " + getId( importedRealm ) );
+ }
+
+ classRealm.importFrom( importedRealm, imp );
+ }
+ }
+
+ if ( parentImports != null && !parentImports.isEmpty() )
+ {
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Importing parent packages into class realm " + classRealm.getId() );
+ }
+
+ for ( String imp : parentImports )
+ {
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( " Imported: " + imp + " < " + getId( classRealm.getParentClassLoader() ) );
+ }
+
+ classRealm.importFromParent( imp );
+ }
+ }
+ }
+
+ private String getId( ClassLoader classLoader )
+ {
+ if ( classLoader instanceof ClassRealm )
+ {
+ return ( (ClassRealm) classLoader ).getId();
+ }
+ return String.valueOf( classLoader );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmRequest.java
new file mode 100644
index 00000000..062b2cf3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmRequest.java
@@ -0,0 +1,82 @@
+package org.apache.maven.classrealm;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Benjamin Bentmann
+ */
+class DefaultClassRealmRequest
+ implements ClassRealmRequest
+{
+
+ private final RealmType type;
+
+ private final ClassLoader parent;
+
+ private final List<String> parentImports;
+
+ private final Map<String, ClassLoader> foreignImports;
+
+ private final List<ClassRealmConstituent> constituents;
+
+ public DefaultClassRealmRequest( RealmType type, ClassLoader parent, List<String> parentImports,
+ Map<String, ClassLoader> foreignImports, List<ClassRealmConstituent> constituents )
+ {
+ this.type = type;
+ this.parent = parent;
+ this.parentImports = parentImports;
+ this.foreignImports = foreignImports;
+ this.constituents = constituents;
+ }
+
+ public RealmType getType()
+ {
+ return type;
+ }
+
+ public ClassLoader getParent()
+ {
+ return parent;
+ }
+
+ public List<String> getImports()
+ {
+ return getParentImports();
+ }
+
+ public List<String> getParentImports()
+ {
+ return parentImports;
+ }
+
+ public Map<String, ClassLoader> getForeignImports()
+ {
+ return foreignImports;
+ }
+
+ public List<ClassRealmConstituent> getConstituents()
+ {
+ return constituents;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BasedirBeanConfigurationPathTranslator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BasedirBeanConfigurationPathTranslator.java
new file mode 100644
index 00000000..9859f586
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BasedirBeanConfigurationPathTranslator.java
@@ -0,0 +1,71 @@
+package org.apache.maven.configuration;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+/**
+ * A path translator that resolves relative paths against a specific base directory.
+ *
+ * @author Benjamin Bentmann
+ */
+public class BasedirBeanConfigurationPathTranslator
+ implements BeanConfigurationPathTranslator
+{
+
+ private final File basedir;
+
+ /**
+ * Creates a new path translator using the specified base directory.
+ *
+ * @param basedir The base directory to resolve relative paths against, may be {@code null} to disable path
+ * translation.
+ */
+ public BasedirBeanConfigurationPathTranslator( File basedir )
+ {
+ this.basedir = basedir;
+ }
+
+ public File translatePath( File path )
+ {
+ File result = path;
+
+ if ( path != null && basedir != null )
+ {
+ if ( path.isAbsolute() )
+ {
+ // path is already absolute, we're done
+ }
+ else if ( path.getPath().startsWith( File.separator ) )
+ {
+ // drive-relative Windows path, don't align with base dir but with drive root
+ result = path.getAbsoluteFile();
+ }
+ else
+ {
+ // an ordinary relative path, align with base dir
+ result = new File( new File( basedir, path.getPath() ).toURI().normalize() ).getAbsoluteFile();
+ }
+ }
+
+ return result;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationException.java
new file mode 100644
index 00000000..3d10ed4a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationException.java
@@ -0,0 +1,41 @@
+package org.apache.maven.configuration;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Thrown when a bean couldn't be configured.
+ *
+ * @author Benjamin Bentmann
+ */
+public class BeanConfigurationException
+ extends Exception
+{
+
+ public BeanConfigurationException( String message )
+ {
+ super( message );
+ }
+
+ public BeanConfigurationException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationPathTranslator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationPathTranslator.java
new file mode 100644
index 00000000..39663391
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationPathTranslator.java
@@ -0,0 +1,41 @@
+package org.apache.maven.configuration;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+/**
+ * Postprocesses filesystem paths. For instance, a path translator might want to resolve relative paths given in the
+ * bean configuration against some base directory.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface BeanConfigurationPathTranslator
+{
+
+ /**
+ * Translates the specified path.
+ *
+ * @param path The path to translate, may be {@code null}.
+ * @return The translated path or {@code null} if none.
+ */
+ File translatePath( File path );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationRequest.java
new file mode 100644
index 00000000..d19aa204
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationRequest.java
@@ -0,0 +1,130 @@
+package org.apache.maven.configuration;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * A request to configure a bean from some configuration in the POM or similar.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface BeanConfigurationRequest
+{
+
+ /**
+ * Gets the bean to configure. Eventually, a valid request must have a bean set.
+ *
+ * @return The bean to configure, or {@code null} if none.
+ */
+ Object getBean();
+
+ /**
+ * Sets the bean to configure. Eventually, a valid request must have a bean set.
+ *
+ * @param bean The bean to configure, may be {@code null}.
+ * @return This request for chaining, never {@code null}.
+ */
+ BeanConfigurationRequest setBean( Object bean );
+
+ /**
+ * Gets the configuration to unmarshal into the bean.
+ *
+ * @return The configuration to unmarshal into the bean or {@code null} if none.
+ */
+ Object getConfiguration();
+
+ /**
+ * Sets the configuration to unmarshal into the bean. The configuration should be taken from
+ * {@link org.apache.maven.model.ConfigurationContainer#getConfiguration()} or a similar source.
+ * Fully equivalent to {@code setConfiguration(configuration, null)}.
+ *
+ * @param configuration The configuration to unmarshal, may be {@code null}.
+ * @return This request for chaining, never {@code null}.
+ */
+ BeanConfigurationRequest setConfiguration( Object configuration );
+
+ /**
+ * Sets the configuration to unmarshal into the bean. The configuration should be taken from
+ * {@link org.apache.maven.model.ConfigurationContainer#getConfiguration()} or a similar source.
+ * If {@code element} is not {@code null}, child configuration element with the specified name will
+ * be unmarshaled.
+ *
+ * @param configuration The configuration to unmarshal, may be {@code null}.
+ * @param element Configuration element name to unmarshal or {@code null} to unmarshal entire configuration.
+ * @return This request for chaining, never {@code null}.
+ */
+ BeanConfigurationRequest setConfiguration( Object configuration, String element );
+
+ /**
+ * Returns configuration element name or {@code null}.
+ *
+ * @see #setConfiguration(Object, String)
+ *
+ * @return Configuration element name or {@code null}
+ */
+ String getConfigurationElement();
+
+ /**
+ * Gets the class loader from which to load any types referenced by the configuration. If unset, the class loader of
+ * the bean class will be used.
+ *
+ * @return The class loader to load referenced types from or {@code null} if unset.
+ */
+ ClassLoader getClassLoader();
+
+ /**
+ * Sets the class loader from which to load any types referenced by the configuration. If unset, the class loader of
+ * the bean class will be used.
+ *
+ * @param classLoader The class loader to load referenced types from, may be {@code null}.
+ * @return This request for chaining, never {@code null}.
+ */
+ BeanConfigurationRequest setClassLoader( ClassLoader classLoader );
+
+ /**
+ * Gets the optional preprocessor for configuration values.
+ *
+ * @return The preprocessor for configuration values or {@code null} if none.
+ */
+ BeanConfigurationValuePreprocessor getValuePreprocessor();
+
+ /**
+ * Sets the optional preprocessor for configuration values.
+ *
+ * @param valuePreprocessor The preprocessor for configuration values, may be {@code null} if unneeded.
+ * @return This request for chaining, never {@code null}.
+ */
+ BeanConfigurationRequest setValuePreprocessor( BeanConfigurationValuePreprocessor valuePreprocessor );
+
+ /**
+ * Gets the optional path translator for configuration values unmarshalled to files.
+ *
+ * @return The path translator for files or {@code null} if none.
+ */
+ BeanConfigurationPathTranslator getPathTranslator();
+
+ /**
+ * Sets the optional path translator for configuration values unmarshalled to files.
+ *
+ * @param pathTranslator The path translator for files, may be {@code null} if unneeded.
+ * @return This request for chaining, never {@code null}.
+ */
+ BeanConfigurationRequest setPathTranslator( BeanConfigurationPathTranslator pathTranslator );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationValuePreprocessor.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationValuePreprocessor.java
new file mode 100644
index 00000000..63f85173
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationValuePreprocessor.java
@@ -0,0 +1,45 @@
+package org.apache.maven.configuration;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Preprocesses a value from a bean configuration before the bean configurator unmarshals it into a bean property. A
+ * common use case for such preprocessing is the evaluation of variables within the configuration value.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface BeanConfigurationValuePreprocessor
+{
+
+ /**
+ * Preprocesses the specified bean configuration value. The optional type provided to this method is a hint (not a
+ * requirement) for the preprocessor to resolve the value to a compatible value or a (string) value than can be
+ * unmarshalled into that type. The preprocessor is not required to perform any type conversion but should rather
+ * filter out incompatible values from its result.
+ *
+ * @param value The configuration value to preprocess, must not be {@code null}.
+ * @param type The target type of the value, may be {@code null}.
+ * @return The processed configuration value or {@code null} if none.
+ * @throws BeanConfigurationException If an error occurred while preprocessing the value.
+ */
+ Object preprocessValue( String value, Class<?> type )
+ throws BeanConfigurationException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurator.java
new file mode 100644
index 00000000..36d23eca
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurator.java
@@ -0,0 +1,44 @@
+package org.apache.maven.configuration;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Unmarshals some textual configuration from the POM or similar into the properties of a bean. This component works
+ * similar to the way Maven configures plugins from the POM, i.e. some configuration like {@code <param>value</param>}
+ * is mapped to an equally named property of the bean and converted. The properties of the bean are supposed to either
+ * have a public setter or be backed by an equally named field (of any visibility).
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+public interface BeanConfigurator
+{
+
+ /**
+ * Performs the specified bean configuration.
+ *
+ * @param request The configuration request that specifies the bean and the configuration to process, must not be
+ * {@code null}.
+ * @throws BeanConfigurationException If the bean configuration could not be successfully processed.
+ */
+ void configureBean( BeanConfigurationRequest request )
+ throws BeanConfigurationException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/DefaultBeanConfigurationRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/DefaultBeanConfigurationRequest.java
new file mode 100644
index 00000000..32def48f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/DefaultBeanConfigurationRequest.java
@@ -0,0 +1,195 @@
+package org.apache.maven.configuration;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.model.PluginManagement;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * A basic bean configuration request.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DefaultBeanConfigurationRequest
+ implements BeanConfigurationRequest
+{
+
+ private Object bean;
+
+ private Object configuration;
+
+ private String configurationElement;
+
+ private ClassLoader classLoader;
+
+ private BeanConfigurationValuePreprocessor valuePreprocessor;
+
+ private BeanConfigurationPathTranslator pathTranslator;
+
+ public Object getBean()
+ {
+ return bean;
+ }
+
+ public DefaultBeanConfigurationRequest setBean( Object bean )
+ {
+ this.bean = bean;
+ return this;
+ }
+
+ public Object getConfiguration()
+ {
+ return configuration;
+ }
+
+ public String getConfigurationElement()
+ {
+ return configurationElement;
+ }
+
+ public DefaultBeanConfigurationRequest setConfiguration( Object configuration )
+ {
+ return setConfiguration( configuration, null );
+ }
+
+ public DefaultBeanConfigurationRequest setConfiguration( Object configuration, String element )
+ {
+ this.configuration = configuration;
+ this.configurationElement = element;
+ return this;
+ }
+
+ /**
+ * Sets the configuration to the configuration taken from the specified build plugin in the POM. First, the build
+ * plugins will be searched for the specified plugin, if that fails, the plugin management section will be searched.
+ *
+ * @param model The POM to extract the plugin configuration from, may be {@code null}.
+ * @param pluginGroupId The group id of the plugin whose configuration should be used, must not be {@code null} or
+ * empty.
+ * @param pluginArtifactId The artifact id of the plugin whose configuration should be used, must not be
+ * {@code null} or empty.
+ * @param pluginExecutionId The id of a plugin execution whose configuration should be used, may be {@code null} or
+ * empty to use the general plugin configuration.
+ * @return This request for chaining, never {@code null}.
+ */
+ public DefaultBeanConfigurationRequest setConfiguration( Model model, String pluginGroupId,
+ String pluginArtifactId, String pluginExecutionId )
+ {
+ Plugin plugin = findPlugin( model, pluginGroupId, pluginArtifactId );
+ if ( plugin != null )
+ {
+ if ( StringUtils.isNotEmpty( pluginExecutionId ) )
+ {
+ for ( PluginExecution execution : plugin.getExecutions() )
+ {
+ if ( pluginExecutionId.equals( execution.getId() ) )
+ {
+ setConfiguration( execution.getConfiguration() );
+ break;
+ }
+ }
+ }
+ else
+ {
+ setConfiguration( plugin.getConfiguration() );
+ }
+ }
+ return this;
+ }
+
+ private Plugin findPlugin( Model model, String groupId, String artifactId )
+ {
+ if ( StringUtils.isEmpty( groupId ) )
+ {
+ throw new IllegalArgumentException( "group id for plugin has not been specified" );
+ }
+ if ( StringUtils.isEmpty( artifactId ) )
+ {
+ throw new IllegalArgumentException( "artifact id for plugin has not been specified" );
+ }
+
+ if ( model != null )
+ {
+ Build build = model.getBuild();
+ if ( build != null )
+ {
+ for ( Plugin plugin : build.getPlugins() )
+ {
+ if ( groupId.equals( plugin.getGroupId() ) && artifactId.equals( plugin.getArtifactId() ) )
+ {
+ return plugin;
+ }
+ }
+
+ PluginManagement mngt = build.getPluginManagement();
+ if ( mngt != null )
+ {
+ for ( Plugin plugin : mngt.getPlugins() )
+ {
+ if ( groupId.equals( plugin.getGroupId() ) && artifactId.equals( plugin.getArtifactId() ) )
+ {
+ return plugin;
+ }
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+
+ public ClassLoader getClassLoader()
+ {
+ return classLoader;
+ }
+
+ public DefaultBeanConfigurationRequest setClassLoader( ClassLoader classLoader )
+ {
+ this.classLoader = classLoader;
+ return this;
+ }
+
+ public BeanConfigurationValuePreprocessor getValuePreprocessor()
+ {
+ return valuePreprocessor;
+ }
+
+ public DefaultBeanConfigurationRequest setValuePreprocessor( BeanConfigurationValuePreprocessor valuePreprocessor )
+ {
+ this.valuePreprocessor = valuePreprocessor;
+ return this;
+ }
+
+ public BeanConfigurationPathTranslator getPathTranslator()
+ {
+ return pathTranslator;
+ }
+
+ public DefaultBeanConfigurationRequest setPathTranslator( BeanConfigurationPathTranslator pathTranslator )
+ {
+ this.pathTranslator = pathTranslator;
+ return this;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/internal/DefaultBeanConfigurator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/internal/DefaultBeanConfigurator.java
new file mode 100644
index 00000000..3d3def62
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/internal/DefaultBeanConfigurator.java
@@ -0,0 +1,160 @@
+package org.apache.maven.configuration.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.configuration.BeanConfigurationException;
+import org.apache.maven.configuration.BeanConfigurationPathTranslator;
+import org.apache.maven.configuration.BeanConfigurationRequest;
+import org.apache.maven.configuration.BeanConfigurationValuePreprocessor;
+import org.apache.maven.configuration.BeanConfigurator;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
+import org.codehaus.plexus.component.configurator.converters.composite.ObjectWithFieldsConverter;
+import org.codehaus.plexus.component.configurator.converters.lookup.ConverterLookup;
+import org.codehaus.plexus.component.configurator.converters.lookup.DefaultConverterLookup;
+import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+import org.codehaus.plexus.component.configurator.expression.TypeAwareExpressionEvaluator;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * <strong>Warning:</strong> This is an internal class that is only public for technical reasons, it is not part of the
+ * public API. In particular, this class can be changed or deleted without prior notice.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = BeanConfigurator.class )
+public class DefaultBeanConfigurator
+ implements BeanConfigurator
+{
+
+ private final ConverterLookup converterLookup = new DefaultConverterLookup();
+
+ public void configureBean( BeanConfigurationRequest request )
+ throws BeanConfigurationException
+ {
+ if ( request == null )
+ {
+ throw new IllegalArgumentException( "bean configuration request not specified" );
+ }
+
+ if ( request.getBean() == null )
+ {
+ throw new IllegalArgumentException( "bean to be configured not specified" );
+ }
+
+ Object configuration = request.getConfiguration();
+ if ( configuration == null )
+ {
+ return;
+ }
+
+ PlexusConfiguration plexusConfig;
+ if ( configuration instanceof PlexusConfiguration )
+ {
+ plexusConfig = (PlexusConfiguration) configuration;
+ }
+ else if ( configuration instanceof Xpp3Dom )
+ {
+ plexusConfig = new XmlPlexusConfiguration( (Xpp3Dom) configuration );
+ }
+ else
+ {
+ throw new BeanConfigurationException( "unsupported bean configuration source ("
+ + configuration.getClass().getName() + ")" );
+ }
+
+ if ( request.getConfigurationElement() != null )
+ {
+ plexusConfig = plexusConfig.getChild( request.getConfigurationElement() );
+ }
+
+ ClassLoader classLoader = request.getClassLoader();
+ if ( classLoader == null )
+ {
+ classLoader = request.getBean().getClass().getClassLoader();
+ }
+
+ BeanExpressionEvaluator evaluator = new BeanExpressionEvaluator( request );
+
+ ObjectWithFieldsConverter converter = new ObjectWithFieldsConverter();
+
+ try
+ {
+ converter.processConfiguration( converterLookup, request.getBean(), classLoader, plexusConfig, evaluator );
+ }
+ catch ( ComponentConfigurationException e )
+ {
+ throw new BeanConfigurationException( e.getMessage(), e );
+ }
+ }
+
+ static class BeanExpressionEvaluator
+ implements TypeAwareExpressionEvaluator
+ {
+
+ private final BeanConfigurationValuePreprocessor preprocessor;
+
+ private final BeanConfigurationPathTranslator translator;
+
+ public BeanExpressionEvaluator( BeanConfigurationRequest request )
+ {
+ preprocessor = request.getValuePreprocessor();
+ translator = request.getPathTranslator();
+ }
+
+ public Object evaluate( String expression, Class<?> type )
+ throws ExpressionEvaluationException
+ {
+ if ( preprocessor != null )
+ {
+ try
+ {
+ return preprocessor.preprocessValue( expression, type );
+ }
+ catch ( BeanConfigurationException e )
+ {
+ throw new ExpressionEvaluationException( e.getMessage(), e );
+ }
+ }
+ return expression;
+ }
+
+ public Object evaluate( String expression )
+ throws ExpressionEvaluationException
+ {
+ return evaluate( expression, null );
+ }
+
+ public File alignToBaseDirectory( File file )
+ {
+ if ( translator != null )
+ {
+ return translator.translatePath( file );
+ }
+ return file;
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/AbstractEventSpy.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/AbstractEventSpy.java
new file mode 100644
index 00000000..09132275
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/AbstractEventSpy.java
@@ -0,0 +1,45 @@
+package org.apache.maven.eventspy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * A skeleton eventspy that does nothing other than helping implementors.
+ * @since 3.0.2
+ */
+public abstract class AbstractEventSpy
+ implements EventSpy
+{
+
+ public void init( Context context )
+ throws Exception
+ {
+ }
+
+ public void onEvent( Object event )
+ throws Exception
+ {
+ }
+
+ public void close()
+ throws Exception
+ {
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/EventSpy.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/EventSpy.java
new file mode 100644
index 00000000..4284fce9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/EventSpy.java
@@ -0,0 +1,77 @@
+package org.apache.maven.eventspy;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Map;
+
+/**
+ * A core extension to monitor Maven's execution. Typically, such an extension gets loaded into Maven by specifying the
+ * system property {@code maven.ext.class.path} on the command line. As soon as dependency injection is setup, Maven
+ * looks up all implementators of this interface and calls their {@link #init(Context)} method. <em>Note:</em>
+ * Implementors are strongly advised to inherit from {@link AbstractEventSpy} instead of directly implementing this
+ * interface.
+ * @since 3.0.2
+ */
+public interface EventSpy
+{
+
+ interface Context
+ {
+
+ /**
+ * Gets key-value pairs providing information about the Maven runtime.
+ *
+ * @return The key-value pairs, never {@code null}.
+ */
+ Map<String, Object> getData();
+
+ }
+
+ /**
+ * Initializes the spy.
+ *
+ * @param context The event spy context, never {@code null}.
+ */
+ void init( Context context )
+ throws Exception;
+
+ /**
+ * Notifies the spy of some build event/operation.
+ *
+ * @param event The event, never {@code null}.
+ * @see org.apache.maven.settings.building.SettingsBuildingRequest
+ * @see org.apache.maven.settings.building.SettingsBuildingResult
+ * @see org.apache.maven.execution.MavenExecutionRequest
+ * @see org.apache.maven.execution.MavenExecutionResult
+ * @see org.apache.maven.project.DependencyResolutionRequest
+ * @see org.apache.maven.project.DependencyResolutionResult
+ * @see org.apache.maven.execution.ExecutionEvent
+ * @see org.eclipse.aether.RepositoryEvent
+ */
+ void onEvent( Object event )
+ throws Exception;
+
+ /**
+ * Notifies the spy of Maven's termination, allowing it to free any resources allocated by it.
+ */
+ void close()
+ throws Exception;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyDispatcher.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyDispatcher.java
new file mode 100644
index 00000000..d44642d1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyDispatcher.java
@@ -0,0 +1,158 @@
+package org.apache.maven.eventspy.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.eventspy.EventSpy;
+import org.apache.maven.execution.ExecutionListener;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.eclipse.aether.RepositoryListener;
+
+/**
+ * Dispatches callbacks to all registered eventspies.
+ * @since 3.0.2
+ */
+@Component( role = EventSpyDispatcher.class )
+public class EventSpyDispatcher
+{
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement( role = EventSpy.class )
+ private List<EventSpy> eventSpies;
+
+ public void setEventSpies( List<EventSpy> eventSpies )
+ {
+ // make copy to get rid of needless overhead for dynamic lookups
+ this.eventSpies = new ArrayList<EventSpy>( eventSpies );
+ }
+
+ public List<EventSpy> getEventSpies()
+ {
+ return eventSpies;
+ }
+
+ public ExecutionListener chainListener( ExecutionListener listener )
+ {
+ if ( eventSpies.isEmpty() )
+ {
+ return listener;
+ }
+ return new EventSpyExecutionListener( this, listener );
+ }
+
+ public RepositoryListener chainListener( RepositoryListener listener )
+ {
+ if ( eventSpies.isEmpty() )
+ {
+ return listener;
+ }
+ return new EventSpyRepositoryListener( this, listener );
+ }
+
+ public void init( EventSpy.Context context )
+ {
+ if ( eventSpies.isEmpty() )
+ {
+ return;
+ }
+ for ( EventSpy eventSpy : eventSpies )
+ {
+ try
+ {
+ eventSpy.init( context );
+ }
+ catch ( Exception e )
+ {
+ logError( "initialize", e, eventSpy );
+ }
+ catch ( LinkageError e )
+ {
+ logError( "initialize", e, eventSpy );
+ }
+ }
+ }
+
+ public void onEvent( Object event )
+ {
+ if ( eventSpies.isEmpty() )
+ {
+ return;
+ }
+ for ( EventSpy eventSpy : eventSpies )
+ {
+ try
+ {
+ eventSpy.onEvent( event );
+ }
+ catch ( Exception e )
+ {
+ logError( "notify", e, eventSpy );
+ }
+ catch ( LinkageError e )
+ {
+ logError( "notify", e, eventSpy );
+ }
+ }
+ }
+
+ public void close()
+ {
+ if ( eventSpies.isEmpty() )
+ {
+ return;
+ }
+ for ( EventSpy eventSpy : eventSpies )
+ {
+ try
+ {
+ eventSpy.close();
+ }
+ catch ( Exception e )
+ {
+ logError( "close", e, eventSpy );
+ }
+ catch ( LinkageError e )
+ {
+ logError( "close", e, eventSpy );
+ }
+ }
+ }
+
+ private void logError( String action, Throwable e, EventSpy spy )
+ {
+ String msg = "Failed to " + action + " spy " + spy.getClass().getName() + ": " + e.getMessage();
+
+ if ( logger.isDebugEnabled() )
+ {
+ logger.warn( msg, e );
+ }
+ else
+ {
+ logger.warn( msg );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyExecutionListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyExecutionListener.java
new file mode 100644
index 00000000..6b25da58
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyExecutionListener.java
@@ -0,0 +1,163 @@
+package org.apache.maven.eventspy.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.AbstractExecutionListener;
+import org.apache.maven.execution.ExecutionEvent;
+import org.apache.maven.execution.ExecutionListener;
+
+/**
+ * Forwards execution events to eventspies.
+ * @since 3.0.2
+ */
+class EventSpyExecutionListener
+ extends AbstractExecutionListener
+{
+
+ private final EventSpyDispatcher dispatcher;
+
+ private final ExecutionListener delegate;
+
+ public EventSpyExecutionListener( EventSpyDispatcher dispatcher, ExecutionListener delegate )
+ {
+ this.dispatcher = dispatcher;
+ this.delegate = delegate;
+ }
+
+ @Override
+ public void projectDiscoveryStarted( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.projectDiscoveryStarted( event );
+ }
+
+ @Override
+ public void sessionStarted( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.sessionStarted( event );
+ }
+
+ @Override
+ public void sessionEnded( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.sessionEnded( event );
+ }
+
+ @Override
+ public void projectSkipped( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.projectSkipped( event );
+ }
+
+ @Override
+ public void projectStarted( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.projectStarted( event );
+ }
+
+ @Override
+ public void projectSucceeded( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.projectSucceeded( event );
+ }
+
+ @Override
+ public void projectFailed( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.projectFailed( event );
+ }
+
+ @Override
+ public void forkStarted( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.forkStarted( event );
+ }
+
+ @Override
+ public void forkSucceeded( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.forkSucceeded( event );
+ }
+
+ @Override
+ public void forkFailed( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.forkFailed( event );
+ }
+
+ @Override
+ public void mojoSkipped( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.mojoSkipped( event );
+ }
+
+ @Override
+ public void mojoStarted( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.mojoStarted( event );
+ }
+
+ @Override
+ public void mojoSucceeded( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.mojoSucceeded( event );
+ }
+
+ @Override
+ public void mojoFailed( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.mojoFailed( event );
+ }
+
+ @Override
+ public void forkedProjectStarted( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.forkedProjectStarted( event );
+ }
+
+ @Override
+ public void forkedProjectSucceeded( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.forkedProjectSucceeded( event );
+ }
+
+ @Override
+ public void forkedProjectFailed( ExecutionEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.forkedProjectFailed( event );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyRepositoryListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyRepositoryListener.java
new file mode 100644
index 00000000..60d4cd1c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyRepositoryListener.java
@@ -0,0 +1,176 @@
+package org.apache.maven.eventspy.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.eclipse.aether.AbstractRepositoryListener;
+import org.eclipse.aether.RepositoryEvent;
+import org.eclipse.aether.RepositoryListener;
+
+/**
+ * Forwards repository events to eventspies.
+ * @since 3.0.2
+ */
+class EventSpyRepositoryListener
+ extends AbstractRepositoryListener
+{
+ private final EventSpyDispatcher dispatcher;
+
+ private final RepositoryListener delegate;
+
+ public EventSpyRepositoryListener( EventSpyDispatcher dispatcher, RepositoryListener delegate )
+ {
+ this.dispatcher = dispatcher;
+ this.delegate = delegate;
+ }
+
+ @Override
+ public void artifactDeployed( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.artifactDeployed( event );
+ }
+
+ @Override
+ public void artifactDeploying( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.artifactDeploying( event );
+ }
+
+ @Override
+ public void artifactDescriptorInvalid( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.artifactDescriptorInvalid( event );
+ }
+
+ @Override
+ public void artifactDescriptorMissing( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.artifactDescriptorMissing( event );
+ }
+
+ @Override
+ public void artifactInstalled( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.artifactInstalled( event );
+ }
+
+ @Override
+ public void artifactInstalling( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.artifactInstalling( event );
+ }
+
+ @Override
+ public void artifactResolved( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.artifactResolved( event );
+ }
+
+ @Override
+ public void artifactResolving( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.artifactResolving( event );
+ }
+
+ @Override
+ public void metadataDeployed( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.metadataDeployed( event );
+ }
+
+ @Override
+ public void metadataDeploying( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.metadataDeploying( event );
+ }
+
+ @Override
+ public void metadataInstalled( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.metadataInstalled( event );
+ }
+
+ @Override
+ public void metadataInstalling( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.metadataInstalling( event );
+ }
+
+ @Override
+ public void metadataInvalid( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.metadataInvalid( event );
+ }
+
+ @Override
+ public void metadataResolved( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.metadataResolved( event );
+ }
+
+ @Override
+ public void metadataResolving( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.metadataResolving( event );
+ }
+
+ @Override
+ public void artifactDownloaded( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.artifactDownloaded( event );
+ }
+
+ @Override
+ public void artifactDownloading( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.artifactDownloading( event );
+ }
+
+ @Override
+ public void metadataDownloaded( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.metadataDownloaded( event );
+ }
+
+ @Override
+ public void metadataDownloading( RepositoryEvent event )
+ {
+ dispatcher.onEvent( event );
+ delegate.metadataDownloading( event );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/exception/DefaultExceptionHandler.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/exception/DefaultExceptionHandler.java
new file mode 100644
index 00000000..6df72c81
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/exception/DefaultExceptionHandler.java
@@ -0,0 +1,336 @@
+package org.apache.maven.exception;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.net.ConnectException;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.lifecycle.LifecycleExecutionException;
+import org.apache.maven.model.building.ModelProblem;
+import org.apache.maven.model.building.ModelProblemUtils;
+import org.apache.maven.plugin.AbstractMojoExecutionException;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.PluginContainerException;
+import org.apache.maven.plugin.PluginExecutionException;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.ProjectBuildingResult;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.StringUtils;
+
+/*
+
+- test projects for each of these
+- how to categorize the problems so that the id of the problem can be match to a page with descriptive help and the test
+ project
+- nice little sample projects that could be run in the core as well as integration tests
+
+All Possible Errors
+- invalid lifecycle phase (maybe same as bad CLI param, though you were talking about embedder too)
+- <module> specified is not found
+- malformed settings
+- malformed POM
+- local repository not writable
+- remote repositories not available
+- artifact metadata missing
+- extension metadata missing
+- extension artifact missing
+- artifact metadata retrieval problem
+- version range violation
+- circular dependency
+- artifact missing
+- artifact retrieval exception
+- md5 checksum doesn't match for local artifact, need to redownload this
+- POM doesn't exist for a goal that requires one
+- parent POM missing (in both the repository + relative path)
+- component not found
+
+Plugins:
+- plugin metadata missing
+- plugin metadata retrieval problem
+- plugin artifact missing
+- plugin artifact retrieval problem
+- plugin dependency metadata missing
+- plugin dependency metadata retrieval problem
+- plugin configuration problem
+- plugin execution failure due to something that is know to possibly go wrong (like compilation failure)
+- plugin execution error due to something that is not expected to go wrong (the compiler executable missing)
+- asking to use a plugin for which you do not have a version defined - tools to easily select versions
+- goal not found in a plugin (probably could list the ones that are)
+
+ */
+
+// PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+// CycleDetectedInPluginGraphException;
+
+@Component( role = ExceptionHandler.class )
+public class DefaultExceptionHandler
+ implements ExceptionHandler
+{
+
+ public ExceptionSummary handleException( Throwable exception )
+ {
+ return handle( "", exception );
+ }
+
+ private ExceptionSummary handle( String message, Throwable exception )
+ {
+ String reference = getReference( exception );
+
+ List<ExceptionSummary> children = null;
+
+ if ( exception instanceof ProjectBuildingException )
+ {
+ List<ProjectBuildingResult> results = ( (ProjectBuildingException) exception ).getResults();
+
+ children = new ArrayList<ExceptionSummary>();
+
+ for ( ProjectBuildingResult result : results )
+ {
+ ExceptionSummary child = handle( result );
+ if ( child != null )
+ {
+ children.add( child );
+ }
+ }
+
+ message = "The build could not read " + children.size() + " project" + ( children.size() == 1 ? "" : "s" );
+ }
+ else
+ {
+ message = getMessage( message, exception );
+ }
+
+ return new ExceptionSummary( exception, message, reference, children );
+ }
+
+ private ExceptionSummary handle( ProjectBuildingResult result )
+ {
+ List<ExceptionSummary> children = new ArrayList<ExceptionSummary>();
+
+ for ( ModelProblem problem : result.getProblems() )
+ {
+ ExceptionSummary child = handle( problem, result.getProjectId() );
+ if ( child != null )
+ {
+ children.add( child );
+ }
+ }
+
+ if ( children.isEmpty() )
+ {
+ return null;
+ }
+
+ String message =
+ "\nThe project " + result.getProjectId() + " (" + result.getPomFile() + ") has "
+ + children.size() + " error" + ( children.size() == 1 ? "" : "s" );
+
+ return new ExceptionSummary( null, message, null, children );
+ }
+
+ private ExceptionSummary handle( ModelProblem problem, String projectId )
+ {
+ if ( ModelProblem.Severity.ERROR.compareTo( problem.getSeverity() ) >= 0 )
+ {
+ String message = problem.getMessage();
+
+ String location = ModelProblemUtils.formatLocation( problem, projectId );
+
+ if ( StringUtils.isNotEmpty( location ) )
+ {
+ message += " @ " + location;
+ }
+
+ return handle( message, problem.getException() );
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ private String getReference( Throwable exception )
+ {
+ String reference = "";
+
+ if ( exception != null )
+ {
+ if ( exception instanceof MojoExecutionException )
+ {
+ reference = MojoExecutionException.class.getSimpleName();
+
+ Throwable cause = exception.getCause();
+ if ( cause instanceof IOException )
+ {
+ cause = cause.getCause();
+ if ( cause instanceof ConnectException )
+ {
+ reference = ConnectException.class.getSimpleName();
+ }
+ }
+ }
+ else if ( exception instanceof MojoFailureException )
+ {
+ reference = MojoFailureException.class.getSimpleName();
+ }
+ else if ( exception instanceof LinkageError )
+ {
+ reference = LinkageError.class.getSimpleName();
+ }
+ else if ( exception instanceof PluginExecutionException )
+ {
+ Throwable cause = exception.getCause();
+
+ if ( cause instanceof PluginContainerException )
+ {
+ Throwable cause2 = cause.getCause();
+
+ if ( cause2 instanceof NoClassDefFoundError
+ && cause2.getMessage().contains( "org/sonatype/aether/" ) )
+ {
+ reference = "AetherClassNotFound";
+ }
+ }
+
+ if ( StringUtils.isEmpty( reference ) )
+ {
+ reference = getReference( cause );
+ }
+
+ if ( StringUtils.isEmpty( reference ) )
+ {
+ reference = exception.getClass().getSimpleName();
+ }
+ }
+ else if ( exception instanceof LifecycleExecutionException )
+ {
+ reference = getReference( exception.getCause() );
+ }
+ else if ( isNoteworthyException( exception ) )
+ {
+ reference = exception.getClass().getSimpleName();
+ }
+ }
+
+ if ( StringUtils.isNotEmpty( reference ) && !reference.startsWith( "http:" ) )
+ {
+ reference = "http://cwiki.apache.org/confluence/display/MAVEN/" + reference;
+ }
+
+ return reference;
+ }
+
+ private boolean isNoteworthyException( Throwable exception )
+ {
+ if ( exception == null )
+ {
+ return false;
+ }
+ else if ( exception instanceof Error )
+ {
+ return true;
+ }
+ else if ( exception instanceof RuntimeException )
+ {
+ return false;
+ }
+ else if ( exception.getClass().getName().startsWith( "java" ) )
+ {
+ return false;
+ }
+ return true;
+ }
+
+ private String getMessage( String message, Throwable exception )
+ {
+ String fullMessage = ( message != null ) ? message : "";
+
+ for ( Throwable t = exception; t != null; t = t.getCause() )
+ {
+ String exceptionMessage = t.getMessage();
+
+ if ( t instanceof AbstractMojoExecutionException )
+ {
+ String longMessage = ( (AbstractMojoExecutionException) t ).getLongMessage();
+ if ( StringUtils.isNotEmpty( longMessage ) )
+ {
+ if ( StringUtils.isEmpty( exceptionMessage ) || longMessage.contains( exceptionMessage ) )
+ {
+ exceptionMessage = longMessage;
+ }
+ else if ( !exceptionMessage.contains( longMessage ) )
+ {
+ exceptionMessage = join( exceptionMessage, '\n' + longMessage );
+ }
+ }
+ }
+
+ if ( StringUtils.isEmpty( exceptionMessage ) )
+ {
+ exceptionMessage = t.getClass().getSimpleName();
+ }
+
+ if ( t instanceof UnknownHostException && !fullMessage.contains( "host" ) )
+ {
+ fullMessage = join( fullMessage, "Unknown host " + exceptionMessage );
+ }
+ else if ( !fullMessage.contains( exceptionMessage ) )
+ {
+ fullMessage = join( fullMessage, exceptionMessage );
+ }
+ }
+
+ return fullMessage.trim();
+ }
+
+ private String join( String message1, String message2 )
+ {
+ String message = "";
+
+ if ( StringUtils.isNotEmpty( message1 ) )
+ {
+ message = message1.trim();
+ }
+
+ if ( StringUtils.isNotEmpty( message2 ) )
+ {
+ if ( StringUtils.isNotEmpty( message ) )
+ {
+ if ( message.endsWith( "." ) || message.endsWith( "!" ) || message.endsWith( ":" ) )
+ {
+ message += " ";
+ }
+ else
+ {
+ message += ": ";
+ }
+ }
+
+ message += message2;
+ }
+
+ return message;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/exception/ExceptionHandler.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/exception/ExceptionHandler.java
new file mode 100644
index 00000000..47865f67
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/exception/ExceptionHandler.java
@@ -0,0 +1,30 @@
+package org.apache.maven.exception;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Transform an exception into useful end-user message.
+ *
+ * @since 3.0-alpha-3
+ */
+public interface ExceptionHandler
+{
+ ExceptionSummary handleException( Throwable e );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/exception/ExceptionSummary.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/exception/ExceptionSummary.java
new file mode 100644
index 00000000..dcc376a4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/exception/ExceptionSummary.java
@@ -0,0 +1,79 @@
+package org.apache.maven.exception;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Provide a summary of the exception, containing:<ul>
+ * <li>the exception itself,</li>
+ * <li>useful end-user message,</li>
+ * <li>useful reference to a solution, or set of solutions: this is usually a wiki page url in
+ * <a href="http://cwiki.apache.org/confluence/display/MAVEN/">http://cwiki.apache.org/confluence/display/MAVEN/</a>,
+ * </li>
+ * <li>child exception summaries.</li>
+ * </ul>
+ */
+public class ExceptionSummary
+{
+
+ private Throwable exception;
+
+ private String message;
+
+ private String reference;
+
+ private List<ExceptionSummary> children;
+
+ public ExceptionSummary( Throwable exception, String message, String reference )
+ {
+ this( exception, message, reference, null );
+ }
+
+ public ExceptionSummary( Throwable exception, String message, String reference, List<ExceptionSummary> children )
+ {
+ this.exception = exception;
+ this.message = ( message != null ) ? message : "";
+ this.reference = ( reference != null ) ? reference : "";
+ this.children = ( children != null ) ? children : Collections.<ExceptionSummary>emptyList();
+ }
+
+ public Throwable getException()
+ {
+ return exception;
+ }
+
+ public String getMessage()
+ {
+ return message;
+ }
+
+ public String getReference()
+ {
+ return reference;
+ }
+
+ public List<ExceptionSummary> getChildren()
+ {
+ return children;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/AbstractExecutionListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/AbstractExecutionListener.java
new file mode 100644
index 00000000..89665007
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/AbstractExecutionListener.java
@@ -0,0 +1,116 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Provides a skeleton implementation for execution listeners. The methods of this class are empty.
+ *
+ * @author Benjamin Bentmann
+ */
+public class AbstractExecutionListener
+ implements ExecutionListener
+{
+
+ public void projectDiscoveryStarted( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+ public void sessionStarted( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+ public void sessionEnded( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+ public void projectSkipped( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+ public void projectStarted( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+ public void projectSucceeded( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+ public void projectFailed( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+ public void forkStarted( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+ public void forkSucceeded( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+ public void forkFailed( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+ public void mojoSkipped( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+ public void mojoStarted( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+ public void mojoSucceeded( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+ public void mojoFailed( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+ public void forkedProjectStarted( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+ public void forkedProjectSucceeded( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+ public void forkedProjectFailed( ExecutionEvent event )
+ {
+ // default does nothing
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/BuildFailure.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/BuildFailure.java
new file mode 100644
index 00000000..bf8f62ba
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/BuildFailure.java
@@ -0,0 +1,61 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Summarizes the result of a failed project build in the reactor.
+ *
+ * @author Benjamin Bentmann
+ */
+public class BuildFailure
+ extends BuildSummary
+{
+
+ /**
+ * The cause of the build failure.
+ */
+ private final Throwable cause;
+
+ /**
+ * Creates a new build summary for the specified project.
+ *
+ * @param project The project being summarized, must not be {@code null}.
+ * @param time The build time of the project in milliseconds.
+ * @param cause The cause of the build failure, may be {@code null}.
+ */
+ public BuildFailure( MavenProject project, long time, Throwable cause )
+ {
+ super( project, time );
+ this.cause = cause;
+ }
+
+ /**
+ * Gets the cause of the build failure.
+ *
+ * @return The cause of the build failure or {@code null} if unknown.
+ */
+ public Throwable getCause()
+ {
+ return cause;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/BuildSuccess.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/BuildSuccess.java
new file mode 100644
index 00000000..3d0e8bd7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/BuildSuccess.java
@@ -0,0 +1,44 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Summarizes the result of a successful project build in the reactor.
+ *
+ * @author Benjamin Bentmann
+ */
+public class BuildSuccess
+ extends BuildSummary
+{
+
+ /**
+ * Creates a new build summary for the specified project.
+ *
+ * @param project The project being summarized, must not be {@code null}.
+ * @param time The build time of the project in milliseconds.
+ */
+ public BuildSuccess( MavenProject project, long time )
+ {
+ super( project, time );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/BuildSummary.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/BuildSummary.java
new file mode 100644
index 00000000..ec23f721
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/BuildSummary.java
@@ -0,0 +1,78 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Summarizes the result of a project build in the reactor.
+ *
+ * @author Benjamin Bentmann
+ */
+public abstract class BuildSummary
+{
+
+ /**
+ * The project being summarized.
+ */
+ private final MavenProject project;
+
+ /**
+ * The build time of the project in milliseconds.
+ */
+ private final long time;
+
+ /**
+ * Creates a new build summary for the specified project.
+ *
+ * @param project The project being summarized, must not be {@code null}.
+ * @param time The build time of the project in milliseconds.
+ */
+ protected BuildSummary( MavenProject project, long time )
+ {
+ if ( project == null )
+ {
+ throw new IllegalArgumentException( "project missing" );
+ }
+ this.project = project;
+ this.time = time;
+ }
+
+ /**
+ * Gets the project being summarized.
+ *
+ * @return The project being summarized, never {@code null}.
+ */
+ public MavenProject getProject()
+ {
+ return project;
+ }
+
+ /**
+ * Gets the build time of the project in milliseconds.
+ *
+ * @return The build time of the project in milliseconds.
+ */
+ public long getTime()
+ {
+ return time;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
new file mode 100644
index 00000000..e5509dca
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
@@ -0,0 +1,1299 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.eventspy.internal.EventSpyDispatcher;
+import org.apache.maven.model.Profile;
+import org.apache.maven.project.DefaultProjectBuildingRequest;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.settings.Mirror;
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Server;
+import org.apache.maven.toolchain.model.ToolchainModel;
+import org.eclipse.aether.DefaultRepositoryCache;
+import org.eclipse.aether.RepositoryCache;
+import org.eclipse.aether.repository.WorkspaceReader;
+import org.eclipse.aether.transfer.TransferListener;
+
+import com.google.common.collect.Maps;
+
+/**
+ * @author Jason van Zyl
+ */
+public class DefaultMavenExecutionRequest
+ implements MavenExecutionRequest
+{
+
+ private RepositoryCache repositoryCache = new DefaultRepositoryCache();
+
+ private WorkspaceReader workspaceReader;
+
+ private ArtifactRepository localRepository;
+
+ private EventSpyDispatcher eventSpyDispatcher;
+
+ private File localRepositoryPath;
+
+ private boolean offline = false;
+
+ private boolean interactiveMode = true;
+
+ private boolean cacheTransferError;
+
+ private boolean cacheNotFound;
+
+ private List<Proxy> proxies;
+
+ private List<Server> servers;
+
+ private List<Mirror> mirrors;
+
+ private List<Profile> profiles;
+
+ private List<String> pluginGroups;
+
+ private boolean isProjectPresent = true;
+
+ // ----------------------------------------------------------------------------
+ // We need to allow per execution user and global settings as the embedder
+ // might be running in a mode where its executing many threads with totally
+ // different settings.
+ // ----------------------------------------------------------------------------
+
+ private File userSettingsFile;
+
+ private File globalSettingsFile;
+
+ private File userToolchainsFile;
+
+ private File globalToolchainsFile;
+
+ // ----------------------------------------------------------------------------
+ // Request
+ // ----------------------------------------------------------------------------
+
+ private File multiModuleProjectDirectory;
+
+ private File basedir;
+
+ private List<String> goals;
+
+ private boolean useReactor = false;
+
+ private boolean recursive = true;
+
+ private File pom;
+
+ private String reactorFailureBehavior = REACTOR_FAIL_FAST;
+
+ private List<String> selectedProjects;
+
+ private List<String> excludedProjects;
+
+ private String resumeFrom;
+
+ private String makeBehavior;
+
+ private Properties systemProperties;
+
+ private Properties userProperties;
+
+ private Date startTime;
+
+ private boolean showErrors = false;
+
+ private List<String> activeProfiles;
+
+ private List<String> inactiveProfiles;
+
+ private TransferListener transferListener;
+
+ private int loggingLevel = LOGGING_LEVEL_INFO;
+
+ private String globalChecksumPolicy;
+
+ private boolean updateSnapshots = false;
+
+ private List<ArtifactRepository> remoteRepositories;
+
+ private List<ArtifactRepository> pluginArtifactRepositories;
+
+ private ExecutionListener executionListener;
+
+ private int degreeOfConcurrency = 1;
+
+ private String builderId = "singlethreaded";
+
+ private Map<String, List<ToolchainModel>> toolchains;
+
+ /**
+ * Suppress SNAPSHOT updates.
+ *
+ * @issue MNG-2681
+ */
+ private boolean noSnapshotUpdates;
+
+ private boolean useLegacyLocalRepositoryManager = false;
+
+ private Map<String, Object> data;
+
+ public DefaultMavenExecutionRequest()
+ {
+ }
+
+ public static MavenExecutionRequest copy( MavenExecutionRequest original )
+ {
+ DefaultMavenExecutionRequest copy = new DefaultMavenExecutionRequest();
+ copy.setLocalRepository( original.getLocalRepository() );
+ copy.setLocalRepositoryPath( original.getLocalRepositoryPath() );
+ copy.setOffline( original.isOffline() );
+ copy.setInteractiveMode( original.isInteractiveMode() );
+ copy.setCacheNotFound( original.isCacheNotFound() );
+ copy.setCacheTransferError( original.isCacheTransferError() );
+ copy.setProxies( original.getProxies() );
+ copy.setServers( original.getServers() );
+ copy.setMirrors( original.getMirrors() );
+ copy.setProfiles( original.getProfiles() );
+ copy.setPluginGroups( original.getPluginGroups() );
+ copy.setProjectPresent( original.isProjectPresent() );
+ copy.setUserSettingsFile( original.getUserSettingsFile() );
+ copy.setGlobalSettingsFile( original.getGlobalSettingsFile() );
+ copy.setUserToolchainsFile( original.getUserToolchainsFile() );
+ copy.setGlobalToolchainsFile( original.getGlobalToolchainsFile() );
+ copy.setBaseDirectory( ( original.getBaseDirectory() != null ) ? new File( original.getBaseDirectory() )
+ : null );
+ copy.setGoals( original.getGoals() );
+ copy.setRecursive( original.isRecursive() );
+ copy.setPom( original.getPom() );
+ copy.setSystemProperties( original.getSystemProperties() );
+ copy.setUserProperties( original.getUserProperties() );
+ copy.setShowErrors( original.isShowErrors() );
+ copy.setActiveProfiles( original.getActiveProfiles() );
+ copy.setInactiveProfiles( original.getInactiveProfiles() );
+ copy.setTransferListener( original.getTransferListener() );
+ copy.setLoggingLevel( original.getLoggingLevel() );
+ copy.setGlobalChecksumPolicy( original.getGlobalChecksumPolicy() );
+ copy.setUpdateSnapshots( original.isUpdateSnapshots() );
+ copy.setRemoteRepositories( original.getRemoteRepositories() );
+ copy.setPluginArtifactRepositories( original.getPluginArtifactRepositories() );
+ copy.setRepositoryCache( original.getRepositoryCache() );
+ copy.setWorkspaceReader( original.getWorkspaceReader() );
+ copy.setNoSnapshotUpdates( original.isNoSnapshotUpdates() );
+ copy.setExecutionListener( original.getExecutionListener() );
+ copy.setUseLegacyLocalRepository( original.isUseLegacyLocalRepository() );
+ copy.setBuilderId( original.getBuilderId() );
+ return copy;
+ }
+
+ @Override
+ public String getBaseDirectory()
+ {
+ if ( basedir == null )
+ {
+ return null;
+ }
+
+ return basedir.getAbsolutePath();
+ }
+
+ @Override
+ public ArtifactRepository getLocalRepository()
+ {
+ return localRepository;
+ }
+
+ @Override
+ public File getLocalRepositoryPath()
+ {
+ return localRepositoryPath;
+ }
+
+ @Override
+ public List<String> getGoals()
+ {
+ if ( goals == null )
+ {
+ goals = new ArrayList<String>();
+ }
+ return goals;
+ }
+
+ @Override
+ public Properties getSystemProperties()
+ {
+ if ( systemProperties == null )
+ {
+ systemProperties = new Properties();
+ }
+
+ return systemProperties;
+ }
+
+ @Override
+ public Properties getUserProperties()
+ {
+ if ( userProperties == null )
+ {
+ userProperties = new Properties();
+ }
+
+ return userProperties;
+ }
+
+ @Override
+ public File getPom()
+ {
+ return pom;
+ }
+
+ @Override
+ public String getReactorFailureBehavior()
+ {
+ return reactorFailureBehavior;
+ }
+
+ @Override
+ public List<String> getSelectedProjects()
+ {
+ if ( selectedProjects == null )
+ {
+ selectedProjects = new ArrayList<String>();
+ }
+
+ return selectedProjects;
+ }
+
+ @Override
+ public List<String> getExcludedProjects()
+ {
+ if ( excludedProjects == null )
+ {
+ excludedProjects = new ArrayList<String>();
+ }
+
+ return excludedProjects;
+ }
+
+ @Override
+ public String getResumeFrom()
+ {
+ return resumeFrom;
+ }
+
+ @Override
+ public String getMakeBehavior()
+ {
+ return makeBehavior;
+ }
+
+ @Override
+ public Date getStartTime()
+ {
+ return startTime;
+ }
+
+ @Override
+ public boolean isShowErrors()
+ {
+ return showErrors;
+ }
+
+ @Override
+ public boolean isInteractiveMode()
+ {
+ return interactiveMode;
+ }
+
+ @Override
+ public MavenExecutionRequest setActiveProfiles( List<String> activeProfiles )
+ {
+ if ( activeProfiles != null )
+ {
+ this.activeProfiles = new ArrayList<String>( activeProfiles );
+ }
+ else
+ {
+ this.activeProfiles = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setInactiveProfiles( List<String> inactiveProfiles )
+ {
+ if ( inactiveProfiles != null )
+ {
+ this.inactiveProfiles = new ArrayList<String>( inactiveProfiles );
+ }
+ else
+ {
+ this.inactiveProfiles = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setRemoteRepositories( List<ArtifactRepository> remoteRepositories )
+ {
+ if ( remoteRepositories != null )
+ {
+ this.remoteRepositories = new ArrayList<ArtifactRepository>( remoteRepositories );
+ }
+ else
+ {
+ this.remoteRepositories = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setPluginArtifactRepositories( List<ArtifactRepository> pluginArtifactRepositories )
+ {
+ if ( pluginArtifactRepositories != null )
+ {
+ this.pluginArtifactRepositories = new ArrayList<ArtifactRepository>( pluginArtifactRepositories );
+ }
+ else
+ {
+ this.pluginArtifactRepositories = null;
+ }
+
+ return this;
+ }
+
+ public void setProjectBuildingConfiguration( ProjectBuildingRequest projectBuildingConfiguration )
+ {
+ this.projectBuildingRequest = projectBuildingConfiguration;
+ }
+
+ @Override
+ public List<String> getActiveProfiles()
+ {
+ if ( activeProfiles == null )
+ {
+ activeProfiles = new ArrayList<String>();
+ }
+ return activeProfiles;
+ }
+
+ @Override
+ public List<String> getInactiveProfiles()
+ {
+ if ( inactiveProfiles == null )
+ {
+ inactiveProfiles = new ArrayList<String>();
+ }
+ return inactiveProfiles;
+ }
+
+ @Override
+ public TransferListener getTransferListener()
+ {
+ return transferListener;
+ }
+
+ @Override
+ public int getLoggingLevel()
+ {
+ return loggingLevel;
+ }
+
+ @Override
+ public boolean isOffline()
+ {
+ return offline;
+ }
+
+ @Override
+ public boolean isUpdateSnapshots()
+ {
+ return updateSnapshots;
+ }
+
+ @Override
+ public boolean isNoSnapshotUpdates()
+ {
+ return noSnapshotUpdates;
+ }
+
+ @Override
+ public String getGlobalChecksumPolicy()
+ {
+ return globalChecksumPolicy;
+ }
+
+ @Override
+ public boolean isRecursive()
+ {
+ return recursive;
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ @Override
+ public MavenExecutionRequest setBaseDirectory( File basedir )
+ {
+ this.basedir = basedir;
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setStartTime( Date startTime )
+ {
+ this.startTime = startTime;
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setShowErrors( boolean showErrors )
+ {
+ this.showErrors = showErrors;
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setGoals( List<String> goals )
+ {
+ if ( goals != null )
+ {
+ this.goals = new ArrayList<String>( goals );
+ }
+ else
+ {
+ this.goals = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setLocalRepository( ArtifactRepository localRepository )
+ {
+ this.localRepository = localRepository;
+
+ if ( localRepository != null )
+ {
+ setLocalRepositoryPath( new File( localRepository.getBasedir() ).getAbsoluteFile() );
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setLocalRepositoryPath( File localRepository )
+ {
+ localRepositoryPath = localRepository;
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setLocalRepositoryPath( String localRepository )
+ {
+ localRepositoryPath = ( localRepository != null ) ? new File( localRepository ) : null;
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setSystemProperties( Properties properties )
+ {
+ if ( properties != null )
+ {
+ this.systemProperties = new Properties();
+ this.systemProperties.putAll( properties );
+ }
+ else
+ {
+ this.systemProperties = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setUserProperties( Properties userProperties )
+ {
+ if ( userProperties != null )
+ {
+ this.userProperties = new Properties();
+ this.userProperties.putAll( userProperties );
+ }
+ else
+ {
+ this.userProperties = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setReactorFailureBehavior( String failureBehavior )
+ {
+ reactorFailureBehavior = failureBehavior;
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setSelectedProjects( List<String> selectedProjects )
+ {
+ if ( selectedProjects != null )
+ {
+ this.selectedProjects = new ArrayList<String>( selectedProjects );
+ }
+ else
+ {
+ this.selectedProjects = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setExcludedProjects( List<String> excludedProjects )
+ {
+ if ( excludedProjects != null )
+ {
+ this.excludedProjects = new ArrayList<String>( excludedProjects );
+ }
+ else
+ {
+ this.excludedProjects = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setResumeFrom( String project )
+ {
+ this.resumeFrom = project;
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setMakeBehavior( String makeBehavior )
+ {
+ this.makeBehavior = makeBehavior;
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest addActiveProfile( String profile )
+ {
+ if ( !getActiveProfiles().contains( profile ) )
+ {
+ getActiveProfiles().add( profile );
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest addInactiveProfile( String profile )
+ {
+ if ( !getInactiveProfiles().contains( profile ) )
+ {
+ getInactiveProfiles().add( profile );
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest addActiveProfiles( List<String> profiles )
+ {
+ for ( String profile : profiles )
+ {
+ addActiveProfile( profile );
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest addInactiveProfiles( List<String> profiles )
+ {
+ for ( String profile : profiles )
+ {
+ addInactiveProfile( profile );
+ }
+
+ return this;
+ }
+
+ public MavenExecutionRequest setUseReactor( boolean reactorActive )
+ {
+ useReactor = reactorActive;
+
+ return this;
+ }
+
+ public boolean useReactor()
+ {
+ return useReactor;
+ }
+
+ /** @deprecated use {@link #setPom(File)} */
+ @Deprecated
+ public MavenExecutionRequest setPomFile( String pomFilename )
+ {
+ if ( pomFilename != null )
+ {
+ pom = new File( pomFilename );
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setPom( File pom )
+ {
+ this.pom = pom;
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setInteractiveMode( boolean interactive )
+ {
+ interactiveMode = interactive;
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setTransferListener( TransferListener transferListener )
+ {
+ this.transferListener = transferListener;
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setLoggingLevel( int loggingLevel )
+ {
+ this.loggingLevel = loggingLevel;
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setOffline( boolean offline )
+ {
+ this.offline = offline;
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setUpdateSnapshots( boolean updateSnapshots )
+ {
+ this.updateSnapshots = updateSnapshots;
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setNoSnapshotUpdates( boolean noSnapshotUpdates )
+ {
+ this.noSnapshotUpdates = noSnapshotUpdates;
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setGlobalChecksumPolicy( String globalChecksumPolicy )
+ {
+ this.globalChecksumPolicy = globalChecksumPolicy;
+
+ return this;
+ }
+
+ // ----------------------------------------------------------------------------
+ // Settings equivalents
+ // ----------------------------------------------------------------------------
+
+ @Override
+ public List<Proxy> getProxies()
+ {
+ if ( proxies == null )
+ {
+ proxies = new ArrayList<Proxy>();
+ }
+ return proxies;
+ }
+
+ @Override
+ public MavenExecutionRequest setProxies( List<Proxy> proxies )
+ {
+ if ( proxies != null )
+ {
+ this.proxies = new ArrayList<Proxy>( proxies );
+ }
+ else
+ {
+ this.proxies = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest addProxy( Proxy proxy )
+ {
+ if ( proxy == null )
+ {
+ throw new IllegalArgumentException( "proxy missing" );
+ }
+
+ for ( Proxy p : getProxies() )
+ {
+ if ( p.getId() != null && p.getId().equals( proxy.getId() ) )
+ {
+ return this;
+ }
+ }
+
+ getProxies().add( proxy );
+
+ return this;
+ }
+
+ @Override
+ public List<Server> getServers()
+ {
+ if ( servers == null )
+ {
+ servers = new ArrayList<Server>();
+ }
+ return servers;
+ }
+
+ @Override
+ public MavenExecutionRequest setServers( List<Server> servers )
+ {
+ if ( servers != null )
+ {
+ this.servers = new ArrayList<Server>( servers );
+ }
+ else
+ {
+ this.servers = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest addServer( Server server )
+ {
+ if ( server == null )
+ {
+ throw new IllegalArgumentException( "server missing" );
+ }
+
+ for ( Server p : getServers() )
+ {
+ if ( p.getId() != null && p.getId().equals( server.getId() ) )
+ {
+ return this;
+ }
+ }
+
+ getServers().add( server );
+
+ return this;
+ }
+
+ @Override
+ public List<Mirror> getMirrors()
+ {
+ if ( mirrors == null )
+ {
+ mirrors = new ArrayList<Mirror>();
+ }
+ return mirrors;
+ }
+
+ @Override
+ public MavenExecutionRequest setMirrors( List<Mirror> mirrors )
+ {
+ if ( mirrors != null )
+ {
+ this.mirrors = new ArrayList<Mirror>( mirrors );
+ }
+ else
+ {
+ this.mirrors = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest addMirror( Mirror mirror )
+ {
+ if ( mirror == null )
+ {
+ throw new IllegalArgumentException( "mirror missing" );
+ }
+
+ for ( Mirror p : getMirrors() )
+ {
+ if ( p.getId() != null && p.getId().equals( mirror.getId() ) )
+ {
+ return this;
+ }
+ }
+
+ getMirrors().add( mirror );
+
+ return this;
+ }
+
+ @Override
+ public List<Profile> getProfiles()
+ {
+ if ( profiles == null )
+ {
+ profiles = new ArrayList<Profile>();
+ }
+ return profiles;
+ }
+
+ @Override
+ public MavenExecutionRequest setProfiles( List<Profile> profiles )
+ {
+ if ( profiles != null )
+ {
+ this.profiles = new ArrayList<Profile>( profiles );
+ }
+ else
+ {
+ this.profiles = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public List<String> getPluginGroups()
+ {
+ if ( pluginGroups == null )
+ {
+ pluginGroups = new ArrayList<String>();
+ }
+
+ return pluginGroups;
+ }
+
+ @Override
+ public MavenExecutionRequest setPluginGroups( List<String> pluginGroups )
+ {
+ if ( pluginGroups != null )
+ {
+ this.pluginGroups = new ArrayList<String>( pluginGroups );
+ }
+ else
+ {
+ this.pluginGroups = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest addPluginGroup( String pluginGroup )
+ {
+ if ( !getPluginGroups().contains( pluginGroup ) )
+ {
+ getPluginGroups().add( pluginGroup );
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest addPluginGroups( List<String> pluginGroups )
+ {
+ for ( String pluginGroup : pluginGroups )
+ {
+ addPluginGroup( pluginGroup );
+ }
+
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setRecursive( boolean recursive )
+ {
+ this.recursive = recursive;
+
+ return this;
+ }
+
+ // calculated from request attributes.
+ private ProjectBuildingRequest projectBuildingRequest;
+
+ @Override
+ public boolean isProjectPresent()
+ {
+ return isProjectPresent;
+ }
+
+ @Override
+ public MavenExecutionRequest setProjectPresent( boolean projectPresent )
+ {
+ isProjectPresent = projectPresent;
+
+ return this;
+ }
+
+ // Settings files
+
+ @Override
+ public File getUserSettingsFile()
+ {
+ return userSettingsFile;
+ }
+
+ @Override
+ public MavenExecutionRequest setUserSettingsFile( File userSettingsFile )
+ {
+ this.userSettingsFile = userSettingsFile;
+
+ return this;
+ }
+
+ @Override
+ public File getGlobalSettingsFile()
+ {
+ return globalSettingsFile;
+ }
+
+ @Override
+ public MavenExecutionRequest setGlobalSettingsFile( File globalSettingsFile )
+ {
+ this.globalSettingsFile = globalSettingsFile;
+
+ return this;
+ }
+
+ @Override
+ public File getUserToolchainsFile()
+ {
+ return userToolchainsFile;
+ }
+
+ @Override
+ public MavenExecutionRequest setUserToolchainsFile( File userToolchainsFile )
+ {
+ this.userToolchainsFile = userToolchainsFile;
+
+ return this;
+ }
+
+ @Override
+ public File getGlobalToolchainsFile()
+ {
+ return globalToolchainsFile;
+ }
+
+ @Override
+ public MavenExecutionRequest setGlobalToolchainsFile( File globalToolchainsFile )
+ {
+ this.globalToolchainsFile = globalToolchainsFile;
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest addRemoteRepository( ArtifactRepository repository )
+ {
+ for ( ArtifactRepository repo : getRemoteRepositories() )
+ {
+ if ( repo.getId() != null && repo.getId().equals( repository.getId() ) )
+ {
+ return this;
+ }
+ }
+
+ getRemoteRepositories().add( repository );
+
+ return this;
+ }
+
+ @Override
+ public List<ArtifactRepository> getRemoteRepositories()
+ {
+ if ( remoteRepositories == null )
+ {
+ remoteRepositories = new ArrayList<ArtifactRepository>();
+ }
+ return remoteRepositories;
+ }
+
+ @Override
+ public MavenExecutionRequest addPluginArtifactRepository( ArtifactRepository repository )
+ {
+ for ( ArtifactRepository repo : getPluginArtifactRepositories() )
+ {
+ if ( repo.getId() != null && repo.getId().equals( repository.getId() ) )
+ {
+ return this;
+ }
+ }
+
+ getPluginArtifactRepositories().add( repository );
+
+ return this;
+ }
+
+ @Override
+ public List<ArtifactRepository> getPluginArtifactRepositories()
+ {
+ if ( pluginArtifactRepositories == null )
+ {
+ pluginArtifactRepositories = new ArrayList<ArtifactRepository>();
+ }
+ return pluginArtifactRepositories;
+ }
+
+ // TODO: this does not belong here.
+ @Override
+ public ProjectBuildingRequest getProjectBuildingRequest()
+ {
+ if ( projectBuildingRequest == null )
+ {
+ projectBuildingRequest = new DefaultProjectBuildingRequest();
+ projectBuildingRequest.setLocalRepository( getLocalRepository() );
+ projectBuildingRequest.setSystemProperties( getSystemProperties() );
+ projectBuildingRequest.setUserProperties( getUserProperties() );
+ projectBuildingRequest.setRemoteRepositories( getRemoteRepositories() );
+ projectBuildingRequest.setPluginArtifactRepositories( getPluginArtifactRepositories() );
+ projectBuildingRequest.setActiveProfileIds( getActiveProfiles() );
+ projectBuildingRequest.setInactiveProfileIds( getInactiveProfiles() );
+ projectBuildingRequest.setProfiles( getProfiles() );
+ projectBuildingRequest.setProcessPlugins( true );
+ projectBuildingRequest.setBuildStartTime( getStartTime() );
+ }
+
+ return projectBuildingRequest;
+ }
+
+ @Override
+ public MavenExecutionRequest addProfile( Profile profile )
+ {
+ if ( profile == null )
+ {
+ throw new IllegalArgumentException( "profile missing" );
+ }
+
+ for ( Profile p : getProfiles() )
+ {
+ if ( p.getId() != null && p.getId().equals( profile.getId() ) )
+ {
+ return this;
+ }
+ }
+
+ getProfiles().add( profile );
+
+ return this;
+ }
+
+ @Override
+ public RepositoryCache getRepositoryCache()
+ {
+ return repositoryCache;
+ }
+
+ @Override
+ public MavenExecutionRequest setRepositoryCache( RepositoryCache repositoryCache )
+ {
+ this.repositoryCache = repositoryCache;
+
+ return this;
+ }
+
+ @Override
+ public ExecutionListener getExecutionListener()
+ {
+ return executionListener;
+ }
+
+ @Override
+ public MavenExecutionRequest setExecutionListener( ExecutionListener executionListener )
+ {
+ this.executionListener = executionListener;
+
+ return this;
+ }
+
+ @Override
+ public void setDegreeOfConcurrency( final int degreeOfConcurrency )
+ {
+ this.degreeOfConcurrency = degreeOfConcurrency;
+ }
+
+ @Override
+ public int getDegreeOfConcurrency()
+ {
+ return degreeOfConcurrency;
+ }
+
+ @Override
+ public WorkspaceReader getWorkspaceReader()
+ {
+ return workspaceReader;
+ }
+
+ @Override
+ public MavenExecutionRequest setWorkspaceReader( WorkspaceReader workspaceReader )
+ {
+ this.workspaceReader = workspaceReader;
+ return this;
+ }
+
+ @Override
+ public boolean isCacheTransferError()
+ {
+ return cacheTransferError;
+ }
+
+ @Override
+ public MavenExecutionRequest setCacheTransferError( boolean cacheTransferError )
+ {
+ this.cacheTransferError = cacheTransferError;
+ return this;
+ }
+
+ @Override
+ public boolean isCacheNotFound()
+ {
+ return cacheNotFound;
+ }
+
+ @Override
+ public MavenExecutionRequest setCacheNotFound( boolean cacheNotFound )
+ {
+ this.cacheNotFound = cacheNotFound;
+ return this;
+ }
+
+ @Override
+ public boolean isUseLegacyLocalRepository()
+ {
+ return this.useLegacyLocalRepositoryManager;
+ }
+
+ @Override
+ public MavenExecutionRequest setUseLegacyLocalRepository( boolean useLegacyLocalRepositoryManager )
+ {
+ this.useLegacyLocalRepositoryManager = useLegacyLocalRepositoryManager;
+ return this;
+ }
+
+ @Override
+ public MavenExecutionRequest setBuilderId( String builderId )
+ {
+ this.builderId = builderId;
+ return this;
+ }
+
+ @Override
+ public String getBuilderId()
+ {
+ return builderId;
+ }
+
+ @Override
+ public Map<String, List<ToolchainModel>> getToolchains()
+ {
+ if ( toolchains == null )
+ {
+ toolchains = new HashMap<String, List<ToolchainModel>>();
+ }
+ return toolchains;
+ }
+
+ @Override
+ public MavenExecutionRequest setToolchains( Map<String, List<ToolchainModel>> toolchains )
+ {
+ this.toolchains = toolchains;
+ return this;
+ }
+
+ @Override
+ public void setMultiModuleProjectDirectory( File directory )
+ {
+ this.multiModuleProjectDirectory = directory;
+ }
+
+ @Override
+ public File getMultiModuleProjectDirectory()
+ {
+ return multiModuleProjectDirectory;
+ }
+
+ @Override
+ public MavenExecutionRequest setEventSpyDispatcher( EventSpyDispatcher eventSpyDispatcher )
+ {
+ this.eventSpyDispatcher = eventSpyDispatcher;
+ return this;
+ }
+
+ @Override
+ public EventSpyDispatcher getEventSpyDispatcher()
+ {
+ return eventSpyDispatcher;
+ }
+
+ @Override
+ public Map<String, Object> getData()
+ {
+ if ( data == null )
+ {
+ data = Maps.newHashMap();
+ }
+
+ return data;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulator.java
new file mode 100644
index 00000000..7568fdee
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulator.java
@@ -0,0 +1,318 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.bridge.MavenRepositorySystem;
+import org.apache.maven.repository.RepositorySystem;
+//
+// All of this needs to go away and be couched in terms of the execution request
+//
+import org.apache.maven.settings.Mirror;
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Repository;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.settings.SettingsUtils;
+//
+// Settings in core
+//
+import org.apache.maven.toolchain.model.PersistedToolchains;
+import org.apache.maven.toolchain.model.ToolchainModel;
+import org.codehaus.plexus.util.StringUtils;
+
+@Named
+public class DefaultMavenExecutionRequestPopulator
+ implements MavenExecutionRequestPopulator
+{
+
+ private final MavenRepositorySystem repositorySystem;
+
+ @Inject
+ public DefaultMavenExecutionRequestPopulator( MavenRepositorySystem repositorySystem )
+ {
+ this.repositorySystem = repositorySystem;
+ }
+
+
+ @Override
+ public MavenExecutionRequest populateFromToolchains( MavenExecutionRequest request, PersistedToolchains toolchains )
+ throws MavenExecutionRequestPopulationException
+ {
+ if ( toolchains != null )
+ {
+ Map<String, List<ToolchainModel>> groupedToolchains = new HashMap<String, List<ToolchainModel>>( 2 );
+
+ for ( ToolchainModel model : toolchains.getToolchains() )
+ {
+ if ( !groupedToolchains.containsKey( model.getType() ) )
+ {
+ groupedToolchains.put( model.getType(), new ArrayList<ToolchainModel>() );
+ }
+
+ groupedToolchains.get( model.getType() ).add( model );
+ }
+
+ request.setToolchains( groupedToolchains );
+ }
+ return request;
+ }
+
+ @Override
+ public MavenExecutionRequest populateDefaults( MavenExecutionRequest request )
+ throws MavenExecutionRequestPopulationException
+ {
+ baseDirectory( request );
+
+ localRepository( request );
+
+ populateDefaultPluginGroups( request );
+
+ injectDefaultRepositories( request );
+
+ injectDefaultPluginRepositories( request );
+
+ return request;
+ }
+
+ //
+ //
+ //
+
+ private void populateDefaultPluginGroups( MavenExecutionRequest request )
+ {
+ request.addPluginGroup( "org.apache.maven.plugins" );
+ request.addPluginGroup( "org.codehaus.mojo" );
+ }
+
+ private void injectDefaultRepositories( MavenExecutionRequest request )
+ throws MavenExecutionRequestPopulationException
+ {
+ Set<String> definedRepositories = repositorySystem.getRepoIds( request.getRemoteRepositories() );
+
+ if ( !definedRepositories.contains( RepositorySystem.DEFAULT_REMOTE_REPO_ID ) )
+ {
+ try
+ {
+ request.addRemoteRepository( repositorySystem.createDefaultRemoteRepository( request ) );
+ }
+ catch ( Exception e )
+ {
+ throw new MavenExecutionRequestPopulationException( "Cannot create default remote repository.", e );
+ }
+ }
+ }
+
+ private void injectDefaultPluginRepositories( MavenExecutionRequest request )
+ throws MavenExecutionRequestPopulationException
+ {
+ Set<String> definedRepositories = repositorySystem.getRepoIds( request.getPluginArtifactRepositories() );
+
+ if ( !definedRepositories.contains( RepositorySystem.DEFAULT_REMOTE_REPO_ID ) )
+ {
+ try
+ {
+ request.addPluginArtifactRepository( repositorySystem.createDefaultRemoteRepository( request ) );
+ }
+ catch ( Exception e )
+ {
+ throw new MavenExecutionRequestPopulationException( "Cannot create default remote repository.", e );
+ }
+ }
+ }
+
+ private void localRepository( MavenExecutionRequest request )
+ throws MavenExecutionRequestPopulationException
+ {
+ // ------------------------------------------------------------------------
+ // Local Repository
+ //
+ // 1. Use a value has been passed in via the configuration
+ // 2. Use value in the resultant settings
+ // 3. Use default value
+ // ------------------------------------------------------------------------
+
+ if ( request.getLocalRepository() == null )
+ {
+ request.setLocalRepository( createLocalRepository( request ) );
+ }
+
+ if ( request.getLocalRepositoryPath() == null )
+ {
+ request.setLocalRepositoryPath( new File( request.getLocalRepository().getBasedir() ).getAbsoluteFile() );
+ }
+ }
+
+ // ------------------------------------------------------------------------
+ // Artifact Transfer Mechanism
+ // ------------------------------------------------------------------------
+
+ private ArtifactRepository createLocalRepository( MavenExecutionRequest request )
+ throws MavenExecutionRequestPopulationException
+ {
+ String localRepositoryPath = null;
+
+ if ( request.getLocalRepositoryPath() != null )
+ {
+ localRepositoryPath = request.getLocalRepositoryPath().getAbsolutePath();
+ }
+
+ if ( StringUtils.isEmpty( localRepositoryPath ) )
+ {
+ localRepositoryPath = RepositorySystem.defaultUserLocalRepository.getAbsolutePath();
+ }
+
+ try
+ {
+ return repositorySystem.createLocalRepository( request, new File( localRepositoryPath ) );
+ }
+ catch ( Exception e )
+ {
+ throw new MavenExecutionRequestPopulationException( "Cannot create local repository.", e );
+ }
+ }
+
+ private void baseDirectory( MavenExecutionRequest request )
+ {
+ if ( request.getBaseDirectory() == null && request.getPom() != null )
+ {
+ request.setBaseDirectory( request.getPom().getAbsoluteFile().getParentFile() );
+ }
+ }
+
+ /*if_not[MAVEN4]*/
+
+ @Override
+ @Deprecated
+ public MavenExecutionRequest populateFromSettings( MavenExecutionRequest request, Settings settings )
+ throws MavenExecutionRequestPopulationException
+ {
+ if ( settings == null )
+ {
+ return request;
+ }
+
+ request.setOffline( settings.isOffline() );
+
+ request.setInteractiveMode( settings.isInteractiveMode() );
+
+ request.setPluginGroups( settings.getPluginGroups() );
+
+ request.setLocalRepositoryPath( settings.getLocalRepository() );
+
+ for ( Server server : settings.getServers() )
+ {
+ server = server.clone();
+
+ request.addServer( server );
+ }
+
+ // <proxies>
+ // <proxy>
+ // <active>true</active>
+ // <protocol>http</protocol>
+ // <host>proxy.somewhere.com</host>
+ // <port>8080</port>
+ // <username>proxyuser</username>
+ // <password>somepassword</password>
+ // <nonProxyHosts>www.google.com|*.somewhere.com</nonProxyHosts>
+ // </proxy>
+ // </proxies>
+
+ for ( Proxy proxy : settings.getProxies() )
+ {
+ if ( !proxy.isActive() )
+ {
+ continue;
+ }
+
+ proxy = proxy.clone();
+
+ request.addProxy( proxy );
+ }
+
+ // <mirrors>
+ // <mirror>
+ // <id>nexus</id>
+ // <mirrorOf>*</mirrorOf>
+ // <url>http://repository.sonatype.org/content/groups/public</url>
+ // </mirror>
+ // </mirrors>
+
+ for ( Mirror mirror : settings.getMirrors() )
+ {
+ mirror = mirror.clone();
+
+ request.addMirror( mirror );
+ }
+
+ request.setActiveProfiles( settings.getActiveProfiles() );
+
+ for ( org.apache.maven.settings.Profile rawProfile : settings.getProfiles() )
+ {
+ request.addProfile( SettingsUtils.convertFromSettingsProfile( rawProfile ) );
+
+ if ( settings.getActiveProfiles().contains( rawProfile.getId() ) )
+ {
+ List<Repository> remoteRepositories = rawProfile.getRepositories();
+ for ( Repository remoteRepository : remoteRepositories )
+ {
+ try
+ {
+ request.addRemoteRepository( repositorySystem.buildArtifactRepository( remoteRepository ) );
+ }
+ catch ( InvalidRepositoryException e )
+ {
+ // do nothing for now
+ }
+ }
+
+ List<Repository> pluginRepositories = rawProfile.getPluginRepositories();
+ for ( Repository pluginRepo : pluginRepositories )
+ {
+ try
+ {
+ request.addPluginArtifactRepository( repositorySystem.buildArtifactRepository( pluginRepo ) );
+ }
+ catch ( InvalidRepositoryException e )
+ {
+ // do nothing for now
+ }
+ }
+ }
+ }
+
+ return request;
+ }
+
+ /*end[MAVEN4]*/
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionResult.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionResult.java
new file mode 100644
index 00000000..a8967eda
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionResult.java
@@ -0,0 +1,109 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+import java.util.IdentityHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.apache.maven.project.DependencyResolutionResult;
+import org.apache.maven.project.MavenProject;
+
+/** @author Jason van Zyl */
+public class DefaultMavenExecutionResult
+ implements MavenExecutionResult
+{
+ private MavenProject project;
+
+ private List<MavenProject> topologicallySortedProjects = Collections.emptyList();
+
+ private DependencyResolutionResult dependencyResolutionResult;
+
+ private final List<Throwable> exceptions = new CopyOnWriteArrayList<Throwable>();
+
+ private final Map<MavenProject, BuildSummary> buildSummaries =
+ Collections.synchronizedMap( new IdentityHashMap<MavenProject, BuildSummary>() );
+
+ public MavenExecutionResult setProject( MavenProject project )
+ {
+ this.project = project;
+
+ return this;
+ }
+
+ public MavenProject getProject()
+ {
+ return project;
+ }
+
+ public MavenExecutionResult setTopologicallySortedProjects( List<MavenProject> topologicallySortedProjects )
+ {
+ this.topologicallySortedProjects = topologicallySortedProjects;
+
+ return this;
+ }
+
+ public List<MavenProject> getTopologicallySortedProjects()
+ {
+ return null == topologicallySortedProjects ? Collections.<MavenProject>emptyList()
+ : topologicallySortedProjects;
+ }
+
+ public DependencyResolutionResult getDependencyResolutionResult()
+ {
+ return dependencyResolutionResult;
+ }
+
+ public MavenExecutionResult setDependencyResolutionResult( DependencyResolutionResult dependencyResolutionResult )
+ {
+ this.dependencyResolutionResult = dependencyResolutionResult;
+
+ return this;
+ }
+
+ public List<Throwable> getExceptions()
+ {
+ return exceptions;
+ }
+
+ public MavenExecutionResult addException( Throwable t )
+ {
+ exceptions.add( t );
+
+ return this;
+ }
+
+ public boolean hasExceptions()
+ {
+ return !getExceptions().isEmpty();
+ }
+
+ public BuildSummary getBuildSummary( MavenProject project )
+ {
+ return buildSummaries.get( project );
+ }
+
+ public void addBuildSummary( BuildSummary summary )
+ {
+ buildSummaries.put( summary.getProject(), summary );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ExecutionEvent.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ExecutionEvent.java
new file mode 100644
index 00000000..0ee7f57a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ExecutionEvent.java
@@ -0,0 +1,92 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Holds data relevant for an execution event.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ExecutionEvent
+{
+
+ /**
+ * The possible types of execution events.
+ */
+ enum Type
+ {
+ ProjectDiscoveryStarted,
+ SessionStarted,
+ SessionEnded,
+ ProjectSkipped,
+ ProjectStarted,
+ ProjectSucceeded,
+ ProjectFailed,
+ MojoSkipped,
+ MojoStarted,
+ MojoSucceeded,
+ MojoFailed,
+ ForkStarted,
+ ForkSucceeded,
+ ForkFailed,
+ ForkedProjectStarted,
+ ForkedProjectSucceeded,
+ ForkedProjectFailed,
+ }
+
+ /**
+ * Gets the type of the event.
+ *
+ * @return The type of the event, never {@code null}.
+ */
+ Type getType();
+
+ /**
+ * Gets the session from which this event originates.
+ *
+ * @return The current session, never {@code null}.
+ */
+ MavenSession getSession();
+
+ /**
+ * Gets the current project (if any).
+ *
+ * @return The current project or {@code null} if not applicable.
+ */
+ MavenProject getProject();
+
+ /**
+ * Gets the current mojo execution (if any).
+ *
+ * @return The current mojo execution or {@code null} if not applicable.
+ */
+ MojoExecution getMojoExecution();
+
+ /**
+ * Gets the exception that caused the event (if any).
+ *
+ * @return The exception or {@code null} if none.
+ */
+ Exception getException();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ExecutionListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ExecutionListener.java
new file mode 100644
index 00000000..ad3f345a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ExecutionListener.java
@@ -0,0 +1,66 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Defines events that Maven fires during a build. <strong>Warning:</strong> This interface might be extended in future
+ * Maven versions to support further events. Hence it is strongly recommended to derive custom listeners from
+ * {@link AbstractExecutionListener} in order to avoid interoperability problems.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ExecutionListener
+{
+
+ void projectDiscoveryStarted( ExecutionEvent event );
+
+ void sessionStarted( ExecutionEvent event );
+
+ void sessionEnded( ExecutionEvent event );
+
+ void projectSkipped( ExecutionEvent event );
+
+ void projectStarted( ExecutionEvent event );
+
+ void projectSucceeded( ExecutionEvent event );
+
+ void projectFailed( ExecutionEvent event );
+
+ void mojoSkipped( ExecutionEvent event );
+
+ void mojoStarted( ExecutionEvent event );
+
+ void mojoSucceeded( ExecutionEvent event );
+
+ void mojoFailed( ExecutionEvent event );
+
+ void forkStarted( ExecutionEvent event );
+
+ void forkSucceeded( ExecutionEvent event );
+
+ void forkFailed( ExecutionEvent event );
+
+ void forkedProjectStarted( ExecutionEvent event );
+
+ void forkedProjectSucceeded( ExecutionEvent event );
+
+ void forkedProjectFailed( ExecutionEvent event );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
new file mode 100644
index 00000000..53f84c50
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
@@ -0,0 +1,443 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.eventspy.internal.EventSpyDispatcher;
+import org.apache.maven.model.Profile;
+import org.apache.maven.project.ProjectBuildingRequest;
+//
+// These settings values need to be removed and pushed down into a provider of configuration information
+//
+import org.apache.maven.settings.Mirror;
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Server;
+//
+import org.apache.maven.toolchain.model.ToolchainModel;
+import org.codehaus.plexus.logging.Logger;
+import org.eclipse.aether.RepositoryCache;
+import org.eclipse.aether.repository.WorkspaceReader;
+import org.eclipse.aether.transfer.TransferListener;
+
+/**
+ * @author Jason van Zyl
+ */
+public interface MavenExecutionRequest
+{
+ // ----------------------------------------------------------------------
+ // Logging
+ // ----------------------------------------------------------------------
+
+ int LOGGING_LEVEL_DEBUG = Logger.LEVEL_DEBUG;
+
+ int LOGGING_LEVEL_INFO = Logger.LEVEL_INFO;
+
+ int LOGGING_LEVEL_WARN = Logger.LEVEL_WARN;
+
+ int LOGGING_LEVEL_ERROR = Logger.LEVEL_ERROR;
+
+ int LOGGING_LEVEL_FATAL = Logger.LEVEL_FATAL;
+
+ int LOGGING_LEVEL_DISABLED = Logger.LEVEL_DISABLED;
+
+ // ----------------------------------------------------------------------
+ // Reactor Failure Mode
+ // ----------------------------------------------------------------------
+
+ String REACTOR_FAIL_FAST = "FAIL_FAST";
+
+ String REACTOR_FAIL_AT_END = "FAIL_AT_END";
+
+ String REACTOR_FAIL_NEVER = "FAIL_NEVER";
+
+ // ----------------------------------------------------------------------
+ // Reactor Make Mode
+ // ----------------------------------------------------------------------
+
+ String REACTOR_MAKE_UPSTREAM = "make-upstream";
+
+ String REACTOR_MAKE_DOWNSTREAM = "make-downstream";
+
+ String REACTOR_MAKE_BOTH = "make-both";
+
+ // ----------------------------------------------------------------------
+ // Artifact repository policies
+ // ----------------------------------------------------------------------
+
+ String CHECKSUM_POLICY_FAIL = ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL;
+
+ String CHECKSUM_POLICY_WARN = ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN;
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ // Base directory
+ MavenExecutionRequest setBaseDirectory( File basedir );
+
+ String getBaseDirectory();
+
+ // Timing (remove this)
+ MavenExecutionRequest setStartTime( Date start );
+
+ Date getStartTime();
+
+ // Goals
+ MavenExecutionRequest setGoals( List<String> goals );
+
+ List<String> getGoals();
+
+ // Properties
+
+ /**
+ * Sets the system properties to use for interpolation and profile activation. The system properties are collected
+ * from the runtime environment like {@link System#getProperties()} and environment variables.
+ *
+ * @param systemProperties The system properties, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ MavenExecutionRequest setSystemProperties( Properties systemProperties );
+
+ /**
+ * Gets the system properties to use for interpolation and profile activation. The system properties are collected
+ * from the runtime environment like {@link System#getProperties()} and environment variables.
+ *
+ * @return The system properties, never {@code null}.
+ */
+ Properties getSystemProperties();
+
+ /**
+ * Sets the user properties to use for interpolation and profile activation. The user properties have been
+ * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
+ * line.
+ *
+ * @param userProperties The user properties, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ MavenExecutionRequest setUserProperties( Properties userProperties );
+
+ /**
+ * Gets the user properties to use for interpolation and profile activation. The user properties have been
+ * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
+ * line.
+ *
+ * @return The user properties, never {@code null}.
+ */
+ Properties getUserProperties();
+
+ // Reactor
+ MavenExecutionRequest setReactorFailureBehavior( String failureBehavior );
+
+ String getReactorFailureBehavior();
+
+ MavenExecutionRequest setSelectedProjects( List<String> projects );
+
+ List<String> getSelectedProjects();
+
+ /**
+ * @param projects the projects to exclude
+ * @return this MavenExecutionRequest
+ * @since 3.2
+ */
+ MavenExecutionRequest setExcludedProjects( List<String> projects );
+
+ /**
+ * @return the excluded projects, never {@code null}
+ * @since 3.2
+ */
+ List<String> getExcludedProjects();
+
+ MavenExecutionRequest setResumeFrom( String project );
+
+ String getResumeFrom();
+
+ MavenExecutionRequest setMakeBehavior( String makeBehavior );
+
+ String getMakeBehavior();
+
+ /**
+ * Set's the parallel degree of concurrency used by the build.
+ *
+ * @param degreeOfConcurrency
+ */
+ void setDegreeOfConcurrency( int degreeOfConcurrency );
+
+ /**
+ * @return the degree of concurrency for the build.
+ */
+ int getDegreeOfConcurrency();
+
+ // Recursive (really to just process the top-level POM)
+ MavenExecutionRequest setRecursive( boolean recursive );
+
+ boolean isRecursive();
+
+ MavenExecutionRequest setPom( File pom );
+
+ File getPom();
+
+ // Errors
+ MavenExecutionRequest setShowErrors( boolean showErrors );
+
+ boolean isShowErrors();
+
+ // Transfer listeners
+ MavenExecutionRequest setTransferListener( TransferListener transferListener );
+
+ TransferListener getTransferListener();
+
+ // Logging
+ MavenExecutionRequest setLoggingLevel( int loggingLevel );
+
+ int getLoggingLevel();
+
+ // Update snapshots
+ MavenExecutionRequest setUpdateSnapshots( boolean updateSnapshots );
+
+ boolean isUpdateSnapshots();
+
+ MavenExecutionRequest setNoSnapshotUpdates( boolean noSnapshotUpdates );
+
+ boolean isNoSnapshotUpdates();
+
+ // Checksum policy
+ MavenExecutionRequest setGlobalChecksumPolicy( String globalChecksumPolicy );
+
+ String getGlobalChecksumPolicy();
+
+ // Local repository
+ MavenExecutionRequest setLocalRepositoryPath( String localRepository );
+
+ MavenExecutionRequest setLocalRepositoryPath( File localRepository );
+
+ File getLocalRepositoryPath();
+
+ MavenExecutionRequest setLocalRepository( ArtifactRepository repository );
+
+ ArtifactRepository getLocalRepository();
+
+ // Interactive
+ MavenExecutionRequest setInteractiveMode( boolean interactive );
+
+ boolean isInteractiveMode();
+
+ // Offline
+ MavenExecutionRequest setOffline( boolean offline );
+
+ boolean isOffline();
+
+ boolean isCacheTransferError();
+
+ MavenExecutionRequest setCacheTransferError( boolean cacheTransferError );
+
+ boolean isCacheNotFound();
+
+ MavenExecutionRequest setCacheNotFound( boolean cacheNotFound );
+
+ // Profiles
+ List<Profile> getProfiles();
+
+ MavenExecutionRequest addProfile( Profile profile );
+
+ MavenExecutionRequest setProfiles( List<Profile> profiles );
+
+ MavenExecutionRequest addActiveProfile( String profile );
+
+ MavenExecutionRequest addActiveProfiles( List<String> profiles );
+
+ MavenExecutionRequest setActiveProfiles( List<String> profiles );
+
+ List<String> getActiveProfiles();
+
+ MavenExecutionRequest addInactiveProfile( String profile );
+
+ MavenExecutionRequest addInactiveProfiles( List<String> profiles );
+
+ MavenExecutionRequest setInactiveProfiles( List<String> profiles );
+
+ List<String> getInactiveProfiles();
+
+ // Proxies
+ List<Proxy> getProxies();
+
+ MavenExecutionRequest setProxies( List<Proxy> proxies );
+
+ MavenExecutionRequest addProxy( Proxy proxy );
+
+ // Servers
+ List<Server> getServers();
+
+ MavenExecutionRequest setServers( List<Server> servers );
+
+ MavenExecutionRequest addServer( Server server );
+
+ // Mirrors
+ List<Mirror> getMirrors();
+
+ MavenExecutionRequest setMirrors( List<Mirror> mirrors );
+
+ MavenExecutionRequest addMirror( Mirror mirror );
+
+ // Plugin groups
+ List<String> getPluginGroups();
+
+ MavenExecutionRequest setPluginGroups( List<String> pluginGroups );
+
+ MavenExecutionRequest addPluginGroup( String pluginGroup );
+
+ MavenExecutionRequest addPluginGroups( List<String> pluginGroups );
+
+ boolean isProjectPresent();
+
+ MavenExecutionRequest setProjectPresent( boolean isProjectPresent );
+
+ File getUserSettingsFile();
+
+ MavenExecutionRequest setUserSettingsFile( File userSettingsFile );
+
+ File getGlobalSettingsFile();
+
+ MavenExecutionRequest setGlobalSettingsFile( File globalSettingsFile );
+
+ MavenExecutionRequest addRemoteRepository( ArtifactRepository repository );
+
+ MavenExecutionRequest addPluginArtifactRepository( ArtifactRepository repository );
+
+ /**
+ * Set a new list of remote repositories to use the execution request. This is necessary if you perform
+ * transformations on the remote repositories being used. For example if you replace existing repositories with
+ * mirrors then it's easier to just replace the whole list with a new list of transformed repositories.
+ *
+ * @param repositories
+ * @return This request, never {@code null}.
+ */
+ MavenExecutionRequest setRemoteRepositories( List<ArtifactRepository> repositories );
+
+ List<ArtifactRepository> getRemoteRepositories();
+
+ MavenExecutionRequest setPluginArtifactRepositories( List<ArtifactRepository> repositories );
+
+ List<ArtifactRepository> getPluginArtifactRepositories();
+
+ MavenExecutionRequest setRepositoryCache( RepositoryCache repositoryCache );
+
+ RepositoryCache getRepositoryCache();
+
+ WorkspaceReader getWorkspaceReader();
+
+ MavenExecutionRequest setWorkspaceReader( WorkspaceReader workspaceReader );
+
+ File getUserToolchainsFile();
+
+ MavenExecutionRequest setUserToolchainsFile( File userToolchainsFile );
+
+ /**
+ *
+ *
+ * @return the global toolchains file
+ * @since 3.3.0
+ */
+ File getGlobalToolchainsFile();
+
+ /**
+ *
+ * @param globalToolchainsFile the global toolchains file
+ * @return this request
+ * @since 3.3.0
+ */
+ MavenExecutionRequest setGlobalToolchainsFile( File globalToolchainsFile );
+
+ ExecutionListener getExecutionListener();
+
+ MavenExecutionRequest setExecutionListener( ExecutionListener executionListener );
+
+ ProjectBuildingRequest getProjectBuildingRequest();
+
+ /**
+ * @since 3.1
+ */
+ boolean isUseLegacyLocalRepository();
+
+ /**
+ * @since 3.1
+ */
+ MavenExecutionRequest setUseLegacyLocalRepository( boolean useLegacyLocalRepository );
+
+ /**
+ * Controls the {@link Builder} used by Maven by specification of the builder's id.
+ *
+ * @since 3.2.0
+ */
+ MavenExecutionRequest setBuilderId( String builderId );
+
+ /**
+ * Controls the {@link Builder} used by Maven by specification of the builders id.
+ *
+ * @since 3.2.0
+ */
+ String getBuilderId();
+
+ /**
+ *
+ * @param toolchains all toolchains grouped by type
+ * @return this request
+ * @since 3.3.0
+ */
+ MavenExecutionRequest setToolchains( Map<String, List<ToolchainModel>> toolchains );
+
+ /**
+ *
+ * @return all toolchains grouped by type, never {@code null}
+ * @since 3.3.0
+ */
+ Map<String, List<ToolchainModel>> getToolchains();
+
+ /**
+ * @since 3.3.0
+ */
+ void setMultiModuleProjectDirectory( File file );
+
+ /**
+ * @since 3.3.0
+ */
+ File getMultiModuleProjectDirectory();
+
+ /**
+ * @since 3.3.0
+ */
+ MavenExecutionRequest setEventSpyDispatcher( EventSpyDispatcher eventSpyDispatcher );
+
+ /**
+ * @since 3.3.0
+ */
+ EventSpyDispatcher getEventSpyDispatcher();
+
+ /**
+ * @since 3.3.0
+ */
+ Map<String, Object> getData();
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequestPopulationException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequestPopulationException.java
new file mode 100644
index 00000000..ddd6ad22
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequestPopulationException.java
@@ -0,0 +1,43 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author Jason van Zyl
+ */
+public class MavenExecutionRequestPopulationException
+ extends Exception
+{
+ public MavenExecutionRequestPopulationException( String message )
+ {
+ super( message );
+ }
+
+ public MavenExecutionRequestPopulationException( Throwable cause )
+ {
+ super( cause );
+ }
+
+ public MavenExecutionRequestPopulationException( String message,
+ Throwable cause )
+ {
+ super( message, cause );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequestPopulator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequestPopulator.java
new file mode 100644
index 00000000..4f254f7a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequestPopulator.java
@@ -0,0 +1,74 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.settings.Settings;
+import org.apache.maven.toolchain.model.PersistedToolchains;
+
+/**
+ * Assists in populating an execution request for invocation of Maven.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface MavenExecutionRequestPopulator
+{
+ /**
+ * Copies the values from the given toolchains into the specified execution request. This method will replace any
+ * existing values in the execution request that are controlled by the toolchains. Hence, it is expected that this
+ * method is called on a new/empty execution request before the caller mutates it to fit its needs.
+ *
+ * @param request The execution request to populate, must not be {@code null}.
+ * @param toolchains The toolchains to copy into the execution request, may be {@code null}.
+ * @return The populated execution request, never {@code null}.
+ * @throws MavenExecutionRequestPopulationException If the execution request could not be populated.
+ * @since 3.3.0
+ */
+ MavenExecutionRequest populateFromToolchains( MavenExecutionRequest request, PersistedToolchains toolchains )
+ throws MavenExecutionRequestPopulationException;
+
+ /**
+ * Injects default values like plugin groups or repositories into the specified execution request.
+ *
+ * @param request The execution request to populate, must not be {@code null}.
+ * @return The populated execution request, never {@code null}.
+ * @throws MavenExecutionRequestPopulationException If the execution request could not be populated.
+ */
+ MavenExecutionRequest populateDefaults( MavenExecutionRequest request )
+ throws MavenExecutionRequestPopulationException;
+
+ /*if_not[MAVEN4]*/
+
+ /**
+ * Copies the values from the given settings into the specified execution request. This method will replace any
+ * existing values in the execution request that are controlled by the settings. Hence, it is expected that this
+ * method is called on a new/empty execution request before the caller mutates it to fit its needs.
+ *
+ * @param request The execution request to populate, must not be {@code null}.
+ * @param settings The settings to copy into the execution request, may be {@code null}.
+ * @return The populated execution request, never {@code null}.
+ * @throws MavenExecutionRequestPopulationException If the execution request could not be populated.
+ */
+ @Deprecated
+ MavenExecutionRequest populateFromSettings( MavenExecutionRequest request, Settings settings )
+ throws MavenExecutionRequestPopulationException;
+
+ /*end[MAVEN4]*/
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionResult.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionResult.java
new file mode 100644
index 00000000..cb95fb1f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionResult.java
@@ -0,0 +1,70 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.project.DependencyResolutionResult;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * @author Jason van Zyl
+ */
+public interface MavenExecutionResult
+{
+ MavenExecutionResult setProject( MavenProject project );
+ MavenProject getProject();
+
+ MavenExecutionResult setTopologicallySortedProjects( List<MavenProject> projects );
+
+ /**
+ * @return the sorted list, or an empty list if there are no projects.
+ */
+ List<MavenProject> getTopologicallySortedProjects();
+
+ MavenExecutionResult setDependencyResolutionResult( DependencyResolutionResult result );
+ DependencyResolutionResult getDependencyResolutionResult();
+
+ // for each exception
+ // - knowing what artifacts are missing
+ // - project building exception
+ // - invalid project model exception: list of markers
+ // - xmlpull parser exception
+ List<Throwable> getExceptions();
+
+ MavenExecutionResult addException( Throwable e );
+
+ boolean hasExceptions();
+
+ /**
+ * Gets the build summary for the specified project.
+ *
+ * @param project The project to get the build summary for, must not be {@code null}.
+ * @return The build summary for the project or {@code null} if the project has not been built (yet).
+ */
+ BuildSummary getBuildSummary( MavenProject project );
+
+ /**
+ * Add the specified build summary.
+ *
+ * @param summary The build summary to add, must not be {@code null}.
+ */
+ void addBuildSummary( BuildSummary summary );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
new file mode 100644
index 00000000..235691ac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
@@ -0,0 +1,438 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.RepositoryCache;
+import org.apache.maven.monitor.event.EventDispatcher;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.settings.Settings;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.eclipse.aether.RepositorySystemSession;
+
+/**
+ * @author Jason van Zyl
+ */
+public class MavenSession
+ implements Cloneable
+{
+ private MavenExecutionRequest request;
+
+ private MavenExecutionResult result;
+
+ private RepositorySystemSession repositorySession;
+
+ private Properties executionProperties;
+
+ private MavenProject currentProject;
+
+ /**
+ * These projects have already been topologically sorted in the {@link org.apache.maven.Maven} component before
+ * being passed into the session. This is also the potentially constrained set of projects by using --projects
+ * on the command line.
+ */
+ private List<MavenProject> projects;
+
+ /**
+ * The full set of projects before any potential constraining by --projects. Useful in the case where you want to
+ * build a smaller set of projects but perform other operations in the context of your reactor.
+ */
+ private List<MavenProject> allProjects;
+
+ private MavenProject topLevelProject;
+
+ private ProjectDependencyGraph projectDependencyGraph;
+
+ private boolean parallel;
+
+ private final Map<String, Map<String, Map<String, Object>>> pluginContextsByProjectAndPluginKey =
+ new ConcurrentHashMap<String, Map<String, Map<String, Object>>>();
+
+
+ public void setProjects( List<MavenProject> projects )
+ {
+ if ( !projects.isEmpty() )
+ {
+ this.currentProject = projects.get( 0 );
+ this.topLevelProject = currentProject;
+ for ( MavenProject project : projects )
+ {
+ if ( project.isExecutionRoot() )
+ {
+ topLevelProject = project;
+ break;
+ }
+ }
+ }
+ else
+ {
+ this.currentProject = null;
+ this.topLevelProject = null;
+ }
+ this.projects = projects;
+ }
+
+ public ArtifactRepository getLocalRepository()
+ {
+ return request.getLocalRepository();
+ }
+
+ public List<String> getGoals()
+ {
+ return request.getGoals();
+ }
+
+ /**
+ * Gets the user properties to use for interpolation and profile activation. The user properties have been
+ * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
+ * line.
+ *
+ * @return The user properties, never {@code null}.
+ */
+ public Properties getUserProperties()
+ {
+ return request.getUserProperties();
+ }
+
+ /**
+ * Gets the system properties to use for interpolation and profile activation. The system properties are collected
+ * from the runtime environment like {@link System#getProperties()} and environment variables.
+ *
+ * @return The system properties, never {@code null}.
+ */
+ public Properties getSystemProperties()
+ {
+ return request.getSystemProperties();
+ }
+
+ public Settings getSettings()
+ {
+ return settings;
+ }
+
+ public List<MavenProject> getProjects()
+ {
+ return projects;
+ }
+
+ public String getExecutionRootDirectory()
+ {
+ return request.getBaseDirectory();
+ }
+
+ public MavenExecutionRequest getRequest()
+ {
+ return request;
+ }
+
+ public void setCurrentProject( MavenProject currentProject )
+ {
+ this.currentProject = currentProject;
+ }
+
+ public MavenProject getCurrentProject()
+ {
+ return currentProject;
+ }
+
+ public ProjectBuildingRequest getProjectBuildingRequest()
+ {
+ return request.getProjectBuildingRequest().setRepositorySession( getRepositorySession() );
+ }
+
+ public List<String> getPluginGroups()
+ {
+ return request.getPluginGroups();
+ }
+
+ public boolean isOffline()
+ {
+ return request.isOffline();
+ }
+
+ public MavenProject getTopLevelProject()
+ {
+ return topLevelProject;
+ }
+
+ public MavenExecutionResult getResult()
+ {
+ return result;
+ }
+
+ // Backward compat
+
+ public Map<String, Object> getPluginContext( PluginDescriptor plugin, MavenProject project )
+ {
+ String projectKey = project.getId();
+
+ Map<String, Map<String, Object>> pluginContextsByKey = pluginContextsByProjectAndPluginKey.get( projectKey );
+
+ if ( pluginContextsByKey == null )
+ {
+ pluginContextsByKey = new ConcurrentHashMap<String, Map<String, Object>>();
+
+ pluginContextsByProjectAndPluginKey.put( projectKey, pluginContextsByKey );
+ }
+
+ String pluginKey = plugin.getPluginLookupKey();
+
+ Map<String, Object> pluginContext = pluginContextsByKey.get( pluginKey );
+
+ if ( pluginContext == null )
+ {
+ pluginContext = new ConcurrentHashMap<String, Object>();
+
+ pluginContextsByKey.put( pluginKey, pluginContext );
+ }
+
+ return pluginContext;
+ }
+
+ public ProjectDependencyGraph getProjectDependencyGraph()
+ {
+ return projectDependencyGraph;
+ }
+
+ public void setProjectDependencyGraph( ProjectDependencyGraph projectDependencyGraph )
+ {
+ this.projectDependencyGraph = projectDependencyGraph;
+ }
+
+ public String getReactorFailureBehavior()
+ {
+ return request.getReactorFailureBehavior();
+ }
+
+ @Override
+ public MavenSession clone()
+ {
+ try
+ {
+ return (MavenSession) super.clone();
+ }
+ catch ( CloneNotSupportedException e )
+ {
+ throw new RuntimeException( "Bug", e );
+ }
+ }
+
+ public Date getStartTime()
+ {
+ return request.getStartTime();
+ }
+
+ public boolean isParallel()
+ {
+ return parallel;
+ }
+
+ public void setParallel( boolean parallel )
+ {
+ this.parallel = parallel;
+ }
+
+ public RepositorySystemSession getRepositorySession()
+ {
+ return repositorySession;
+ }
+
+ private Map<String, MavenProject> projectMap;
+
+ public void setProjectMap( Map<String, MavenProject> projectMap )
+ {
+ this.projectMap = projectMap;
+ }
+
+ /** This is a provisional method and may be removed */
+ public List<MavenProject> getAllProjects()
+ {
+ return allProjects;
+ }
+
+ /** This is a provisional method and may be removed */
+ public void setAllProjects( List<MavenProject> allProjects )
+ {
+ this.allProjects = allProjects;
+ }
+
+ /*if_not[MAVEN4]*/
+
+ //
+ // Deprecated
+ //
+
+ private PlexusContainer container;
+
+ private final Settings settings;
+
+ @Deprecated
+ /** @deprecated This appears to only be used in the ReactorReader and we can do any processing required there */
+ public Map<String, MavenProject> getProjectMap()
+ {
+ return projectMap;
+ }
+
+ @Deprecated
+ public MavenSession( PlexusContainer container, RepositorySystemSession repositorySession,
+ MavenExecutionRequest request, MavenExecutionResult result )
+ {
+ this.container = container;
+ this.request = request;
+ this.result = result;
+ this.settings = new SettingsAdapter( request );
+ this.repositorySession = repositorySession;
+ }
+
+ @Deprecated
+ public MavenSession( PlexusContainer container, MavenExecutionRequest request, MavenExecutionResult result,
+ MavenProject project )
+ {
+ this( container, request, result, Arrays.asList( new MavenProject[]{project} ) );
+ }
+
+ @Deprecated
+ public MavenSession( PlexusContainer container, Settings settings, ArtifactRepository localRepository,
+ EventDispatcher eventDispatcher, ReactorManager unused, List<String> goals,
+ String executionRootDir, Properties executionProperties, Date startTime )
+ {
+ this( container, settings, localRepository, eventDispatcher, unused, goals, executionRootDir,
+ executionProperties, null, startTime );
+ }
+
+ @Deprecated
+ public MavenSession( PlexusContainer container, Settings settings, ArtifactRepository localRepository,
+ EventDispatcher eventDispatcher, ReactorManager unused, List<String> goals,
+ String executionRootDir, Properties executionProperties, Properties userProperties,
+ Date startTime )
+ {
+ this.container = container;
+ this.settings = settings;
+ this.executionProperties = executionProperties;
+ this.request = new DefaultMavenExecutionRequest();
+ this.request.setUserProperties( userProperties );
+ this.request.setLocalRepository( localRepository );
+ this.request.setGoals( goals );
+ this.request.setBaseDirectory( ( executionRootDir != null ) ? new File( executionRootDir ) : null );
+ this.request.setStartTime( startTime );
+ }
+
+ @Deprecated
+ public MavenSession( PlexusContainer container, MavenExecutionRequest request, MavenExecutionResult result,
+ List<MavenProject> projects )
+ {
+ this.container = container;
+ this.request = request;
+ this.result = result;
+ this.settings = new SettingsAdapter( request );
+ setProjects( projects );
+ }
+
+ @Deprecated
+ public List<MavenProject> getSortedProjects()
+ {
+ return getProjects();
+ }
+
+ @Deprecated
+ //
+ // Used by Tycho and will break users and force them to upgrade to Maven 3.1 so we should really leave
+ // this here, possibly indefinitely.
+ //
+ public RepositoryCache getRepositoryCache()
+ {
+ return null;
+ }
+
+ @Deprecated
+ public EventDispatcher getEventDispatcher()
+ {
+ return null;
+ }
+
+ @Deprecated
+ public boolean isUsingPOMsFromFilesystem()
+ {
+ return request.isProjectPresent();
+ }
+
+ /**
+ * @deprecated Use either {@link #getUserProperties()} or {@link #getSystemProperties()}.
+ */
+ @Deprecated
+ public Properties getExecutionProperties()
+ {
+ if ( executionProperties == null )
+ {
+ executionProperties = new Properties();
+ executionProperties.putAll( request.getSystemProperties() );
+ executionProperties.putAll( request.getUserProperties() );
+ }
+
+ return executionProperties;
+ }
+
+ @Deprecated
+ public PlexusContainer getContainer()
+ {
+ return container;
+ }
+
+ @Deprecated
+ public Object lookup( String role )
+ throws ComponentLookupException
+ {
+ return container.lookup( role );
+ }
+
+ @Deprecated
+ public Object lookup( String role, String roleHint )
+ throws ComponentLookupException
+ {
+ return container.lookup( role, roleHint );
+ }
+
+ @Deprecated
+ public List<Object> lookupList( String role )
+ throws ComponentLookupException
+ {
+ return container.lookupList( role );
+ }
+
+ @Deprecated
+ public Map<String, Object> lookupMap( String role )
+ throws ComponentLookupException
+ {
+ return container.lookupMap( role );
+ }
+
+ /*end[MAVEN4]*/
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionEvent.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionEvent.java
new file mode 100644
index 00000000..a8d293d1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionEvent.java
@@ -0,0 +1,86 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Encapsulates parameters of MojoExecutionListener callback methods and is meant to provide API evolution path should
+ * it become necessary to introduce new parameters in the existing callbacks in the future.
+ *
+ * @see MojoExecutionListener
+ * @see org.apache.maven.execution.scope.WeakMojoExecutionListener
+ * @since 3.1.2
+ * @provisional This class is part of work in progress and can be changed or removed without notice.
+ */
+public class MojoExecutionEvent
+{
+ private final MavenSession session;
+
+ private final MavenProject project;
+
+ private final MojoExecution mojoExecution;
+
+ private final Mojo mojo;
+
+ private final Throwable cause;
+
+ public MojoExecutionEvent( MavenSession session, MavenProject project, MojoExecution mojoExecution, Mojo mojo )
+ {
+ this( session, project, mojoExecution, mojo, null );
+ }
+
+ public MojoExecutionEvent( MavenSession session, MavenProject project, MojoExecution mojoExecution, Mojo mojo,
+ Throwable cause )
+ {
+ this.session = session;
+ this.project = project;
+ this.mojoExecution = mojoExecution;
+ this.mojo = mojo;
+ this.cause = cause;
+ }
+
+ public MavenSession getSession()
+ {
+ return session;
+ }
+
+ public MavenProject getProject()
+ {
+ return project;
+ }
+
+ public MojoExecution getExecution()
+ {
+ return mojoExecution;
+ }
+
+ public Mojo getMojo()
+ {
+ return mojo;
+ }
+
+ public Throwable getCause()
+ {
+ return cause;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionListener.java
new file mode 100644
index 00000000..c2fb7a18
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionListener.java
@@ -0,0 +1,40 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugin.MojoExecutionException;
+
+/**
+ * Extension point that allows build extensions observe and possibly veto mojo executions.
+ *
+ * @see org.apache.maven.execution.scope.WeakMojoExecutionListener
+ * @since 3.1.2
+ * @provisional This interface is part of work in progress and can be changed or removed without notice.
+ */
+public interface MojoExecutionListener
+{
+ void beforeMojoExecution( MojoExecutionEvent event )
+ throws MojoExecutionException;
+
+ void afterMojoExecutionSuccess( MojoExecutionEvent event )
+ throws MojoExecutionException;
+
+ void afterExecutionFailure( MojoExecutionEvent event );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ProjectDependencyGraph.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ProjectDependencyGraph.java
new file mode 100644
index 00000000..1db277db
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ProjectDependencyGraph.java
@@ -0,0 +1,64 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Describes the inter-dependencies between projects in the reactor.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ProjectDependencyGraph
+{
+
+ /**
+ * Gets all projects in their intended build order, i.e. after topologically sorting the projects according to their
+ * inter-dependencies.
+ *
+ * @return The projects in the build order, never {@code null}.
+ */
+ List<MavenProject> getSortedProjects();
+
+ /**
+ * Gets the downstream projects of the specified project. A downstream project is a project that directly or
+ * indirectly depends on the given project.
+ *
+ * @param project The project whose downstream projects should be retrieved, must not be {@code null}.
+ * @param transitive A flag whether to retrieve all direct and indirect downstream projects or just the immediate
+ * downstream projects.
+ * @return The downstream projects in the build order, never {@code null}.
+ */
+ List<MavenProject> getDownstreamProjects( MavenProject project, boolean transitive );
+
+ /**
+ * Gets the upstream projects of the specified project. An upstream project is a project that directly or indirectly
+ * is a prerequisite of the given project.
+ *
+ * @param project The project whose upstream projects should be retrieved, must not be {@code null}.
+ * @param transitive A flag whether to retrieve all direct and indirect upstream projects or just the immediate
+ * upstream projects.
+ * @return The upstream projects in the build order, never {@code null}.
+ */
+ List<MavenProject> getUpstreamProjects( MavenProject project, boolean transitive );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionEvent.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionEvent.java
new file mode 100644
index 00000000..fb71078f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionEvent.java
@@ -0,0 +1,90 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Encapsulates parameters of ProjectExecutionListener callback methods and is meant to provide API evolution path
+ * should it become necessary to introduce new parameters in the existing callbacks in the future.
+ *
+ * @see ProjectExecutionListener
+ * @since 3.1.2
+ * @provisional This class is part of work in progress and can be changed or removed without notice.
+ */
+public class ProjectExecutionEvent
+{
+
+ private final MavenSession session;
+
+ private final MavenProject project;
+
+ private final List<MojoExecution> executionPlan;
+
+ private final Throwable cause;
+
+ public ProjectExecutionEvent( MavenSession session, MavenProject project )
+ {
+ this( session, project, null, null );
+ }
+
+ public ProjectExecutionEvent( MavenSession session, MavenProject project, List<MojoExecution> executionPlan )
+ {
+ this( session, project, executionPlan, null );
+ }
+
+ public ProjectExecutionEvent( MavenSession session, MavenProject project, Throwable cause )
+ {
+ this( session, project, null, cause );
+ }
+
+ public ProjectExecutionEvent( MavenSession session, MavenProject project, List<MojoExecution> executionPlan,
+ Throwable cause )
+ {
+ this.session = session;
+ this.project = project;
+ this.executionPlan = executionPlan;
+ this.cause = cause;
+ }
+
+ public MavenSession getSession()
+ {
+ return session;
+ }
+
+ public MavenProject getProject()
+ {
+ return project;
+ }
+
+ public List<MojoExecution> getExecutionPlan()
+ {
+ return executionPlan;
+ }
+
+ public Throwable getCause()
+ {
+ return cause;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionListener.java
new file mode 100644
index 00000000..d7e89183
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionListener.java
@@ -0,0 +1,44 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.lifecycle.LifecycleExecutionException;
+
+/**
+ * Extension point that allows build extensions observe and possibly veto project build execution.
+ *
+ * @see ExecutionListener
+ * @see MojoExecutionListener
+ * @since 3.1.2
+ * @provisional This interface is part of work in progress and can be changed or removed without notice.
+ */
+public interface ProjectExecutionListener
+{
+ void beforeProjectExecution( ProjectExecutionEvent event )
+ throws LifecycleExecutionException;
+
+ void beforeProjectLifecycleExecution( ProjectExecutionEvent event )
+ throws LifecycleExecutionException;
+
+ void afterProjectExecutionSuccess( ProjectExecutionEvent event )
+ throws LifecycleExecutionException;
+
+ void afterProjectExecutionFailure( ProjectExecutionEvent event );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java
new file mode 100644
index 00000000..1b99a3be
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java
@@ -0,0 +1,199 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.DuplicateProjectException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectSorter;
+import org.codehaus.plexus.util.dag.CycleDetectedException;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Deprecated
+public class ReactorManager
+{
+ public static final String FAIL_FAST = "fail-fast";
+
+ public static final String FAIL_AT_END = "fail-at-end";
+
+ public static final String FAIL_NEVER = "fail-never";
+
+ public static final String MAKE_MODE = "make";
+
+ public static final String MAKE_DEPENDENTS_MODE = "make-dependents";
+
+ // make projects that depend on me, and projects that I depend on
+ public static final String MAKE_BOTH_MODE = "make-both";
+
+ private List<String> blackList = new ArrayList<String>();
+
+ private Map<String, BuildFailure> buildFailuresByProject = new HashMap<String, BuildFailure>();
+
+ private Map pluginContextsByProjectAndPluginKey = new HashMap();
+
+ private String failureBehavior = FAIL_FAST;
+
+ private final ProjectSorter sorter;
+
+ private Map<String, BuildSuccess> buildSuccessesByProject = new HashMap<String, BuildSuccess>();
+
+ public ReactorManager( List<MavenProject> projects )
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ this.sorter = new ProjectSorter( projects );
+ }
+
+ public Map getPluginContext( PluginDescriptor plugin, MavenProject project )
+ {
+ Map pluginContextsByKey = (Map) pluginContextsByProjectAndPluginKey.get( project.getId() );
+
+ if ( pluginContextsByKey == null )
+ {
+ pluginContextsByKey = new HashMap();
+ pluginContextsByProjectAndPluginKey.put( project.getId(), pluginContextsByKey );
+ }
+
+ Map pluginContext = (Map) pluginContextsByKey.get( plugin.getPluginLookupKey() );
+
+ if ( pluginContext == null )
+ {
+ pluginContext = new HashMap();
+ pluginContextsByKey.put( plugin.getPluginLookupKey(), pluginContext );
+ }
+
+ return pluginContext;
+ }
+
+ public void setFailureBehavior( String failureBehavior )
+ {
+ if ( failureBehavior == null )
+ {
+ this.failureBehavior = FAIL_FAST; // default
+ return;
+ }
+ if ( FAIL_FAST.equals( failureBehavior ) || FAIL_AT_END.equals( failureBehavior )
+ || FAIL_NEVER.equals( failureBehavior ) )
+ {
+ this.failureBehavior = failureBehavior;
+ }
+ else
+ {
+ throw new IllegalArgumentException( "Invalid failure behavior (must be one of: \'" + FAIL_FAST + "\', \'"
+ + FAIL_AT_END + "\', \'" + FAIL_NEVER + "\')." );
+ }
+ }
+
+ public String getFailureBehavior()
+ {
+ return failureBehavior;
+ }
+
+ public void blackList( MavenProject project )
+ {
+ blackList( getProjectKey( project ) );
+ }
+
+ private void blackList( String id )
+ {
+ if ( !blackList.contains( id ) )
+ {
+ blackList.add( id );
+
+ List<String> dependents = sorter.getDependents( id );
+
+ if ( dependents != null && !dependents.isEmpty() )
+ {
+ for ( String dependentId : dependents )
+ {
+ if ( !buildSuccessesByProject.containsKey( dependentId )
+ && !buildFailuresByProject.containsKey( dependentId ) )
+ {
+ blackList( dependentId );
+ }
+ }
+ }
+ }
+ }
+
+ public boolean isBlackListed( MavenProject project )
+ {
+ return blackList.contains( getProjectKey( project ) );
+ }
+
+ private static String getProjectKey( MavenProject project )
+ {
+ return ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
+ }
+
+ public void registerBuildFailure( MavenProject project, Exception error, String task, long time )
+ {
+ buildFailuresByProject.put( getProjectKey( project ), new BuildFailure( project, time, error ) );
+ }
+
+ public boolean hasBuildFailures()
+ {
+ return !buildFailuresByProject.isEmpty();
+ }
+
+ public boolean hasBuildFailure( MavenProject project )
+ {
+ return buildFailuresByProject.containsKey( getProjectKey( project ) );
+ }
+
+ public boolean hasMultipleProjects()
+ {
+ return sorter.hasMultipleProjects();
+ }
+
+ public List<MavenProject> getSortedProjects()
+ {
+ return sorter.getSortedProjects();
+ }
+
+ public boolean hasBuildSuccess( MavenProject project )
+ {
+ return buildSuccessesByProject.containsKey( getProjectKey( project ) );
+ }
+
+ public void registerBuildSuccess( MavenProject project, long time )
+ {
+ buildSuccessesByProject.put( getProjectKey( project ), new BuildSuccess( project, time ) );
+ }
+
+ public BuildFailure getBuildFailure( MavenProject project )
+ {
+ return (BuildFailure) buildFailuresByProject.get( getProjectKey( project ) );
+ }
+
+ public BuildSuccess getBuildSuccess( MavenProject project )
+ {
+ return (BuildSuccess) buildSuccessesByProject.get( getProjectKey( project ) );
+ }
+
+ public boolean executedMultipleProjects()
+ {
+ return buildFailuresByProject.size() + buildSuccessesByProject.size() > 1;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/SettingsAdapter.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/SettingsAdapter.java
new file mode 100644
index 00000000..000607ff
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/SettingsAdapter.java
@@ -0,0 +1,126 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.settings.Mirror;
+import org.apache.maven.settings.Profile;
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.RuntimeInfo;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.settings.SettingsUtils;
+
+/**
+ * Adapt a {@link MavenExecutionRequest} to a {@link Settings} object for use in the Maven core.
+ * We want to make sure that what is ask for in the execution request overrides what is in the settings.
+ * The CLI feeds into an execution request so if a particular value is present in the execution request
+ * then we will take that over the value coming from the user settings.
+ *
+ * @author Jason van Zyl
+ */
+class SettingsAdapter
+ extends Settings
+{
+
+ private MavenExecutionRequest request;
+
+ private RuntimeInfo runtimeInfo;
+
+ public SettingsAdapter( MavenExecutionRequest request )
+ {
+ this.request = request;
+
+ /*
+ * NOTE: Plugins like maven-release-plugin query the path to the settings.xml to pass it into a forked Maven and
+ * the CLI will fail when called with a non-existing settings, so be sure to only point at actual files. Having
+ * a null file should be harmless as this case matches general Maven 2.x behavior...
+ */
+ File userSettings = request.getUserSettingsFile();
+ this.runtimeInfo = new RuntimeInfo( ( userSettings != null && userSettings.isFile() ) ? userSettings : null );
+ }
+
+ @Override
+ public String getLocalRepository()
+ {
+ if ( request.getLocalRepositoryPath() != null )
+ {
+ return request.getLocalRepositoryPath().getAbsolutePath();
+ }
+
+ return null;
+ }
+
+ @Override
+ public boolean isInteractiveMode()
+ {
+ return request.isInteractiveMode();
+ }
+
+ @Override
+ public boolean isOffline()
+ {
+ return request.isOffline();
+ }
+
+ @Override
+ public List<Proxy> getProxies()
+ {
+ return request.getProxies();
+ }
+
+ @Override
+ public List<Server> getServers()
+ {
+ return request.getServers();
+ }
+
+ @Override
+ public List<Mirror> getMirrors()
+ {
+ return request.getMirrors();
+ }
+
+ @Override
+ public List<Profile> getProfiles()
+ {
+ List<Profile> result = new ArrayList<Profile>();
+ for ( org.apache.maven.model.Profile profile : request.getProfiles() )
+ {
+ result.add( SettingsUtils.convertToSettingsProfile( profile ) );
+ }
+ return result;
+ }
+
+ @Override
+ public List<String> getActiveProfiles()
+ {
+ return request.getActiveProfiles();
+ }
+
+ @Override
+ public List<String> getPluginGroups()
+ {
+ return request.getPluginGroups();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/MojoExecutionScoped.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/MojoExecutionScoped.java
new file mode 100644
index 00000000..0dcbd16f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/MojoExecutionScoped.java
@@ -0,0 +1,42 @@
+package org.apache.maven.execution.scope;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import com.google.inject.ScopeAnnotation;
+
+/**
+ * Indicates that annotated component should be instantiated before mojo execution starts and discarded after mojo
+ * execution completes.
+ *
+ * @author igor
+ * @since 3.1.2
+ */
+@Target( { TYPE } )
+@Retention( RUNTIME )
+@ScopeAnnotation
+public @interface MojoExecutionScoped
+{
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/WeakMojoExecutionListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/WeakMojoExecutionListener.java
new file mode 100644
index 00000000..94e7c104
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/WeakMojoExecutionListener.java
@@ -0,0 +1,44 @@
+package org.apache.maven.execution.scope;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MojoExecutionEvent;
+import org.apache.maven.plugin.MojoExecutionException;
+
+/**
+ * Extension point that allows build extensions observe and possibly veto mojo executions.
+ * <p>
+ * Unlike {@link MojoExecutionListener}, this extension point does not trigger instantiation of the component, hence
+ * "weak" class name prefix. Only applies to mojo execution scoped components.
+ *
+ * @see org.apache.maven.execution.MojoExecutionListener
+ * @since 3.1.2
+ * @provisional This interface is part of work in progress and can be changed or removed without notice.
+ */
+public interface WeakMojoExecutionListener
+{
+ void beforeMojoExecution( MojoExecutionEvent event )
+ throws MojoExecutionException;
+
+ void afterMojoExecutionSuccess( MojoExecutionEvent event )
+ throws MojoExecutionException;
+
+ void afterExecutionFailure( MojoExecutionEvent event );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScope.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScope.java
new file mode 100644
index 00000000..8a98daf0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScope.java
@@ -0,0 +1,190 @@
+package org.apache.maven.execution.scope.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+import java.util.IdentityHashMap;
+import java.util.LinkedList;
+import java.util.Map;
+
+import org.apache.maven.execution.MojoExecutionEvent;
+import org.apache.maven.execution.MojoExecutionListener;
+import org.apache.maven.execution.scope.WeakMojoExecutionListener;
+import org.apache.maven.plugin.MojoExecutionException;
+
+import com.google.common.collect.Maps;
+import com.google.inject.Key;
+import com.google.inject.OutOfScopeException;
+import com.google.inject.Provider;
+import com.google.inject.Scope;
+import com.google.inject.util.Providers;
+
+public class MojoExecutionScope
+ implements Scope, MojoExecutionListener
+{
+ private static final Provider<Object> SEEDED_KEY_PROVIDER = new Provider<Object>()
+ {
+ public Object get()
+ {
+ throw new IllegalStateException();
+ }
+ };
+
+ private static final class ScopeState
+ {
+ public final Map<Key<?>, Provider<?>> seeded = Maps.newHashMap();
+
+ public final Map<Key<?>, Object> provided = Maps.newHashMap();
+ }
+
+ private final ThreadLocal<LinkedList<ScopeState>> values = new ThreadLocal<LinkedList<ScopeState>>();
+
+ public MojoExecutionScope()
+ {
+ }
+
+ public void enter()
+ {
+ LinkedList<ScopeState> stack = values.get();
+ if ( stack == null )
+ {
+ stack = new LinkedList<ScopeState>();
+ values.set( stack );
+ }
+ stack.addFirst( new ScopeState() );
+ }
+
+ private ScopeState getScopeState()
+ {
+ LinkedList<ScopeState> stack = values.get();
+ if ( stack == null || stack.isEmpty() )
+ {
+ throw new IllegalStateException();
+ }
+ return stack.getFirst();
+ }
+
+ public void exit()
+ throws MojoExecutionException
+ {
+ final LinkedList<ScopeState> stack = values.get();
+ if ( stack == null || stack.isEmpty() )
+ {
+ throw new IllegalStateException();
+ }
+ stack.removeFirst();
+ if ( stack.isEmpty() )
+ {
+ values.remove();
+ }
+ }
+
+ public <T> void seed( Class<T> clazz, Provider<T> value )
+ {
+ getScopeState().seeded.put( Key.get( clazz ), value );
+ }
+
+ public <T> void seed( Class<T> clazz, final T value )
+ {
+ getScopeState().seeded.put( Key.get( clazz ), Providers.of( value ) );
+ }
+
+ public <T> Provider<T> scope( final Key<T> key, final Provider<T> unscoped )
+ {
+ return new Provider<T>()
+ {
+ @SuppressWarnings( "unchecked" )
+ public T get()
+ {
+ LinkedList<ScopeState> stack = values.get();
+ if ( stack == null || stack.isEmpty() )
+ {
+ throw new OutOfScopeException( "Cannot access " + key + " outside of a scoping block" );
+ }
+
+ ScopeState state = stack.getFirst();
+
+ Provider<?> seeded = state.seeded.get( key );
+
+ if ( seeded != null )
+ {
+ return (T) seeded.get();
+ }
+
+ T provided = (T) state.provided.get( key );
+ if ( provided == null && unscoped != null )
+ {
+ provided = unscoped.get();
+ state.provided.put( key, provided );
+ }
+
+ return provided;
+ }
+ };
+ }
+
+ @SuppressWarnings( { "unchecked" } )
+ public static <T> Provider<T> seededKeyProvider()
+ {
+ return (Provider<T>) SEEDED_KEY_PROVIDER;
+ }
+
+ public void beforeMojoExecution( MojoExecutionEvent event )
+ throws MojoExecutionException
+ {
+ for ( WeakMojoExecutionListener provided : getProvidedListeners() )
+ {
+ provided.beforeMojoExecution( event );
+ }
+ }
+
+ public void afterMojoExecutionSuccess( MojoExecutionEvent event )
+ throws MojoExecutionException
+ {
+ for ( WeakMojoExecutionListener provided : getProvidedListeners() )
+ {
+ provided.afterMojoExecutionSuccess( event );
+ }
+ }
+
+ public void afterExecutionFailure( MojoExecutionEvent event )
+ {
+ for ( WeakMojoExecutionListener provided : getProvidedListeners() )
+ {
+ provided.afterExecutionFailure( event );
+ }
+ }
+
+ private Collection<WeakMojoExecutionListener> getProvidedListeners()
+ {
+ // the same instance can be provided multiple times under different Key's
+ // deduplicate instances to avoid redundant beforeXXX/afterXXX callbacks
+ IdentityHashMap<WeakMojoExecutionListener, Object> listeners =
+ new IdentityHashMap<WeakMojoExecutionListener, Object>();
+ for ( Object provided : getScopeState().provided.values() )
+ {
+ if ( provided instanceof WeakMojoExecutionListener )
+ {
+ listeners.put( (WeakMojoExecutionListener) provided, null );
+ }
+ }
+ return listeners.keySet();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeCoreModule.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeCoreModule.java
new file mode 100644
index 00000000..8208c3c3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeCoreModule.java
@@ -0,0 +1,45 @@
+package org.apache.maven.execution.scope.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.maven.execution.MojoExecutionListener;
+
+@Named
+public class MojoExecutionScopeCoreModule
+ extends MojoExecutionScopeModule
+{
+
+ @Inject
+ public MojoExecutionScopeCoreModule()
+ {
+ super( new MojoExecutionScope() );
+ }
+
+ @Override
+ protected void configure()
+ {
+ super.configure();
+ bind( MojoExecutionListener.class ).toInstance( scope );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeModule.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeModule.java
new file mode 100644
index 00000000..229a3c56
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeModule.java
@@ -0,0 +1,56 @@
+package org.apache.maven.execution.scope.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.scope.MojoExecutionScoped;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+
+import com.google.inject.AbstractModule;
+
+public class MojoExecutionScopeModule
+ extends AbstractModule
+{
+ protected final MojoExecutionScope scope;
+
+ public MojoExecutionScopeModule( PlexusContainer container )
+ throws ComponentLookupException
+ {
+ this( container.lookup( MojoExecutionScope.class ) );
+ }
+
+ protected MojoExecutionScopeModule( MojoExecutionScope scope )
+ {
+ this.scope = scope;
+ }
+
+ @Override
+ protected void configure()
+ {
+ bindScope( MojoExecutionScoped.class, scope );
+ bind( MojoExecutionScope.class ).toInstance( scope );
+
+ bind( MavenProject.class ).toProvider( MojoExecutionScope.<MavenProject>seededKeyProvider() ).in( scope );
+ bind( MojoExecution.class ).toProvider( MojoExecutionScope.<MojoExecution>seededKeyProvider() ).in( scope );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExports.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExports.java
new file mode 100644
index 00000000..c4265b31
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExports.java
@@ -0,0 +1,75 @@
+package org.apache.maven.extension.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * Provides information about artifacts (identified by groupId:artifactId string key) and classpath elements exported by
+ * Maven core itself and loaded Maven core extensions.
+ *
+ * @since 3.3.0
+ */
+public class CoreExports
+{
+ private final Set<String> artifacts;
+
+ private final Map<String, ClassLoader> packages;
+
+ public CoreExports( CoreExtensionEntry entry )
+ {
+ this( entry.getClassRealm(), entry.getExportedArtifacts(), entry.getExportedPackages() );
+ }
+
+ public CoreExports( ClassRealm realm, Set<String> exportedArtifacts, Set<String> exportedPackages )
+ {
+ Map<String, ClassLoader> packages = new LinkedHashMap<String, ClassLoader>();
+ for ( String pkg : exportedPackages )
+ {
+ packages.put( pkg, realm );
+ }
+ this.artifacts = ImmutableSet.copyOf( exportedArtifacts );
+ this.packages = ImmutableMap.copyOf( packages );
+ }
+
+ /**
+ * Returns artifacts exported by Maven core and core extensions. Artifacts are identified by their
+ * groupId:artifactId string key.
+ */
+ public Set<String> getExportedArtifacts()
+ {
+ return artifacts;
+ }
+
+ /**
+ * Returns packages exported by Maven core and core extensions.
+ */
+ public Map<String, ClassLoader> getExportedPackages()
+ {
+ return packages;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java
new file mode 100644
index 00000000..e7e4534c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java
@@ -0,0 +1,53 @@
+package org.apache.maven.extension.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.codehaus.plexus.PlexusContainer;
+import org.eclipse.sisu.Nullable;
+
+@Named
+@Singleton
+public class CoreExportsProvider
+{
+
+ private final CoreExports exports;
+
+ @Inject
+ public CoreExportsProvider( PlexusContainer container, @Nullable CoreExports exports )
+ {
+ if ( exports == null )
+ {
+ this.exports = new CoreExports( CoreExtensionEntry.discoverFrom( container.getContainerRealm() ) );
+ }
+ else
+ {
+ this.exports = exports;
+ }
+ }
+
+ public CoreExports get()
+ {
+ return exports;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExtensionEntry.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExtensionEntry.java
new file mode 100644
index 00000000..edadeb2d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExtensionEntry.java
@@ -0,0 +1,141 @@
+package org.apache.maven.extension.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import org.apache.maven.project.ExtensionDescriptor;
+import org.apache.maven.project.ExtensionDescriptorBuilder;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.util.IOUtil;
+
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * Provides information about artifacts (identified by groupId:artifactId string key) and classpath elements exported by
+ * Maven core itself or a Maven core extension.
+ *
+ * @since 3.3.0
+ */
+public class CoreExtensionEntry
+{
+ private final ClassRealm realm;
+
+ private final Set<String> artifacts;
+
+ private final Set<String> packages;
+
+ public CoreExtensionEntry( ClassRealm realm, Collection<String> artifacts, Collection<String> packages )
+ {
+ this.realm = realm;
+ this.artifacts = ImmutableSet.copyOf( artifacts );
+ this.packages = ImmutableSet.copyOf( packages );
+ }
+
+ /**
+ * Returns ClassLoader used to load extension classes.
+ */
+ public ClassRealm getClassRealm()
+ {
+ return realm;
+ }
+
+ /**
+ * Returns artifacts exported by the extension, identified by groupId:artifactId string key.
+ */
+ public Set<String> getExportedArtifacts()
+ {
+ return artifacts;
+ }
+
+ /**
+ * Returns classpath elements exported by the extension.
+ */
+ public Set<String> getExportedPackages()
+ {
+ return packages;
+ }
+
+ private static final ExtensionDescriptorBuilder builder = new ExtensionDescriptorBuilder();
+
+ public static CoreExtensionEntry discoverFrom( ClassRealm loader )
+ {
+ Set<String> artifacts = new LinkedHashSet<String>();
+ Set<String> packages = new LinkedHashSet<String>();
+
+ try
+ {
+ Enumeration<URL> urls = loader.getResources( builder.getExtensionDescriptorLocation() );
+ while ( urls.hasMoreElements() )
+ {
+ InputStream is = urls.nextElement().openStream();
+ try
+ {
+ ExtensionDescriptor descriptor = builder.build( is );
+ artifacts.addAll( descriptor.getExportedArtifacts() );
+ packages.addAll( descriptor.getExportedPackages() );
+ }
+ finally
+ {
+ IOUtil.close( is );
+ }
+ }
+ }
+ catch ( IOException ignored )
+ {
+ // exports descriptors are entirely optional
+ }
+
+ return new CoreExtensionEntry( loader, artifacts, packages );
+ }
+
+ public static CoreExtensionEntry discoverFrom( ClassRealm loader, Collection<File> classpath )
+ {
+ Set<String> artifacts = new LinkedHashSet<String>();
+ Set<String> packages = new LinkedHashSet<String>();
+
+ try
+ {
+ for ( File entry : classpath )
+ {
+ ExtensionDescriptor descriptor = builder.build( entry );
+ if ( descriptor != null )
+ {
+ artifacts.addAll( descriptor.getExportedArtifacts() );
+ packages.addAll( descriptor.getExportedPackages() );
+ }
+ }
+ }
+ catch ( IOException ignored )
+ {
+ // exports descriptors are entirely optional
+ }
+
+ return new CoreExtensionEntry( loader, artifacts, packages );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
new file mode 100644
index 00000000..c8367463
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
@@ -0,0 +1,488 @@
+package org.apache.maven.graph;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.DefaultMaven;
+import org.apache.maven.MavenExecutionException;
+import org.apache.maven.ProjectCycleException;
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionResult;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.ProjectDependencyGraph;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.building.DefaultModelProblem;
+import org.apache.maven.model.building.ModelProblem;
+import org.apache.maven.model.building.ModelProblemUtils;
+import org.apache.maven.model.building.ModelSource;
+import org.apache.maven.model.building.Result;
+import org.apache.maven.model.building.UrlModelSource;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.project.ProjectBuildingResult;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.dag.CycleDetectedException;
+
+import com.google.common.collect.Lists;
+
+@Component( role = GraphBuilder.class, hint = GraphBuilder.HINT )
+public class DefaultGraphBuilder
+ implements GraphBuilder
+{
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ protected ProjectBuilder projectBuilder;
+
+ @Override
+ public Result<ProjectDependencyGraph> build( MavenSession session )
+ {
+ if ( session.getProjectDependencyGraph() != null )
+ {
+ return dependencyGraph( session, session.getProjects(), false );
+ }
+
+ List<MavenProject> projects = session.getProjects();
+
+ if ( projects == null )
+ {
+ try
+ {
+ projects = getProjectsForMavenReactor( session );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ return Result.error( Lists.newArrayList( new DefaultModelProblem( null, null, null, null, 0, 0, e ) ) );
+ }
+
+ validateProjects( projects );
+
+ return dependencyGraph( session, projects, true );
+ }
+ else
+ {
+ return dependencyGraph( session, projects, false );
+ }
+ }
+
+ private Result<ProjectDependencyGraph> dependencyGraph( MavenSession session, List<MavenProject> projects,
+ boolean applyMakeBehaviour )
+ {
+ MavenExecutionRequest request = session.getRequest();
+
+ ProjectDependencyGraph projectDependencyGraph = null;
+
+ try
+ {
+ projectDependencyGraph = new DefaultProjectDependencyGraph( projects );
+
+ if ( applyMakeBehaviour )
+ {
+ List<MavenProject> activeProjects = projectDependencyGraph.getSortedProjects();
+
+ activeProjects = trimSelectedProjects( activeProjects, projectDependencyGraph, request );
+ activeProjects = trimExcludedProjects( activeProjects, request );
+ activeProjects = trimResumedProjects( activeProjects, request );
+
+ if ( activeProjects.size() != projectDependencyGraph.getSortedProjects().size() )
+ {
+ projectDependencyGraph =
+ new FilteredProjectDependencyGraph( projectDependencyGraph, activeProjects );
+ }
+ }
+ }
+ catch ( CycleDetectedException e )
+ {
+ String message = "The projects in the reactor contain a cyclic reference: " + e.getMessage();
+ ProjectCycleException error = new ProjectCycleException( message, e );
+ return Result.error( Lists.newArrayList( new DefaultModelProblem( null, null, null, null, 0, 0, error ) ) );
+ }
+ catch ( org.apache.maven.project.DuplicateProjectException e )
+ {
+ return Result.error( Lists.newArrayList( new DefaultModelProblem( null, null, null, null, 0, 0, e ) ) );
+ }
+ catch ( MavenExecutionException e )
+ {
+ return Result.error( Lists.newArrayList( new DefaultModelProblem( null, null, null, null, 0, 0, e ) ) );
+ }
+
+ session.setProjects( projectDependencyGraph.getSortedProjects() );
+ session.setProjectDependencyGraph( projectDependencyGraph );
+
+ return Result.success( projectDependencyGraph );
+ }
+
+ private List<MavenProject> trimSelectedProjects( List<MavenProject> projects, ProjectDependencyGraph graph,
+ MavenExecutionRequest request )
+ throws MavenExecutionException
+ {
+ List<MavenProject> result = projects;
+
+ if ( !request.getSelectedProjects().isEmpty() )
+ {
+ File reactorDirectory = null;
+ if ( request.getBaseDirectory() != null )
+ {
+ reactorDirectory = new File( request.getBaseDirectory() );
+ }
+
+ Collection<MavenProject> selectedProjects = new LinkedHashSet<MavenProject>( projects.size() );
+
+ for ( String selector : request.getSelectedProjects() )
+ {
+ MavenProject selectedProject = null;
+
+ for ( MavenProject project : projects )
+ {
+ if ( isMatchingProject( project, selector, reactorDirectory ) )
+ {
+ selectedProject = project;
+ break;
+ }
+ }
+
+ if ( selectedProject != null )
+ {
+ selectedProjects.add( selectedProject );
+ }
+ else
+ {
+ throw new MavenExecutionException( "Could not find the selected project in the reactor: "
+ + selector, request.getPom() );
+ }
+ }
+
+ boolean makeUpstream = false;
+ boolean makeDownstream = false;
+
+ if ( MavenExecutionRequest.REACTOR_MAKE_UPSTREAM.equals( request.getMakeBehavior() ) )
+ {
+ makeUpstream = true;
+ }
+ else if ( MavenExecutionRequest.REACTOR_MAKE_DOWNSTREAM.equals( request.getMakeBehavior() ) )
+ {
+ makeDownstream = true;
+ }
+ else if ( MavenExecutionRequest.REACTOR_MAKE_BOTH.equals( request.getMakeBehavior() ) )
+ {
+ makeUpstream = true;
+ makeDownstream = true;
+ }
+ else if ( StringUtils.isNotEmpty( request.getMakeBehavior() ) )
+ {
+ throw new MavenExecutionException( "Invalid reactor make behavior: " + request.getMakeBehavior(),
+ request.getPom() );
+ }
+
+ if ( makeUpstream || makeDownstream )
+ {
+ for ( MavenProject selectedProject : new ArrayList<MavenProject>( selectedProjects ) )
+ {
+ if ( makeUpstream )
+ {
+ selectedProjects.addAll( graph.getUpstreamProjects( selectedProject, true ) );
+ }
+ if ( makeDownstream )
+ {
+ selectedProjects.addAll( graph.getDownstreamProjects( selectedProject, true ) );
+ }
+ }
+ }
+
+ result = new ArrayList<MavenProject>( selectedProjects.size() );
+
+ for ( MavenProject project : projects )
+ {
+ if ( selectedProjects.contains( project ) )
+ {
+ result.add( project );
+ }
+ }
+ }
+
+ return result;
+ }
+
+ private List<MavenProject> trimExcludedProjects( List<MavenProject> projects, MavenExecutionRequest request )
+ throws MavenExecutionException
+ {
+ List<MavenProject> result = projects;
+
+ if ( !request.getExcludedProjects().isEmpty() )
+ {
+ File reactorDirectory = null;
+
+ if ( request.getBaseDirectory() != null )
+ {
+ reactorDirectory = new File( request.getBaseDirectory() );
+ }
+
+ Collection<MavenProject> excludedProjects = new LinkedHashSet<MavenProject>( projects.size() );
+
+ for ( String selector : request.getExcludedProjects() )
+ {
+ MavenProject excludedProject = null;
+
+ for ( MavenProject project : projects )
+ {
+ if ( isMatchingProject( project, selector, reactorDirectory ) )
+ {
+ excludedProject = project;
+ break;
+ }
+ }
+
+ if ( excludedProject != null )
+ {
+ excludedProjects.add( excludedProject );
+ }
+ else
+ {
+ throw new MavenExecutionException( "Could not find the selected project in the reactor: "
+ + selector, request.getPom() );
+ }
+ }
+
+ result = new ArrayList<MavenProject>( projects.size() );
+ for ( MavenProject project : projects )
+ {
+ if ( !excludedProjects.contains( project ) )
+ {
+ result.add( project );
+ }
+ }
+ }
+
+ return result;
+ }
+
+ private List<MavenProject> trimResumedProjects( List<MavenProject> projects, MavenExecutionRequest request )
+ throws MavenExecutionException
+ {
+ List<MavenProject> result = projects;
+
+ if ( StringUtils.isNotEmpty( request.getResumeFrom() ) )
+ {
+ File reactorDirectory = null;
+ if ( request.getBaseDirectory() != null )
+ {
+ reactorDirectory = new File( request.getBaseDirectory() );
+ }
+
+ String selector = request.getResumeFrom();
+
+ result = new ArrayList<MavenProject>( projects.size() );
+
+ boolean resumed = false;
+
+ for ( MavenProject project : projects )
+ {
+ if ( !resumed && isMatchingProject( project, selector, reactorDirectory ) )
+ {
+ resumed = true;
+ }
+
+ if ( resumed )
+ {
+ result.add( project );
+ }
+ }
+
+ if ( !resumed )
+ {
+ throw new MavenExecutionException( "Could not find project to resume reactor build from: " + selector
+ + " vs " + projects, request.getPom() );
+ }
+ }
+
+ return result;
+ }
+
+ private boolean isMatchingProject( MavenProject project, String selector, File reactorDirectory )
+ {
+ // [groupId]:artifactId
+ if ( selector.indexOf( ':' ) >= 0 )
+ {
+ String id = ':' + project.getArtifactId();
+
+ if ( id.equals( selector ) )
+ {
+ return true;
+ }
+
+ id = project.getGroupId() + id;
+
+ if ( id.equals( selector ) )
+ {
+ return true;
+ }
+ }
+
+ // relative path, e.g. "sub", "../sub" or "."
+ else if ( reactorDirectory != null )
+ {
+ File selectedProject = new File( new File( reactorDirectory, selector ).toURI().normalize() );
+
+ if ( selectedProject.isFile() )
+ {
+ return selectedProject.equals( project.getFile() );
+ }
+ else if ( selectedProject.isDirectory() )
+ {
+ return selectedProject.equals( project.getBasedir() );
+ }
+ }
+
+ return false;
+ }
+
+ private MavenExecutionResult addExceptionToResult( MavenExecutionResult result, Throwable e )
+ {
+ if ( !result.getExceptions().contains( e ) )
+ {
+ result.addException( e );
+ }
+
+ return result;
+ }
+
+ // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ //
+ // Project collection
+ //
+ // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ private List<MavenProject> getProjectsForMavenReactor( MavenSession session )
+ throws ProjectBuildingException
+ {
+ MavenExecutionRequest request = session.getRequest();
+
+ request.getProjectBuildingRequest().setRepositorySession( session.getRepositorySession() );
+
+ List<MavenProject> projects = new ArrayList<MavenProject>();
+
+ // We have no POM file.
+ //
+ if ( request.getPom() == null )
+ {
+ ModelSource modelSource = new UrlModelSource( DefaultMaven.class.getResource( "project/standalone.xml" ) );
+ MavenProject project = projectBuilder.build( modelSource, request.getProjectBuildingRequest() )
+ .getProject();
+ project.setExecutionRoot( true );
+ projects.add( project );
+ request.setProjectPresent( false );
+ return projects;
+ }
+
+ List<File> files = Arrays.asList( request.getPom().getAbsoluteFile() );
+ collectProjects( projects, files, request );
+ return projects;
+ }
+
+ private void collectProjects( List<MavenProject> projects, List<File> files, MavenExecutionRequest request )
+ throws ProjectBuildingException
+ {
+ ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest();
+
+ List<ProjectBuildingResult> results = projectBuilder.build( files, request.isRecursive(),
+ projectBuildingRequest );
+
+ boolean problems = false;
+
+ for ( ProjectBuildingResult result : results )
+ {
+ projects.add( result.getProject() );
+
+ if ( !result.getProblems().isEmpty() && logger.isWarnEnabled() )
+ {
+ logger.warn( "" );
+ logger.warn( "Some problems were encountered while building the effective model for "
+ + result.getProject().getId() );
+
+ for ( ModelProblem problem : result.getProblems() )
+ {
+ String loc = ModelProblemUtils.formatLocation( problem, result.getProjectId() );
+ logger.warn( problem.getMessage() + ( StringUtils.isNotEmpty( loc ) ? " @ " + loc : "" ) );
+ }
+
+ problems = true;
+ }
+ }
+
+ if ( problems )
+ {
+ logger.warn( "" );
+ logger.warn( "It is highly recommended to fix these problems"
+ + " because they threaten the stability of your build." );
+ logger.warn( "" );
+ logger.warn( "For this reason, future Maven versions might no"
+ + " longer support building such malformed projects." );
+ logger.warn( "" );
+ }
+ }
+
+ private void validateProjects( List<MavenProject> projects )
+ {
+ Map<String, MavenProject> projectsMap = new HashMap<String, MavenProject>();
+
+ for ( MavenProject p : projects )
+ {
+ String projectKey = ArtifactUtils.key( p.getGroupId(), p.getArtifactId(), p.getVersion() );
+
+ projectsMap.put( projectKey, p );
+ }
+
+ for ( MavenProject project : projects )
+ {
+ // MNG-1911 / MNG-5572: Building plugins with extensions cannot be part of reactor
+ for ( Plugin plugin : project.getBuildPlugins() )
+ {
+ if ( plugin.isExtensions() )
+ {
+ String pluginKey = ArtifactUtils.key( plugin.getGroupId(), plugin.getArtifactId(),
+ plugin.getVersion() );
+
+ if ( projectsMap.containsKey( pluginKey ) )
+ {
+ logger.warn( project.getName() + " uses " + plugin.getKey()
+ + " as extensions, which is not possible within the same reactor build. "
+ + "This plugin was pulled from the local repository!" );
+ }
+ }
+ }
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java
new file mode 100644
index 00000000..01fec339
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java
@@ -0,0 +1,134 @@
+package org.apache.maven.graph;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.execution.ProjectDependencyGraph;
+import org.apache.maven.project.DuplicateProjectException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectSorter;
+import org.codehaus.plexus.util.dag.CycleDetectedException;
+
+/**
+ * Describes the inter-dependencies between projects in the reactor.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DefaultProjectDependencyGraph
+ implements ProjectDependencyGraph
+{
+
+ private ProjectSorter sorter;
+
+ /**
+ * Creates a new project dependency graph based on the specified projects.
+ *
+ * @param projects The projects to create the dependency graph with
+ * @throws DuplicateProjectException
+ * @throws CycleDetectedException
+ */
+ public DefaultProjectDependencyGraph( Collection<MavenProject> projects )
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ this.sorter = new ProjectSorter( projects );
+ }
+
+ public List<MavenProject> getSortedProjects()
+ {
+ return new ArrayList<MavenProject>( sorter.getSortedProjects() );
+ }
+
+ public List<MavenProject> getDownstreamProjects( MavenProject project, boolean transitive )
+ {
+ if ( project == null )
+ {
+ throw new IllegalArgumentException( "project missing" );
+ }
+
+ Set<String> projectIds = new HashSet<String>();
+
+ getDownstreamProjects( ProjectSorter.getId( project ), projectIds, transitive );
+
+ return getSortedProjects( projectIds );
+ }
+
+ private void getDownstreamProjects( String projectId, Set<String> projectIds, boolean transitive )
+ {
+ for ( String id : sorter.getDependents( projectId ) )
+ {
+ if ( projectIds.add( id ) && transitive )
+ {
+ getDownstreamProjects( id, projectIds, transitive );
+ }
+ }
+ }
+
+ public List<MavenProject> getUpstreamProjects( MavenProject project, boolean transitive )
+ {
+ if ( project == null )
+ {
+ throw new IllegalArgumentException( "project missing" );
+ }
+
+ Set<String> projectIds = new HashSet<String>();
+
+ getUpstreamProjects( ProjectSorter.getId( project ), projectIds, transitive );
+
+ return getSortedProjects( projectIds );
+ }
+
+ private void getUpstreamProjects( String projectId, Collection<String> projectIds, boolean transitive )
+ {
+ for ( String id : sorter.getDependencies( projectId ) )
+ {
+ if ( projectIds.add( id ) && transitive )
+ {
+ getUpstreamProjects( id, projectIds, transitive );
+ }
+ }
+ }
+
+ private List<MavenProject> getSortedProjects( Set<String> projectIds )
+ {
+ List<MavenProject> result = new ArrayList<MavenProject>( projectIds.size() );
+
+ for ( MavenProject mavenProject : sorter.getSortedProjects() )
+ {
+ if ( projectIds.contains( ProjectSorter.getId( mavenProject ) ) )
+ {
+ result.add( mavenProject );
+ }
+ }
+
+ return result;
+ }
+
+ @Override
+ public String toString()
+ {
+ return sorter.getSortedProjects().toString();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/FilteredProjectDependencyGraph.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/FilteredProjectDependencyGraph.java
new file mode 100644
index 00000000..662bda47
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/FilteredProjectDependencyGraph.java
@@ -0,0 +1,111 @@
+package org.apache.maven.graph;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.IdentityHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.execution.ProjectDependencyGraph;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Provides a sub view of another dependency graph.
+ *
+ * @author Benjamin Bentmann
+ */
+class FilteredProjectDependencyGraph
+ implements ProjectDependencyGraph
+{
+
+ private ProjectDependencyGraph projectDependencyGraph;
+
+ private Map<MavenProject, ?> whiteList;
+
+ private List<MavenProject> sortedProjects;
+
+ /**
+ * Creates a new project dependency graph from the specified graph.
+ *
+ * @param projectDependencyGraph The project dependency graph to create a sub view from, must not be {@code null}.
+ * @param whiteList The projects on which the dependency view should focus, must not be {@code null}.
+ */
+ public FilteredProjectDependencyGraph( ProjectDependencyGraph projectDependencyGraph,
+ Collection<? extends MavenProject> whiteList )
+ {
+ if ( projectDependencyGraph == null )
+ {
+ throw new IllegalArgumentException( "project dependency graph missing" );
+ }
+
+ this.projectDependencyGraph = projectDependencyGraph;
+
+ this.whiteList = new IdentityHashMap<MavenProject, Object>();
+
+ for ( MavenProject project : whiteList )
+ {
+ this.whiteList.put( project, null );
+ }
+ }
+
+ public List<MavenProject> getSortedProjects()
+ {
+ if ( sortedProjects == null )
+ {
+ sortedProjects = applyFilter( projectDependencyGraph.getSortedProjects() );
+ }
+
+ return new ArrayList<MavenProject>( sortedProjects );
+ }
+
+ public List<MavenProject> getDownstreamProjects( MavenProject project, boolean transitive )
+ {
+ return applyFilter( projectDependencyGraph.getDownstreamProjects( project, transitive ) );
+ }
+
+ public List<MavenProject> getUpstreamProjects( MavenProject project, boolean transitive )
+ {
+ return applyFilter( projectDependencyGraph.getUpstreamProjects( project, transitive ) );
+ }
+
+ private List<MavenProject> applyFilter( Collection<? extends MavenProject> projects )
+ {
+ List<MavenProject> filtered = new ArrayList<MavenProject>( projects.size() );
+
+ for ( MavenProject project : projects )
+ {
+ if ( whiteList.containsKey( project ) )
+ {
+ filtered.add( project );
+ }
+ }
+
+ return filtered;
+ }
+
+ @Override
+ public String toString()
+ {
+ return getSortedProjects().toString();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/GraphBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/GraphBuilder.java
new file mode 100644
index 00000000..fb7c4f2a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/GraphBuilder.java
@@ -0,0 +1,31 @@
+package org.apache.maven.graph;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.ProjectDependencyGraph;
+import org.apache.maven.model.building.Result;
+
+public interface GraphBuilder
+{
+ String HINT = "graphBuilder";
+
+ Result<? extends ProjectDependencyGraph> build( MavenSession session );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
new file mode 100644
index 00000000..26a8ddae
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
@@ -0,0 +1,271 @@
+package org.apache.maven.internal.aether;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.bridge.MavenRepositorySystem;
+import org.apache.maven.eventspy.internal.EventSpyDispatcher;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
+import org.apache.maven.settings.Mirror;
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.building.SettingsProblem;
+import org.apache.maven.settings.crypto.DefaultSettingsDecryptionRequest;
+import org.apache.maven.settings.crypto.SettingsDecrypter;
+import org.apache.maven.settings.crypto.SettingsDecryptionResult;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.eclipse.aether.ConfigurationProperties;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
+import org.eclipse.aether.repository.RepositoryPolicy;
+import org.eclipse.aether.repository.WorkspaceReader;
+import org.eclipse.aether.resolution.ResolutionErrorPolicy;
+import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
+import org.eclipse.aether.util.repository.AuthenticationBuilder;
+import org.eclipse.aether.util.repository.DefaultAuthenticationSelector;
+import org.eclipse.aether.util.repository.DefaultMirrorSelector;
+import org.eclipse.aether.util.repository.DefaultProxySelector;
+import org.eclipse.aether.util.repository.SimpleResolutionErrorPolicy;
+import org.eclipse.sisu.Nullable;
+
+/**
+ * @since 3.3.0
+ */
+@Named
+public class DefaultRepositorySystemSessionFactory
+{
+ @Inject
+ private Logger logger;
+
+ @Inject
+ private ArtifactHandlerManager artifactHandlerManager;
+
+ @Inject
+ private RepositorySystem repoSystem;
+
+ @Inject
+ @Nullable
+ @Named( "simple" )
+ private LocalRepositoryManagerFactory simpleLocalRepoMgrFactory;
+
+ @Inject
+ @Nullable
+ @Named( "ide" )
+ private WorkspaceReader workspaceRepository;
+
+ @Inject
+ private SettingsDecrypter settingsDecrypter;
+
+ @Inject
+ private EventSpyDispatcher eventSpyDispatcher;
+
+ @Inject
+ MavenRepositorySystem mavenRepositorySystem;
+
+ public DefaultRepositorySystemSession newRepositorySession( MavenExecutionRequest request )
+ {
+ DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
+
+ session.setCache( request.getRepositoryCache() );
+
+ Map<Object, Object> configProps = new LinkedHashMap<Object, Object>();
+ configProps.put( ConfigurationProperties.USER_AGENT, getUserAgent() );
+ configProps.put( ConfigurationProperties.INTERACTIVE, request.isInteractiveMode() );
+ configProps.putAll( request.getSystemProperties() );
+ configProps.putAll( request.getUserProperties() );
+
+ session.setOffline( request.isOffline() );
+ session.setChecksumPolicy( request.getGlobalChecksumPolicy() );
+ if ( request.isNoSnapshotUpdates() )
+ {
+ session.setUpdatePolicy( RepositoryPolicy.UPDATE_POLICY_NEVER );
+ }
+ else if ( request.isUpdateSnapshots() )
+ {
+ session.setUpdatePolicy( RepositoryPolicy.UPDATE_POLICY_ALWAYS );
+ }
+ else
+ {
+ session.setUpdatePolicy( null );
+ }
+
+ int errorPolicy = 0;
+ errorPolicy |= request.isCacheNotFound() ? ResolutionErrorPolicy.CACHE_NOT_FOUND : 0;
+ errorPolicy |= request.isCacheTransferError() ? ResolutionErrorPolicy.CACHE_TRANSFER_ERROR : 0;
+ session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( errorPolicy, errorPolicy
+ | ResolutionErrorPolicy.CACHE_NOT_FOUND ) );
+
+ session.setArtifactTypeRegistry( RepositoryUtils.newArtifactTypeRegistry( artifactHandlerManager ) );
+
+ LocalRepository localRepo = new LocalRepository( request.getLocalRepository().getBasedir() );
+
+ if ( request.isUseLegacyLocalRepository() )
+ {
+ logger.warn( "Disabling enhanced local repository: using legacy is strongly discouraged to ensure"
+ + " build reproducibility." );
+ try
+ {
+ session.setLocalRepositoryManager( simpleLocalRepoMgrFactory.newInstance( session, localRepo ) );
+ }
+ catch ( NoLocalRepositoryManagerException e )
+ {
+
+ logger.warn( "Failed to configure legacy local repository: back to default" );
+ session.setLocalRepositoryManager( repoSystem.newLocalRepositoryManager( session, localRepo ) );
+ }
+ }
+ else
+ {
+ session.setLocalRepositoryManager( repoSystem.newLocalRepositoryManager( session, localRepo ) );
+ }
+
+ if ( request.getWorkspaceReader() != null )
+ {
+ session.setWorkspaceReader( request.getWorkspaceReader() );
+ }
+ else
+ {
+ session.setWorkspaceReader( workspaceRepository );
+ }
+
+ DefaultSettingsDecryptionRequest decrypt = new DefaultSettingsDecryptionRequest();
+ decrypt.setProxies( request.getProxies() );
+ decrypt.setServers( request.getServers() );
+ SettingsDecryptionResult decrypted = settingsDecrypter.decrypt( decrypt );
+
+ if ( logger.isDebugEnabled() )
+ {
+ for ( SettingsProblem problem : decrypted.getProblems() )
+ {
+ logger.debug( problem.getMessage(), problem.getException() );
+ }
+ }
+
+ DefaultMirrorSelector mirrorSelector = new DefaultMirrorSelector();
+ for ( Mirror mirror : request.getMirrors() )
+ {
+ mirrorSelector.add( mirror.getId(), mirror.getUrl(), mirror.getLayout(), false, mirror.getMirrorOf(),
+ mirror.getMirrorOfLayouts() );
+ }
+ session.setMirrorSelector( mirrorSelector );
+
+ DefaultProxySelector proxySelector = new DefaultProxySelector();
+ for ( Proxy proxy : decrypted.getProxies() )
+ {
+ AuthenticationBuilder authBuilder = new AuthenticationBuilder();
+ authBuilder.addUsername( proxy.getUsername() ).addPassword( proxy.getPassword() );
+ proxySelector.add( new org.eclipse.aether.repository.Proxy( proxy.getProtocol(), proxy.getHost(),
+ proxy.getPort(), authBuilder.build() ),
+ proxy.getNonProxyHosts() );
+ }
+ session.setProxySelector( proxySelector );
+
+ DefaultAuthenticationSelector authSelector = new DefaultAuthenticationSelector();
+ for ( Server server : decrypted.getServers() )
+ {
+ AuthenticationBuilder authBuilder = new AuthenticationBuilder();
+ authBuilder.addUsername( server.getUsername() ).addPassword( server.getPassword() );
+ authBuilder.addPrivateKey( server.getPrivateKey(), server.getPassphrase() );
+ authSelector.add( server.getId(), authBuilder.build() );
+
+ if ( server.getConfiguration() != null )
+ {
+ Xpp3Dom dom = (Xpp3Dom) server.getConfiguration();
+ for ( int i = dom.getChildCount() - 1; i >= 0; i-- )
+ {
+ Xpp3Dom child = dom.getChild( i );
+ if ( "wagonProvider".equals( child.getName() ) )
+ {
+ dom.removeChild( i );
+ }
+ }
+
+ XmlPlexusConfiguration config = new XmlPlexusConfiguration( dom );
+ configProps.put( "aether.connector.wagon.config." + server.getId(), config );
+ }
+
+ configProps.put( "aether.connector.perms.fileMode." + server.getId(), server.getFilePermissions() );
+ configProps.put( "aether.connector.perms.dirMode." + server.getId(), server.getDirectoryPermissions() );
+ }
+ session.setAuthenticationSelector( authSelector );
+
+ session.setTransferListener( request.getTransferListener() );
+
+ session.setRepositoryListener( eventSpyDispatcher.chainListener( new LoggingRepositoryListener( logger ) ) );
+
+ session.setUserProperties( request.getUserProperties() );
+ session.setSystemProperties( request.getSystemProperties() );
+ session.setConfigProperties( configProps );
+
+ mavenRepositorySystem.injectMirror( request.getRemoteRepositories(), request.getMirrors() );
+ mavenRepositorySystem.injectProxy( session, request.getRemoteRepositories() );
+ mavenRepositorySystem.injectAuthentication( session, request.getRemoteRepositories() );
+
+ mavenRepositorySystem.injectMirror( request.getPluginArtifactRepositories(), request.getMirrors() );
+ mavenRepositorySystem.injectProxy( session, request.getPluginArtifactRepositories() );
+ mavenRepositorySystem.injectAuthentication( session, request.getPluginArtifactRepositories() );
+
+ return session;
+ }
+
+ private String getUserAgent()
+ {
+ return "Apache-Maven/" + getMavenVersion() + " (Java " + System.getProperty( "java.version" ) + "; "
+ + System.getProperty( "os.name" ) + " " + System.getProperty( "os.version" ) + ")";
+ }
+
+ private String getMavenVersion()
+ {
+ Properties props = new Properties();
+
+ InputStream is = getClass().getResourceAsStream( "/META-INF/maven/org.apache.maven/maven-core/pom.properties" );
+ if ( is != null )
+ {
+ try
+ {
+ props.load( is );
+ }
+ catch ( IOException e )
+ {
+ logger.debug( "Failed to read Maven version", e );
+ }
+ IOUtil.close( is );
+ }
+
+ return props.getProperty( "version", "unknown-version" );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/internal/aether/LoggingRepositoryListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/internal/aether/LoggingRepositoryListener.java
new file mode 100644
index 00000000..7b67c3bd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/internal/aether/LoggingRepositoryListener.java
@@ -0,0 +1,141 @@
+package org.apache.maven.internal.aether;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.FileNotFoundException;
+
+import org.codehaus.plexus.logging.Logger;
+import org.eclipse.aether.AbstractRepositoryListener;
+import org.eclipse.aether.RepositoryEvent;
+import org.eclipse.aether.transfer.MetadataNotFoundException;
+
+/**
+ * @author Benjamin Bentmann
+ */
+class LoggingRepositoryListener
+ extends AbstractRepositoryListener
+{
+
+ private final Logger logger;
+
+ public LoggingRepositoryListener( Logger logger )
+ {
+ this.logger = logger;
+ }
+
+ @Override
+ public void artifactInstalling( RepositoryEvent event )
+ {
+ logger.info( "Installing " + event.getArtifact().getFile() + " to " + event.getFile() );
+ }
+
+ @Override
+ public void metadataInstalling( RepositoryEvent event )
+ {
+ logger.debug( "Installing " + event.getMetadata() + " to " + event.getFile() );
+ }
+
+ @Override
+ public void metadataResolved( RepositoryEvent event )
+ {
+ Exception e = event.getException();
+ if ( e != null )
+ {
+ if ( e instanceof MetadataNotFoundException )
+ {
+ logger.debug( e.getMessage() );
+ }
+ else if ( logger.isDebugEnabled() )
+ {
+ logger.warn( e.getMessage(), e );
+ }
+ else
+ {
+ logger.warn( e.getMessage() );
+ }
+ }
+ }
+
+ @Override
+ public void metadataInvalid( RepositoryEvent event )
+ {
+ Exception exception = event.getException();
+
+ StringBuilder buffer = new StringBuilder( 256 );
+ buffer.append( "The metadata " );
+ if ( event.getMetadata().getFile() != null )
+ {
+ buffer.append( event.getMetadata().getFile() );
+ }
+ else
+ {
+ buffer.append( event.getMetadata() );
+ }
+
+ if ( exception instanceof FileNotFoundException )
+ {
+ buffer.append( " is inaccessible" );
+ }
+ else
+ {
+ buffer.append( " is invalid" );
+ }
+
+ if ( exception != null )
+ {
+ buffer.append( ": " );
+ buffer.append( exception.getMessage() );
+ }
+
+ if ( logger.isDebugEnabled() )
+ {
+ logger.warn( buffer.toString(), exception );
+ }
+ else
+ {
+ logger.warn( buffer.toString() );
+ }
+ }
+
+ @Override
+ public void artifactDescriptorInvalid( RepositoryEvent event )
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+ buffer.append( "The POM for " );
+ buffer.append( event.getArtifact() );
+ buffer.append( " is invalid, transitive dependencies (if any) will not be available" );
+
+ if ( logger.isDebugEnabled() )
+ {
+ logger.warn( buffer + ": " + event.getException().getMessage() );
+ }
+ else
+ {
+ logger.warn( buffer + ", enable debug logging for more details" );
+ }
+ }
+
+ @Override
+ public void artifactDescriptorMissing( RepositoryEvent event )
+ {
+ logger.warn( "The POM for " + event.getArtifact() + " is missing, no dependency information available" );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
new file mode 100644
index 00000000..6f994b3d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
@@ -0,0 +1,177 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.internal.LifecycleExecutionPlanCalculator;
+import org.apache.maven.lifecycle.internal.LifecycleStarter;
+import org.apache.maven.lifecycle.internal.LifecycleTaskSegmentCalculator;
+import org.apache.maven.lifecycle.internal.MojoDescriptorCreator;
+import org.apache.maven.lifecycle.internal.MojoExecutor;
+import org.apache.maven.lifecycle.internal.ProjectIndex;
+import org.apache.maven.lifecycle.internal.TaskSegment;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginManagerException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * A facade that provides lifecycle services to components outside maven core.
+ *
+ * Note that this component is not normally used from within core itself.
+ *
+ * @author Jason van Zyl
+ * @author Benjamin Bentmann
+ * @author Kristian Rosenvold
+ */
+@Component( role = LifecycleExecutor.class )
+public class DefaultLifecycleExecutor
+ implements LifecycleExecutor
+{
+
+ @Requirement
+ private LifeCyclePluginAnalyzer lifeCyclePluginAnalyzer;
+
+ @Requirement
+ private DefaultLifecycles defaultLifeCycles;
+
+ @Requirement
+ private LifecycleTaskSegmentCalculator lifecycleTaskSegmentCalculator;
+
+ @Requirement
+ private LifecycleExecutionPlanCalculator lifecycleExecutionPlanCalculator;
+
+ @Requirement
+ private MojoExecutor mojoExecutor;
+
+ @Requirement
+ private LifecycleStarter lifecycleStarter;
+
+
+ public void execute( MavenSession session )
+ {
+ lifecycleStarter.execute( session );
+ }
+
+ @Requirement
+ private MojoDescriptorCreator mojoDescriptorCreator;
+
+ // These methods deal with construction intact Plugin object that look like they come from a standard
+ // <plugin/> block in a Maven POM. We have to do some wiggling to pull the sources of information
+ // together and this really shows the problem of constructing a sensible default configuration but
+ // it's all encapsulated here so it appears normalized to the POM builder.
+
+ // We are going to take the project packaging and find all plugin in the default lifecycle and create
+ // fully populated Plugin objects, including executions with goals and default configuration taken
+ // from the plugin.xml inside a plugin.
+ //
+ // TODO: This whole method could probably removed by injecting lifeCyclePluginAnalyzer straight into client site.
+ // TODO: But for some reason the whole plexus appcontext refuses to start when I try this.
+
+ public Set<Plugin> getPluginsBoundByDefaultToAllLifecycles( String packaging )
+ {
+ return lifeCyclePluginAnalyzer.getPluginsBoundByDefaultToAllLifecycles( packaging );
+ }
+
+ // USED BY MAVEN HELP PLUGIN
+
+ @Deprecated
+ public Map<String, Lifecycle> getPhaseToLifecycleMap()
+ {
+ return defaultLifeCycles.getPhaseToLifecycleMap();
+ }
+
+ // NOTE: Backward-compat with maven-help-plugin:2.1
+
+ @SuppressWarnings( { "UnusedDeclaration" } )
+ MojoDescriptor getMojoDescriptor( String task, MavenSession session, MavenProject project, String invokedVia,
+ boolean canUsePrefix, boolean isOptionalMojo )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ PluginVersionResolutionException
+ {
+ return mojoDescriptorCreator.getMojoDescriptor( task, session, project );
+ }
+
+ // Used by m2eclipse
+
+ @SuppressWarnings( { "UnusedDeclaration" } )
+ public MavenExecutionPlan calculateExecutionPlan( MavenSession session, boolean setup, String... tasks )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ PluginManagerException, LifecyclePhaseNotFoundException, LifecycleNotFoundException,
+ PluginVersionResolutionException
+ {
+ List<TaskSegment> taskSegments =
+ lifecycleTaskSegmentCalculator.calculateTaskSegments( session, Arrays.asList( tasks ) );
+
+ TaskSegment mergedSegment = new TaskSegment( false );
+
+ for ( TaskSegment taskSegment : taskSegments )
+ {
+ mergedSegment.getTasks().addAll( taskSegment.getTasks() );
+ }
+
+ return lifecycleExecutionPlanCalculator.calculateExecutionPlan( session, session.getCurrentProject(),
+ mergedSegment.getTasks(), setup );
+ }
+
+ public MavenExecutionPlan calculateExecutionPlan( MavenSession session, String... tasks )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ PluginManagerException, LifecyclePhaseNotFoundException, LifecycleNotFoundException,
+ PluginVersionResolutionException
+ {
+ return calculateExecutionPlan( session, true, tasks );
+ }
+
+ // Site 3.x
+ public void calculateForkedExecutions( MojoExecution mojoExecution, MavenSession session )
+ throws MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ PluginDescriptorParsingException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ lifecycleExecutionPlanCalculator.calculateForkedExecutions( mojoExecution, session );
+ }
+
+ // Site 3.x
+ public List<MavenProject> executeForkedExecutions( MojoExecution mojoExecution, MavenSession session )
+ throws LifecycleExecutionException
+ {
+ return mojoExecutor.executeForkedExecutions( mojoExecution, session,
+ new ProjectIndex( session.getProjects() ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java
new file mode 100644
index 00000000..64c9a7f9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java
@@ -0,0 +1,144 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.StringUtils;
+
+import com.google.common.base.Preconditions;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @since 3.0
+ * @author Jason van Zyl
+ * @author Kristian Rosenvold
+ */
+// TODO: The configuration for the lifecycle needs to be externalized so that I can use the annotations properly for the
+// wiring and reference and external source for the lifecycle configuration.
+@Component( role = DefaultLifecycles.class )
+public class DefaultLifecycles
+{
+ public static final String[] STANDARD_LIFECYCLES = { "default", "clean", "site" };
+
+ // @Configuration(source="org/apache/maven/lifecycle/lifecycles.xml")
+
+ @Requirement( role = Lifecycle.class )
+ private Map<String, Lifecycle> lifecycles;
+
+ @Requirement
+ private Logger logger;
+
+ public DefaultLifecycles()
+ {
+ }
+
+ public DefaultLifecycles( Map<String, Lifecycle> lifecycles, Logger logger )
+ {
+ this.lifecycles = new LinkedHashMap<String, Lifecycle>();
+ this.logger = logger;
+ this.lifecycles = lifecycles;
+ }
+
+ public Lifecycle get( String key )
+ {
+ return getPhaseToLifecycleMap().get( key );
+ }
+
+ /**
+ * We use this to map all phases to the lifecycle that contains it. This is used so that a user can specify the
+ * phase they want to execute and we can easily determine what lifecycle we need to run.
+ *
+ * @return A map of lifecycles, indexed on id
+ */
+ public Map<String, Lifecycle> getPhaseToLifecycleMap()
+ {
+ // If people are going to make their own lifecycles then we need to tell people how to namespace them correctly
+ // so that they don't interfere with internally defined lifecycles.
+
+ HashMap<String, Lifecycle> phaseToLifecycleMap = new HashMap<String, Lifecycle>();
+
+ for ( Lifecycle lifecycle : getLifeCycles() )
+ {
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Lifecycle " + lifecycle );
+ }
+
+ for ( String phase : lifecycle.getPhases() )
+ {
+ // The first definition wins.
+ if ( !phaseToLifecycleMap.containsKey( phase ) )
+ {
+ phaseToLifecycleMap.put( phase, lifecycle );
+ }
+ else
+ {
+ Lifecycle original = phaseToLifecycleMap.get( phase );
+ logger.warn( "Duplicated lifecycle phase " + phase + ". Defined in " + original.getId()
+ + " but also in " + lifecycle.getId() );
+ }
+ }
+ }
+
+ return phaseToLifecycleMap;
+ }
+
+ public List<Lifecycle> getLifeCycles()
+ {
+ // ensure canonical order of standard lifecycles
+ Map<String, Lifecycle> lifecycles = new LinkedHashMap<String, Lifecycle>( this.lifecycles );
+
+ LinkedHashSet<String> lifecycleNames = new LinkedHashSet<String>( Arrays.asList( STANDARD_LIFECYCLES ) );
+ lifecycleNames.addAll( lifecycles.keySet() );
+
+ ArrayList<Lifecycle> result = new ArrayList<Lifecycle>();
+ for ( String name : lifecycleNames )
+ {
+ Lifecycle lifecycle = lifecycles.get( name );
+ Preconditions.checkNotNull( "A lifecycle must have an id.", lifecycle.getId() );
+ result.add( lifecycle );
+ }
+
+ return result;
+ }
+
+ public String getLifecyclePhaseList()
+ {
+ Set<String> phases = new LinkedHashSet<String>();
+
+ for ( Lifecycle lifecycle : getLifeCycles() )
+ {
+ phases.addAll( lifecycle.getPhases() );
+ }
+
+ return StringUtils.join( phases.iterator(), ", " );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifeCyclePluginAnalyzer.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifeCyclePluginAnalyzer.java
new file mode 100644
index 00000000..ed07c1d5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifeCyclePluginAnalyzer.java
@@ -0,0 +1,32 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Set;
+import org.apache.maven.model.Plugin;
+
+/**
+ * @since 3.0
+ * @author Kristian Rosenvold
+ */
+public interface LifeCyclePluginAnalyzer
+{
+ Set<Plugin> getPluginsBoundByDefaultToAllLifecycles( String packaging );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/Lifecycle.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/Lifecycle.java
new file mode 100644
index 00000000..fcfde951
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/Lifecycle.java
@@ -0,0 +1,80 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Class Lifecycle.
+ */
+public class Lifecycle
+{
+ public Lifecycle()
+ {
+ }
+
+ public Lifecycle( String id, List<String> phases, Map<String, String> defaultPhases )
+ {
+ this.id = id;
+ this.phases = phases;
+ this.defaultPhases = defaultPhases;
+ }
+
+ // <lifecycle>
+ // <id>clean</id>
+ // <phases>
+ // <phase>pre-clean</phase>
+ // <phase>clean</phase>
+ // <phase>post-clean</phase>
+ // </phases>
+ // <default-phases>
+ // <clean>org.apache.maven.plugins:maven-clean-plugin:clean</clean>
+ // </default-phases>
+ // </lifecycle>
+
+ private String id;
+
+ private List<String> phases;
+
+ private Map<String, String> defaultPhases;
+
+ public String getId()
+ {
+ return this.id;
+ }
+
+ public List<String> getPhases()
+ {
+ return this.phases;
+ }
+
+ public Map<String, String> getDefaultPhases()
+ {
+ return defaultPhases;
+ }
+
+ @Override
+ public String toString()
+ {
+ return id + " -> " + phases;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java
new file mode 100644
index 00000000..349576cd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java
@@ -0,0 +1,111 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ */
+public class LifecycleExecutionException
+ extends Exception
+{
+ private MavenProject project;
+
+ public LifecycleExecutionException( String message )
+ {
+ super( message );
+ }
+
+ public LifecycleExecutionException( Throwable cause )
+ {
+ super( cause );
+ }
+
+ public LifecycleExecutionException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ public LifecycleExecutionException( String message, MavenProject project )
+ {
+ super( message );
+ this.project = project;
+ }
+
+ public LifecycleExecutionException( String message, MojoExecution execution, MavenProject project )
+ {
+ super( message );
+ this.project = project;
+ }
+
+ public LifecycleExecutionException( String message, MojoExecution execution, MavenProject project, Throwable cause )
+ {
+ super( message, cause );
+ this.project = project;
+ }
+
+ public LifecycleExecutionException( MojoExecution execution, MavenProject project, Throwable cause )
+ {
+ this( createMessage( execution, project, cause ), execution, project, cause );
+ }
+
+ public MavenProject getProject()
+ {
+ return project;
+ }
+
+ private static String createMessage( MojoExecution execution, MavenProject project, Throwable cause )
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+
+ buffer.append( "Failed to execute goal" );
+
+ if ( execution != null )
+ {
+ buffer.append( ' ' );
+ buffer.append( execution.getGroupId() );
+ buffer.append( ':' );
+ buffer.append( execution.getArtifactId() );
+ buffer.append( ':' );
+ buffer.append( execution.getVersion() );
+ buffer.append( ':' );
+ buffer.append( execution.getGoal() );
+ buffer.append( " (" );
+ buffer.append( execution.getExecutionId() );
+ buffer.append( ")" );
+ }
+
+ if ( project != null )
+ {
+ buffer.append( " on project " );
+ buffer.append( project.getArtifactId() );
+ }
+
+ if ( cause != null )
+ {
+ buffer.append( ": " ).append( cause.getMessage() );
+ }
+
+ return buffer.toString();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java
new file mode 100644
index 00000000..04c602cf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java
@@ -0,0 +1,89 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginManagerException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.project.MavenProject;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * A facade that provides lifecycle services to components outside Maven core.
+ *
+ * @author Jason van Zyl
+ */
+public interface LifecycleExecutor
+{
+
+ // USED BY MAVEN HELP PLUGIN
+ @Deprecated
+ String ROLE = LifecycleExecutor.class.getName();
+
+ // For a given project packaging find all the plugins that are bound to any registered
+ // lifecycles. The project builder needs to now what default plugin information needs to be
+ // merged into POM being built. Once the POM builder has this plugin information, versions can be assigned
+ // by the POM builder because they will have to be defined in plugin management. Once this is setComplete then it
+ // can be passed back so that the default configuration information can be populated.
+ //
+ // We need to know the specific version so that we can lookup the right version of the plugin descriptor
+ // which tells us what the default configuration is.
+ //
+
+ /**
+ * @return The plugins bound to the lifecycles of the specified packaging or {@code null} if the packaging is
+ * unknown.
+ */
+ Set<Plugin> getPluginsBoundByDefaultToAllLifecycles( String packaging );
+
+ MavenExecutionPlan calculateExecutionPlan( MavenSession session, String... tasks )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ PluginManagerException, LifecyclePhaseNotFoundException, LifecycleNotFoundException,
+ PluginVersionResolutionException;
+
+ MavenExecutionPlan calculateExecutionPlan( MavenSession session, boolean setup, String... tasks )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ PluginManagerException, LifecyclePhaseNotFoundException, LifecycleNotFoundException,
+ PluginVersionResolutionException;
+
+ void execute( MavenSession session );
+
+ // used by the site plugin 3.x
+ void calculateForkedExecutions( MojoExecution mojoExecution, MavenSession session )
+ throws MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ PluginDescriptorParsingException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException;
+
+ // used by the site plugin 3.x
+ List<MavenProject> executeForkedExecutions( MojoExecution mojoExecution, MavenSession session )
+ throws LifecycleExecutionException;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleMappingDelegate.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleMappingDelegate.java
new file mode 100644
index 00000000..f0701987
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleMappingDelegate.java
@@ -0,0 +1,52 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Lifecycle mapping delegate component interface. Calculates project build execution plan given {@link Lifecycle} and
+ * lifecycle phase. Standard lifecycles use plugin execution {@code <phase>} or mojo default lifecycle phase to
+ * calculate the execution plan, but custom lifecycles can use alternative mapping strategies.
+ * <p>
+ * Implementations of this interface must be annotated with either {@code @Named("lifecycle-id")} or equivalent plexus
+ * {@code @Component} annotations.
+ *
+ * @since 3.2.0
+ * @see org.apache.maven.lifecycle.internal.DefaultLifecycleMappingDelegate
+ * @author ifedorenko
+ */
+public interface LifecycleMappingDelegate
+{
+ Map<String, List<MojoExecution>> calculateLifecycleMappings( MavenSession session, MavenProject project,
+ Lifecycle lifecycle, String lifecyclePhase )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, InvalidPluginDescriptorException;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleNotFoundException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleNotFoundException.java
new file mode 100644
index 00000000..e9ff0c20
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleNotFoundException.java
@@ -0,0 +1,54 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Signals a failure to locate a lifecycle.
+ *
+ * @author Benjamin Bentmann
+ */
+public class LifecycleNotFoundException
+ extends Exception
+{
+
+ private final String lifecycleId;
+
+ /**
+ * Creates a new exception to indicate that the specified lifecycle is unknown.
+ *
+ * @param lifecycleId The identifier of the lifecycle that could not be located, may be {@code null}.
+ */
+ public LifecycleNotFoundException( String lifecycleId )
+ {
+ super( "Unknown lifecycle " + lifecycleId );
+ this.lifecycleId = ( lifecycleId != null ) ? lifecycleId : "";
+ }
+
+ /**
+ * Gets the identifier of the lifecycle that was not found.
+ *
+ * @return The identifier of the lifecycle that was not found, never {@code null}.
+ */
+ public String getLifecycleId()
+ {
+ return lifecycleId;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecyclePhaseNotFoundException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecyclePhaseNotFoundException.java
new file mode 100644
index 00000000..fab1d2f2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecyclePhaseNotFoundException.java
@@ -0,0 +1,55 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Signals a failure to locate the lifecycle for some phase.
+ *
+ * @author Benjamin Bentmann
+ */
+public class LifecyclePhaseNotFoundException
+ extends Exception
+{
+
+ private final String lifecyclePhase;
+
+ /**
+ * Creates a new exception to indicate that the specified lifecycle phase is not defined by any known lifecycle.
+ *
+ * @param message The detail message, may be {@code null}.
+ * @param lifecyclePhase The name of the lifecycle phase that could not be located, may be {@code null}.
+ */
+ public LifecyclePhaseNotFoundException( String message, String lifecyclePhase )
+ {
+ super( message );
+ this.lifecyclePhase = ( lifecyclePhase != null ) ? lifecyclePhase : "";
+ }
+
+ /**
+ * Gets the lifecycle phase that was not found.
+ *
+ * @return The lifecycle phase that was not found, never {@code null}.
+ */
+ public String getLifecyclePhase()
+ {
+ return lifecyclePhase;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/MavenExecutionPlan.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/MavenExecutionPlan.java
new file mode 100644
index 00000000..7767ea25
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/MavenExecutionPlan.java
@@ -0,0 +1,202 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.lifecycle.internal.ExecutionPlanItem;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+
+//TODO: lifecycles being executed
+//TODO: what runs in each phase
+//TODO: plugins that need downloading
+//TODO: project dependencies that need downloading
+//TODO: unfortunately the plugins need to be downloaded in order to get the plugin.xml file. need to externalize this
+// from the plugin archive.
+//TODO: this will be the class that people get in IDEs to modify
+
+public class MavenExecutionPlan
+ implements Iterable<ExecutionPlanItem>
+{
+
+ /*
+ At the moment, this class is totally immutable, and this is in line with thoughts about the
+ pre-calculated execution plan that stays the same during the execution.
+
+ If deciding to add mutable state to this class, it should be at least considered to
+ separate this into a separate mutable structure.
+
+ */
+
+ private final List<ExecutionPlanItem> planItem;
+
+ private final Map<String, ExecutionPlanItem> lastMojoExecutionForAllPhases;
+
+ final List<String> phasesInExecutionPlan;
+
+ public MavenExecutionPlan( List<ExecutionPlanItem> planItem, DefaultLifecycles defaultLifecycles )
+ {
+ this.planItem = planItem;
+
+ lastMojoExecutionForAllPhases = new LinkedHashMap<String, ExecutionPlanItem>();
+
+ LinkedHashSet<String> totalPhaseSet = new LinkedHashSet<String>();
+ if ( defaultLifecycles != null )
+ {
+ for ( String phase : getDistinctPhasesInOrderOfExecutionPlanAppearance( planItem ) )
+ {
+ final Lifecycle lifecycle = defaultLifecycles.get( phase );
+ if ( lifecycle != null )
+ {
+ totalPhaseSet.addAll( lifecycle.getPhases() );
+ }
+ }
+ }
+ this.phasesInExecutionPlan = new ArrayList<String>( totalPhaseSet );
+
+ Map<String, ExecutionPlanItem> lastInExistingPhases = new HashMap<String, ExecutionPlanItem>();
+ for ( ExecutionPlanItem executionPlanItem : getExecutionPlanItems() )
+ {
+ lastInExistingPhases.put( executionPlanItem.getLifecyclePhase(), executionPlanItem );
+ }
+
+ ExecutionPlanItem lastSeenExecutionPlanItem = null;
+
+ for ( String phase : totalPhaseSet )
+ {
+ ExecutionPlanItem forThisPhase = lastInExistingPhases.get( phase );
+ if ( forThisPhase != null )
+ {
+ lastSeenExecutionPlanItem = forThisPhase;
+ }
+
+ lastMojoExecutionForAllPhases.put( phase, lastSeenExecutionPlanItem );
+ }
+ }
+
+ public Iterator<ExecutionPlanItem> iterator()
+ {
+ return getExecutionPlanItems().iterator();
+ }
+
+ /**
+ * Returns the last ExecutionPlanItem in the supplied phase. If no items are in the specified phase,
+ * the closest executionPlanItem from an earlier phase item will be returned.
+ *
+ * @param requestedPhase the requested phase
+ * The execution plan item
+ * @return The ExecutionPlanItem or null if none can be found
+ */
+ public ExecutionPlanItem findLastInPhase( String requestedPhase )
+ {
+ return lastMojoExecutionForAllPhases.get( requestedPhase );
+ }
+
+ private List<ExecutionPlanItem> getExecutionPlanItems()
+ {
+ return planItem;
+ }
+
+ private static Iterable<String> getDistinctPhasesInOrderOfExecutionPlanAppearance(
+ List<ExecutionPlanItem> planItems )
+ {
+ LinkedHashSet<String> result = new LinkedHashSet<String>();
+ for ( ExecutionPlanItem executionPlanItem : planItems )
+ {
+ final String phase = executionPlanItem.getLifecyclePhase();
+ if ( !result.contains( phase ) )
+ {
+ result.add( phase );
+ }
+ }
+ return result;
+ }
+
+ public List<MojoExecution> getMojoExecutions()
+ {
+ List<MojoExecution> result = new ArrayList<MojoExecution>();
+ for ( ExecutionPlanItem executionPlanItem : planItem )
+ {
+ result.add( executionPlanItem.getMojoExecution() );
+ }
+ return result;
+ }
+
+ /**
+ * Get set of plugins having a goal/mojo used but not marked @threadSafe
+ *
+ * @return the set of plugins (without info on which goal is concerned)
+ */
+ public Set<Plugin> getNonThreadSafePlugins()
+ {
+ Set<Plugin> plugins = new HashSet<Plugin>();
+ for ( ExecutionPlanItem executionPlanItem : planItem )
+ {
+ final MojoExecution mojoExecution = executionPlanItem.getMojoExecution();
+ if ( !mojoExecution.getMojoDescriptor().isThreadSafe() )
+ {
+ plugins.add( mojoExecution.getPlugin() );
+ }
+ }
+ return plugins;
+ }
+
+ /**
+ * Get set of mojos used but not marked @threadSafe
+ *
+ * @return the set of mojo descriptors
+ */
+ public Set<MojoDescriptor> getNonThreadSafeMojos()
+ {
+ Set<MojoDescriptor> mojos = new HashSet<MojoDescriptor>();
+ for ( ExecutionPlanItem executionPlanItem : planItem )
+ {
+ final MojoExecution mojoExecution = executionPlanItem.getMojoExecution();
+ if ( !mojoExecution.getMojoDescriptor().isThreadSafe() )
+ {
+ mojos.add( mojoExecution.getMojoDescriptor() );
+ }
+ }
+ return mojos;
+ }
+
+ // Used by m2e but will be removed, really.
+ @Deprecated
+ public List<MojoExecution> getExecutions()
+ {
+ return getMojoExecutions();
+ }
+
+ public int size()
+ {
+ return planItem.size();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/MissingProjectException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/MissingProjectException.java
new file mode 100644
index 00000000..571e1d2b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/MissingProjectException.java
@@ -0,0 +1,41 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Signals a failure to execute a lifecycle phase or mojo because a project is required but not present.
+ *
+ * @author Benjamin Bentmann
+ */
+public class MissingProjectException
+ extends Exception
+{
+
+ /**
+ * Creates a new exception.
+ *
+ * @param message The detail message, may be {@code null}.
+ */
+ public MissingProjectException( String message )
+ {
+ super( message );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/MojoExecutionConfigurator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/MojoExecutionConfigurator.java
new file mode 100644
index 00000000..b85bac77
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/MojoExecutionConfigurator.java
@@ -0,0 +1,44 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * A MojoExecutionConfigurator is responsible for creating the configuration for Mojo based on configuration for a Mojo
+ * in the MavenProject and the default configuration for the Mojo from the containing plugin's plugin.xml descriptor.
+ *
+ * @provisional
+ * @author Jason van Zyl
+ * @since 3.3.1, MNG-5753
+ */
+public interface MojoExecutionConfigurator
+{
+ /**
+ * Create the MojoExecution configuration based on configuration for a Mojo in the MavenProject and the
+ * default configuration for the Mojo from the containing plugin's plugin.xml descriptor.
+ *
+ * @param project
+ * @param mojoExecution
+ * @param allowPluginLevelConfig
+ */
+ void configure( MavenProject project, MojoExecution mojoExecution, boolean allowPluginLevelConfig );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/NoGoalSpecifiedException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/NoGoalSpecifiedException.java
new file mode 100644
index 00000000..2ac9638a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/NoGoalSpecifiedException.java
@@ -0,0 +1,41 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Signals a failure to build because no goal was specified.
+ *
+ * @author Benjamin Bentmann
+ */
+public class NoGoalSpecifiedException
+ extends Exception
+{
+
+ /**
+ * Creates a new exception.
+ *
+ * @param message The detail message, may be {@code null}.
+ */
+ public NoGoalSpecifiedException( String message )
+ {
+ super( message );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java
new file mode 100644
index 00000000..771385cc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java
@@ -0,0 +1,67 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.internal.builder.BuilderCommon;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.annotations.Component;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @since 3.0
+ * @author Kristian Rosenvold
+ * This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+@Component( role = BuildListCalculator.class )
+public class BuildListCalculator
+{
+ public ProjectBuildList calculateProjectBuilds( MavenSession session, List<TaskSegment> taskSegments )
+ {
+ List<ProjectSegment> projectBuilds = new ArrayList<ProjectSegment>();
+
+ MavenProject rootProject = session.getTopLevelProject();
+
+ for ( TaskSegment taskSegment : taskSegments )
+ {
+ List<MavenProject> projects;
+
+ if ( taskSegment.isAggregating() )
+ {
+ projects = Collections.singletonList( rootProject );
+ }
+ else
+ {
+ projects = session.getProjects();
+ }
+ for ( MavenProject project : projects )
+ {
+ BuilderCommon.attachToThread( project ); // Not totally sure if this is needed for anything
+ MavenSession copiedSession = session.clone();
+ copiedSession.setCurrentProject( project );
+ projectBuilds.add( new ProjectSegment( project, taskSegment, copiedSession ) );
+ }
+ }
+ return new ProjectBuildList( projectBuilds );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildThreadFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildThreadFactory.java
new file mode 100644
index 00000000..01545078
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildThreadFactory.java
@@ -0,0 +1,39 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Simple {@link ThreadFactory} implementation that ensures the corresponding threads have a meaningful name.
+ */
+public class BuildThreadFactory
+ implements ThreadFactory
+{
+ private final AtomicInteger id = new AtomicInteger();
+
+ private static final String PREFIX = "BuilderThread";
+
+ public Thread newThread( Runnable r )
+ {
+ return new Thread( r, String.format( "%s %d", PREFIX, id.getAndIncrement() ) );
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/CompoundProjectExecutionListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/CompoundProjectExecutionListener.java
new file mode 100644
index 00000000..f2a8291a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/CompoundProjectExecutionListener.java
@@ -0,0 +1,72 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+
+import org.apache.maven.execution.ProjectExecutionEvent;
+import org.apache.maven.execution.ProjectExecutionListener;
+import org.apache.maven.lifecycle.LifecycleExecutionException;
+
+class CompoundProjectExecutionListener
+ implements ProjectExecutionListener
+{
+ private final Collection<ProjectExecutionListener> listeners;
+
+ public CompoundProjectExecutionListener( Collection<ProjectExecutionListener> listeners )
+ {
+ this.listeners = listeners; // NB this is live injected collection
+ }
+
+ public void beforeProjectExecution( ProjectExecutionEvent event )
+ throws LifecycleExecutionException
+ {
+ for ( ProjectExecutionListener listener : listeners )
+ {
+ listener.beforeProjectExecution( event );
+ }
+ }
+
+ public void beforeProjectLifecycleExecution( ProjectExecutionEvent event )
+ throws LifecycleExecutionException
+ {
+ for ( ProjectExecutionListener listener : listeners )
+ {
+ listener.beforeProjectLifecycleExecution( event );
+ }
+ }
+
+ public void afterProjectExecutionSuccess( ProjectExecutionEvent event )
+ throws LifecycleExecutionException
+ {
+ for ( ProjectExecutionListener listener : listeners )
+ {
+ listener.afterProjectExecutionSuccess( event );
+ }
+ }
+
+ public void afterProjectExecutionFailure( ProjectExecutionEvent event )
+ {
+ for ( ProjectExecutionListener listener : listeners )
+ {
+ listener.afterProjectExecutionFailure( event );
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultExecutionEvent.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultExecutionEvent.java
new file mode 100644
index 00000000..9434a659
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultExecutionEvent.java
@@ -0,0 +1,77 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.ExecutionEvent;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Holds data relevant for an execution event.
+ *
+ * @author Benjamin Bentmann
+ */
+class DefaultExecutionEvent
+ implements ExecutionEvent
+{
+
+ private final Type type;
+
+ private final MavenSession session;
+
+ private final MojoExecution mojoExecution;
+
+ private final Exception exception;
+
+ public DefaultExecutionEvent( Type type, MavenSession session, MojoExecution mojoExecution, Exception exception )
+ {
+ this.type = type;
+ this.session = session;
+ this.mojoExecution = mojoExecution;
+ this.exception = exception;
+ }
+
+ public Type getType()
+ {
+ return type;
+ }
+
+ public MavenSession getSession()
+ {
+ return session;
+ }
+
+ public MavenProject getProject()
+ {
+ return session.getCurrentProject();
+ }
+
+ public MojoExecution getMojoExecution()
+ {
+ return mojoExecution;
+ }
+
+ public Exception getException()
+ {
+ return exception;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultExecutionEventCatapult.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultExecutionEventCatapult.java
new file mode 100644
index 00000000..bfb98d43
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultExecutionEventCatapult.java
@@ -0,0 +1,119 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.ExecutionEvent;
+import org.apache.maven.execution.ExecutionListener;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.MojoExecution;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Assists in firing execution events. <strong>Warning:</strong> This is an internal utility class that is only public
+ * for technical reasons, it is not part of the public API. In particular, this class can be changed or deleted without
+ * prior notice.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = ExecutionEventCatapult.class )
+public class DefaultExecutionEventCatapult
+ implements ExecutionEventCatapult
+{
+
+ public void fire( ExecutionEvent.Type eventType, MavenSession session, MojoExecution mojoExecution )
+ {
+ fire( eventType, session, mojoExecution, null );
+ }
+
+ public void fire( ExecutionEvent.Type eventType, MavenSession session, MojoExecution mojoExecution,
+ Exception exception )
+ {
+ ExecutionListener listener = session.getRequest().getExecutionListener();
+
+ if ( listener != null )
+ {
+ ExecutionEvent event = new DefaultExecutionEvent( eventType, session, mojoExecution, exception );
+
+ switch ( eventType )
+ {
+ case ProjectDiscoveryStarted:
+ listener.projectDiscoveryStarted( event );
+ break;
+
+ case SessionStarted:
+ listener.sessionStarted( event );
+ break;
+ case SessionEnded:
+ listener.sessionEnded( event );
+ break;
+
+ case ProjectSkipped:
+ listener.projectSkipped( event );
+ break;
+ case ProjectStarted:
+ listener.projectStarted( event );
+ break;
+ case ProjectSucceeded:
+ listener.projectSucceeded( event );
+ break;
+ case ProjectFailed:
+ listener.projectFailed( event );
+ break;
+
+ case MojoSkipped:
+ listener.mojoSkipped( event );
+ break;
+ case MojoStarted:
+ listener.mojoStarted( event );
+ break;
+ case MojoSucceeded:
+ listener.mojoSucceeded( event );
+ break;
+ case MojoFailed:
+ listener.mojoFailed( event );
+ break;
+
+ case ForkStarted:
+ listener.forkStarted( event );
+ break;
+ case ForkSucceeded:
+ listener.forkSucceeded( event );
+ break;
+ case ForkFailed:
+ listener.forkFailed( event );
+ break;
+
+ case ForkedProjectStarted:
+ listener.forkedProjectStarted( event );
+ break;
+ case ForkedProjectSucceeded:
+ listener.forkedProjectSucceeded( event );
+ break;
+ case ForkedProjectFailed:
+ listener.forkedProjectFailed( event );
+ break;
+
+ default:
+ throw new IllegalStateException( "Unknown execution event type " + eventType );
+ }
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java
new file mode 100644
index 00000000..8cc47cc5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java
@@ -0,0 +1,591 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.DefaultLifecycles;
+import org.apache.maven.lifecycle.Lifecycle;
+import org.apache.maven.lifecycle.LifecycleMappingDelegate;
+import org.apache.maven.lifecycle.LifecycleNotFoundException;
+import org.apache.maven.lifecycle.LifecyclePhaseNotFoundException;
+import org.apache.maven.lifecycle.MavenExecutionPlan;
+import org.apache.maven.lifecycle.MojoExecutionConfigurator;
+import org.apache.maven.lifecycle.internal.builder.BuilderCommon;
+import org.apache.maven.plugin.BuildPluginManager;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.Parameter;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.plugin.lifecycle.Execution;
+import org.apache.maven.plugin.lifecycle.Phase;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.plugin.version.PluginVersionResolver;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * @since 3.0
+ * @author Benjamin Bentmann
+ * @author Kristian Rosenvold (Extract class)
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+@Component( role = LifecycleExecutionPlanCalculator.class )
+public class DefaultLifecycleExecutionPlanCalculator
+ implements LifecycleExecutionPlanCalculator
+{
+ @Requirement
+ private PluginVersionResolver pluginVersionResolver;
+
+ @Requirement
+ private BuildPluginManager pluginManager;
+
+ @Requirement
+ private DefaultLifecycles defaultLifeCycles;
+
+ @Requirement
+ private MojoDescriptorCreator mojoDescriptorCreator;
+
+ @Requirement
+ private LifecyclePluginResolver lifecyclePluginResolver;
+
+ @Requirement( hint = DefaultLifecycleMappingDelegate.HINT )
+ private LifecycleMappingDelegate standardDelegate;
+
+ @Requirement
+ private Map<String, LifecycleMappingDelegate> delegates;
+
+ @Requirement
+ private Map<String, MojoExecutionConfigurator> mojoExecutionConfigurators;
+
+ @SuppressWarnings( { "UnusedDeclaration" } )
+ public DefaultLifecycleExecutionPlanCalculator()
+ {
+ }
+
+ // Only used for testing
+ public DefaultLifecycleExecutionPlanCalculator( BuildPluginManager pluginManager,
+ DefaultLifecycles defaultLifeCycles,
+ MojoDescriptorCreator mojoDescriptorCreator,
+ LifecyclePluginResolver lifecyclePluginResolver )
+ {
+ this.pluginManager = pluginManager;
+ this.defaultLifeCycles = defaultLifeCycles;
+ this.mojoDescriptorCreator = mojoDescriptorCreator;
+ this.lifecyclePluginResolver = lifecyclePluginResolver;
+ this.mojoExecutionConfigurators =
+ ImmutableMap.of( "default", (MojoExecutionConfigurator) new DefaultMojoExecutionConfigurator() );
+ }
+
+ @Override
+ public MavenExecutionPlan calculateExecutionPlan( MavenSession session, MavenProject project, List<Object> tasks,
+ boolean setup )
+ throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException,
+ PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException,
+ NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ lifecyclePluginResolver.resolveMissingPluginVersions( project, session );
+
+ final List<MojoExecution> executions = calculateMojoExecutions( session, project, tasks );
+
+ if ( setup )
+ {
+ setupMojoExecutions( session, project, executions );
+ }
+
+ final List<ExecutionPlanItem> planItem = ExecutionPlanItem.createExecutionPlanItems( project, executions );
+
+ return new MavenExecutionPlan( planItem, defaultLifeCycles );
+ }
+
+ @Override
+ public MavenExecutionPlan calculateExecutionPlan( MavenSession session, MavenProject project, List<Object> tasks )
+ throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException,
+ PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException,
+ NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ return calculateExecutionPlan( session, project, tasks, true );
+ }
+
+ private void setupMojoExecutions( MavenSession session, MavenProject project, List<MojoExecution> mojoExecutions )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, InvalidPluginDescriptorException, NoPluginFoundForPrefixException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ for ( MojoExecution mojoExecution : mojoExecutions )
+ {
+ setupMojoExecution( session, project, mojoExecution );
+ }
+ }
+
+ @Override
+ public void setupMojoExecution( MavenSession session, MavenProject project, MojoExecution mojoExecution )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, InvalidPluginDescriptorException, NoPluginFoundForPrefixException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+
+ if ( mojoDescriptor == null )
+ {
+ mojoDescriptor =
+ pluginManager.getMojoDescriptor( mojoExecution.getPlugin(), mojoExecution.getGoal(),
+ project.getRemotePluginRepositories(),
+ session.getRepositorySession() );
+
+ mojoExecution.setMojoDescriptor( mojoDescriptor );
+ }
+
+ mojoExecutionConfigurator( mojoExecution ).configure( project,
+ mojoExecution,
+ MojoExecution.Source.CLI.equals( mojoExecution.getSource() ) );
+
+ finalizeMojoConfiguration( mojoExecution );
+
+ calculateForkedExecutions( mojoExecution, session, project, new HashSet<MojoDescriptor>() );
+ }
+
+ public List<MojoExecution> calculateMojoExecutions( MavenSession session, MavenProject project, List<Object> tasks )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ PluginVersionResolutionException, LifecyclePhaseNotFoundException
+ {
+ final List<MojoExecution> mojoExecutions = new ArrayList<MojoExecution>();
+
+ for ( Object task : tasks )
+ {
+ if ( task instanceof GoalTask )
+ {
+ String pluginGoal = ( (GoalTask) task ).pluginGoal;
+
+ String executionId = "default-cli";
+ int executionIdx = pluginGoal.indexOf( '@' );
+ if ( executionIdx > 0 )
+ {
+ executionId = pluginGoal.substring( executionIdx + 1 );
+ }
+
+ MojoDescriptor mojoDescriptor = mojoDescriptorCreator.getMojoDescriptor( pluginGoal, session, project );
+
+ MojoExecution mojoExecution = new MojoExecution( mojoDescriptor, executionId,
+ MojoExecution.Source.CLI );
+
+ mojoExecutions.add( mojoExecution );
+ }
+ else if ( task instanceof LifecycleTask )
+ {
+ String lifecyclePhase = ( (LifecycleTask) task ).getLifecyclePhase();
+
+ Map<String, List<MojoExecution>> phaseToMojoMapping =
+ calculateLifecycleMappings( session, project, lifecyclePhase );
+
+ for ( List<MojoExecution> mojoExecutionsFromLifecycle : phaseToMojoMapping.values() )
+ {
+ mojoExecutions.addAll( mojoExecutionsFromLifecycle );
+ }
+ }
+ else
+ {
+ throw new IllegalStateException( "unexpected task " + task );
+ }
+ }
+ return mojoExecutions;
+ }
+
+ private Map<String, List<MojoExecution>> calculateLifecycleMappings( MavenSession session, MavenProject project,
+ String lifecyclePhase )
+ throws LifecyclePhaseNotFoundException, PluginNotFoundException, PluginResolutionException,
+ PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException
+ {
+ /*
+ * Determine the lifecycle that corresponds to the given phase.
+ */
+
+ Lifecycle lifecycle = defaultLifeCycles.get( lifecyclePhase );
+
+ if ( lifecycle == null )
+ {
+ throw new LifecyclePhaseNotFoundException( "Unknown lifecycle phase \"" + lifecyclePhase
+ + "\". You must specify a valid lifecycle phase" + " or a goal in the format <plugin-prefix>:<goal> or"
+ + " <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: "
+ + defaultLifeCycles.getLifecyclePhaseList() + ".", lifecyclePhase );
+ }
+
+ LifecycleMappingDelegate delegate;
+ if ( Arrays.binarySearch( DefaultLifecycles.STANDARD_LIFECYCLES, lifecycle.getId() ) >= 0 )
+ {
+ delegate = standardDelegate;
+ }
+ else
+ {
+ delegate = delegates.get( lifecycle.getId() );
+ if ( delegate == null )
+ {
+ delegate = standardDelegate;
+ }
+ }
+
+ return delegate.calculateLifecycleMappings( session, project, lifecycle, lifecyclePhase );
+ }
+
+ /**
+ * Post-processes the effective configuration for the specified mojo execution. This step discards all parameters
+ * from the configuration that are not applicable to the mojo and injects the default values for any missing
+ * parameters.
+ *
+ * @param mojoExecution The mojo execution whose configuration should be finalized, must not be {@code null}.
+ */
+ private void finalizeMojoConfiguration( MojoExecution mojoExecution )
+ {
+ MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+
+ Xpp3Dom executionConfiguration = mojoExecution.getConfiguration();
+ if ( executionConfiguration == null )
+ {
+ executionConfiguration = new Xpp3Dom( "configuration" );
+ }
+
+ Xpp3Dom defaultConfiguration = getMojoConfiguration( mojoDescriptor );
+
+ Xpp3Dom finalConfiguration = new Xpp3Dom( "configuration" );
+
+ if ( mojoDescriptor.getParameters() != null )
+ {
+ for ( Parameter parameter : mojoDescriptor.getParameters() )
+ {
+ Xpp3Dom parameterConfiguration = executionConfiguration.getChild( parameter.getName() );
+
+ if ( parameterConfiguration == null )
+ {
+ parameterConfiguration = executionConfiguration.getChild( parameter.getAlias() );
+ }
+
+ Xpp3Dom parameterDefaults = defaultConfiguration.getChild( parameter.getName() );
+
+ parameterConfiguration = Xpp3Dom.mergeXpp3Dom( parameterConfiguration, parameterDefaults,
+ Boolean.TRUE );
+
+ if ( parameterConfiguration != null )
+ {
+ parameterConfiguration = new Xpp3Dom( parameterConfiguration, parameter.getName() );
+
+ if ( StringUtils.isEmpty( parameterConfiguration.getAttribute( "implementation" ) )
+ && StringUtils.isNotEmpty( parameter.getImplementation() ) )
+ {
+ parameterConfiguration.setAttribute( "implementation", parameter.getImplementation() );
+ }
+
+ finalConfiguration.addChild( parameterConfiguration );
+ }
+ }
+ }
+
+ mojoExecution.setConfiguration( finalConfiguration );
+ }
+
+ private Xpp3Dom getMojoConfiguration( MojoDescriptor mojoDescriptor )
+ {
+ return MojoDescriptorCreator.convert( mojoDescriptor );
+ }
+
+ @Override
+ public void calculateForkedExecutions( MojoExecution mojoExecution, MavenSession session )
+ throws MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ PluginDescriptorParsingException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ calculateForkedExecutions( mojoExecution, session, session.getCurrentProject(), new HashSet<MojoDescriptor>() );
+ }
+
+ private void calculateForkedExecutions( MojoExecution mojoExecution, MavenSession session, MavenProject project,
+ Collection<MojoDescriptor> alreadyForkedExecutions )
+ throws MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ PluginDescriptorParsingException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+
+ if ( !mojoDescriptor.isForking() )
+ {
+ return;
+ }
+
+ if ( !alreadyForkedExecutions.add( mojoDescriptor ) )
+ {
+ return;
+ }
+
+ List<MavenProject> forkedProjects =
+ LifecycleDependencyResolver.getProjects( project, session, mojoDescriptor.isAggregator() );
+
+ for ( MavenProject forkedProject : forkedProjects )
+ {
+ if ( forkedProject != project )
+ {
+ lifecyclePluginResolver.resolveMissingPluginVersions( forkedProject, session );
+ }
+
+ List<MojoExecution> forkedExecutions;
+
+ if ( StringUtils.isNotEmpty( mojoDescriptor.getExecutePhase() ) )
+ {
+ forkedExecutions =
+ calculateForkedLifecycle( mojoExecution, session, forkedProject, alreadyForkedExecutions );
+ }
+ else
+ {
+ forkedExecutions = calculateForkedGoal( mojoExecution, session, forkedProject,
+ alreadyForkedExecutions );
+ }
+
+ mojoExecution.setForkedExecutions( BuilderCommon.getKey( forkedProject ), forkedExecutions );
+ }
+
+ alreadyForkedExecutions.remove( mojoDescriptor );
+ }
+
+ private List<MojoExecution> calculateForkedLifecycle( MojoExecution mojoExecution, MavenSession session,
+ MavenProject project,
+ Collection<MojoDescriptor> alreadyForkedExecutions )
+ throws MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ PluginDescriptorParsingException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+
+ String forkedPhase = mojoDescriptor.getExecutePhase();
+
+ Map<String, List<MojoExecution>> lifecycleMappings = calculateLifecycleMappings( session, project,
+ forkedPhase );
+
+ for ( List<MojoExecution> forkedExecutions : lifecycleMappings.values() )
+ {
+ for ( MojoExecution forkedExecution : forkedExecutions )
+ {
+ if ( forkedExecution.getMojoDescriptor() == null )
+ {
+ MojoDescriptor forkedMojoDescriptor =
+ pluginManager.getMojoDescriptor( forkedExecution.getPlugin(), forkedExecution.getGoal(),
+ project.getRemotePluginRepositories(),
+ session.getRepositorySession() );
+
+ forkedExecution.setMojoDescriptor( forkedMojoDescriptor );
+ }
+
+ mojoExecutionConfigurator( forkedExecution ).configure( project, forkedExecution, false );
+ }
+ }
+
+ injectLifecycleOverlay( lifecycleMappings, mojoExecution, session, project );
+
+ List<MojoExecution> mojoExecutions = new ArrayList<MojoExecution>();
+
+ for ( List<MojoExecution> forkedExecutions : lifecycleMappings.values() )
+ {
+ for ( MojoExecution forkedExecution : forkedExecutions )
+ {
+ if ( !alreadyForkedExecutions.contains( forkedExecution.getMojoDescriptor() ) )
+ {
+ finalizeMojoConfiguration( forkedExecution );
+
+ calculateForkedExecutions( forkedExecution, session, project, alreadyForkedExecutions );
+
+ mojoExecutions.add( forkedExecution );
+ }
+ }
+ }
+
+ return mojoExecutions;
+ }
+
+ private void injectLifecycleOverlay( Map<String, List<MojoExecution>> lifecycleMappings,
+ MojoExecution mojoExecution, MavenSession session, MavenProject project )
+ throws PluginDescriptorParsingException, LifecycleNotFoundException, MojoNotFoundException,
+ PluginNotFoundException, PluginResolutionException, NoPluginFoundForPrefixException,
+ InvalidPluginDescriptorException, PluginVersionResolutionException
+ {
+ MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+
+ PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
+
+ String forkedLifecycle = mojoDescriptor.getExecuteLifecycle();
+
+ if ( StringUtils.isEmpty( forkedLifecycle ) )
+ {
+ return;
+ }
+
+ org.apache.maven.plugin.lifecycle.Lifecycle lifecycleOverlay;
+
+ try
+ {
+ lifecycleOverlay = pluginDescriptor.getLifecycleMapping( forkedLifecycle );
+ }
+ catch ( IOException e )
+ {
+ throw new PluginDescriptorParsingException( pluginDescriptor.getPlugin(), pluginDescriptor.getSource(), e );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new PluginDescriptorParsingException( pluginDescriptor.getPlugin(), pluginDescriptor.getSource(), e );
+ }
+
+ if ( lifecycleOverlay == null )
+ {
+ throw new LifecycleNotFoundException( forkedLifecycle );
+ }
+
+ for ( Phase phase : lifecycleOverlay.getPhases() )
+ {
+ List<MojoExecution> forkedExecutions = lifecycleMappings.get( phase.getId() );
+
+ if ( forkedExecutions != null )
+ {
+ for ( Execution execution : phase.getExecutions() )
+ {
+ for ( String goal : execution.getGoals() )
+ {
+ MojoDescriptor forkedMojoDescriptor;
+
+ if ( goal.indexOf( ':' ) < 0 )
+ {
+ forkedMojoDescriptor = pluginDescriptor.getMojo( goal );
+ if ( forkedMojoDescriptor == null )
+ {
+ throw new MojoNotFoundException( goal, pluginDescriptor );
+ }
+ }
+ else
+ {
+ forkedMojoDescriptor = mojoDescriptorCreator.getMojoDescriptor( goal, session, project );
+ }
+
+ MojoExecution forkedExecution =
+ new MojoExecution( forkedMojoDescriptor, mojoExecution.getExecutionId() );
+
+ Xpp3Dom forkedConfiguration = (Xpp3Dom) execution.getConfiguration();
+
+ forkedExecution.setConfiguration( forkedConfiguration );
+
+ mojoExecutionConfigurator( forkedExecution ).configure( project, forkedExecution, true );
+
+ forkedExecutions.add( forkedExecution );
+ }
+ }
+
+ Xpp3Dom phaseConfiguration = (Xpp3Dom) phase.getConfiguration();
+
+ if ( phaseConfiguration != null )
+ {
+ for ( MojoExecution forkedExecution : forkedExecutions )
+ {
+ Xpp3Dom forkedConfiguration = forkedExecution.getConfiguration();
+
+ forkedConfiguration = Xpp3Dom.mergeXpp3Dom( phaseConfiguration, forkedConfiguration );
+
+ forkedExecution.setConfiguration( forkedConfiguration );
+ }
+ }
+ }
+ }
+ }
+
+ // org.apache.maven.plugins:maven-remote-resources-plugin:1.0:process
+ // TODO: take repo mans into account as one may be aggregating prefixes of many
+ // TODO: collect at the root of the repository, read the one at the root, and fetch remote if something is missing
+ // or the user forces the issue
+
+ private List<MojoExecution> calculateForkedGoal( MojoExecution mojoExecution, MavenSession session,
+ MavenProject project,
+ Collection<MojoDescriptor> alreadyForkedExecutions )
+ throws MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ PluginDescriptorParsingException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+
+ PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
+
+ String forkedGoal = mojoDescriptor.getExecuteGoal();
+
+ MojoDescriptor forkedMojoDescriptor = pluginDescriptor.getMojo( forkedGoal );
+ if ( forkedMojoDescriptor == null )
+ {
+ throw new MojoNotFoundException( forkedGoal, pluginDescriptor );
+ }
+
+ if ( alreadyForkedExecutions.contains( forkedMojoDescriptor ) )
+ {
+ return Collections.emptyList();
+ }
+
+ MojoExecution forkedExecution = new MojoExecution( forkedMojoDescriptor, forkedGoal );
+
+ mojoExecutionConfigurator( forkedExecution ).configure( project, forkedExecution, true );
+
+ finalizeMojoConfiguration( forkedExecution );
+
+ calculateForkedExecutions( forkedExecution, session, project, alreadyForkedExecutions );
+
+ return Collections.singletonList( forkedExecution );
+ }
+
+ private MojoExecutionConfigurator mojoExecutionConfigurator( MojoExecution mojoExecution )
+ {
+ String configuratorId = mojoExecution.getMojoDescriptor().getComponentConfigurator();
+ if ( configuratorId == null )
+ {
+ configuratorId = "default";
+ }
+
+ MojoExecutionConfigurator mojoExecutionConfigurator = mojoExecutionConfigurators.get( configuratorId );
+
+ if ( mojoExecutionConfigurator == null )
+ {
+ //
+ // The plugin has a custom component configurator but does not have a custom mojo execution configurator
+ // so fall back to the default mojo execution configurator.
+ //
+ mojoExecutionConfigurator = mojoExecutionConfigurators.get( "default" );
+ }
+ return mojoExecutionConfigurator;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java
new file mode 100644
index 00000000..3024fe45
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java
@@ -0,0 +1,158 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.Lifecycle;
+import org.apache.maven.lifecycle.LifecycleMappingDelegate;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.plugin.BuildPluginManager;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+@Component( role = LifecycleMappingDelegate.class, hint = DefaultLifecycleMappingDelegate.HINT )
+public class DefaultLifecycleMappingDelegate
+ implements LifecycleMappingDelegate
+{
+ public static final String HINT = "default";
+
+ @Requirement
+ private BuildPluginManager pluginManager;
+
+ public Map<String, List<MojoExecution>> calculateLifecycleMappings( MavenSession session, MavenProject project,
+ Lifecycle lifecycle, String lifecyclePhase )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, InvalidPluginDescriptorException
+ {
+ /*
+ * Initialize mapping from lifecycle phase to bound mojos. The key set of this map denotes the phases the caller
+ * is interested in, i.e. all phases up to and including the specified phase.
+ */
+
+ Map<String, Map<Integer, List<MojoExecution>>> mappings =
+ new LinkedHashMap<String, Map<Integer, List<MojoExecution>>>();
+
+ for ( String phase : lifecycle.getPhases() )
+ {
+ Map<Integer, List<MojoExecution>> phaseBindings = new TreeMap<Integer, List<MojoExecution>>();
+
+ mappings.put( phase, phaseBindings );
+
+ if ( phase.equals( lifecyclePhase ) )
+ {
+ break;
+ }
+ }
+
+ /*
+ * Grab plugin executions that are bound to the selected lifecycle phases from project. The effective model of
+ * the project already contains the plugin executions induced by the project's packaging type. Remember, all
+ * phases of interest and only those are in the lifecyle mapping, if a phase has no value in the map, we are not
+ * interested in any of the executions bound to it.
+ */
+
+ for ( Plugin plugin : project.getBuild().getPlugins() )
+ {
+ for ( PluginExecution execution : plugin.getExecutions() )
+ {
+ // if the phase is specified then I don't have to go fetch the plugin yet and pull it down
+ // to examine the phase it is associated to.
+ if ( execution.getPhase() != null )
+ {
+ Map<Integer, List<MojoExecution>> phaseBindings = mappings.get( execution.getPhase() );
+ if ( phaseBindings != null )
+ {
+ for ( String goal : execution.getGoals() )
+ {
+ MojoExecution mojoExecution = new MojoExecution( plugin, goal, execution.getId() );
+ mojoExecution.setLifecyclePhase( execution.getPhase() );
+ addMojoExecution( phaseBindings, mojoExecution, execution.getPriority() );
+ }
+ }
+ }
+ // if not then i need to grab the mojo descriptor and look at the phase that is specified
+ else
+ {
+ for ( String goal : execution.getGoals() )
+ {
+ MojoDescriptor mojoDescriptor =
+ pluginManager.getMojoDescriptor( plugin, goal, project.getRemotePluginRepositories(),
+ session.getRepositorySession() );
+
+ Map<Integer, List<MojoExecution>> phaseBindings = mappings.get( mojoDescriptor.getPhase() );
+ if ( phaseBindings != null )
+ {
+ MojoExecution mojoExecution = new MojoExecution( mojoDescriptor, execution.getId() );
+ mojoExecution.setLifecyclePhase( mojoDescriptor.getPhase() );
+ addMojoExecution( phaseBindings, mojoExecution, execution.getPriority() );
+ }
+ }
+ }
+ }
+ }
+
+ Map<String, List<MojoExecution>> lifecycleMappings = new LinkedHashMap<String, List<MojoExecution>>();
+
+ for ( Map.Entry<String, Map<Integer, List<MojoExecution>>> entry : mappings.entrySet() )
+ {
+ List<MojoExecution> mojoExecutions = new ArrayList<MojoExecution>();
+
+ for ( List<MojoExecution> executions : entry.getValue().values() )
+ {
+ mojoExecutions.addAll( executions );
+ }
+
+ lifecycleMappings.put( entry.getKey(), mojoExecutions );
+ }
+
+ return lifecycleMappings;
+
+ }
+
+ private void addMojoExecution( Map<Integer, List<MojoExecution>> phaseBindings, MojoExecution mojoExecution,
+ int priority )
+ {
+ List<MojoExecution> mojoExecutions = phaseBindings.get( priority );
+
+ if ( mojoExecutions == null )
+ {
+ mojoExecutions = new ArrayList<MojoExecution>();
+ phaseBindings.put( priority, mojoExecutions );
+ }
+
+ mojoExecutions.add( mojoExecution );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java
new file mode 100644
index 00000000..a5e6a34c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java
@@ -0,0 +1,258 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.lifecycle.DefaultLifecycles;
+import org.apache.maven.lifecycle.LifeCyclePluginAnalyzer;
+import org.apache.maven.lifecycle.Lifecycle;
+import org.apache.maven.lifecycle.mapping.LifecycleMapping;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @since 3.0
+ * @author Benjamin Bentmann
+ * @author Jason van Zyl
+ * @author jdcasey
+ * @author Kristian Rosenvold (extracted class only)
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+@Component( role = LifeCyclePluginAnalyzer.class )
+public class DefaultLifecyclePluginAnalyzer
+ implements LifeCyclePluginAnalyzer
+{
+
+ @Requirement( role = LifecycleMapping.class )
+ private Map<String, LifecycleMapping> lifecycleMappings;
+
+ @Requirement
+ private DefaultLifecycles defaultLifeCycles;
+
+ @Requirement
+ private Logger logger;
+
+ public DefaultLifecyclePluginAnalyzer()
+ {
+ }
+
+ // These methods deal with construction intact Plugin object that look like they come from a standard
+ // <plugin/> block in a Maven POM. We have to do some wiggling to pull the sources of information
+ // together and this really shows the problem of constructing a sensible default configuration but
+ // it's all encapsulated here so it appears normalized to the POM builder.
+
+ // We are going to take the project packaging and find all plugin in the default lifecycle and create
+ // fully populated Plugin objects, including executions with goals and default configuration taken
+ // from the plugin.xml inside a plugin.
+ //
+
+ public Set<Plugin> getPluginsBoundByDefaultToAllLifecycles( String packaging )
+ {
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Looking up lifecyle mappings for packaging " + packaging + " from "
+ + Thread.currentThread().getContextClassLoader() );
+ }
+
+ LifecycleMapping lifecycleMappingForPackaging = lifecycleMappings.get( packaging );
+
+ if ( lifecycleMappingForPackaging == null )
+ {
+ return null;
+ }
+
+ Map<Plugin, Plugin> plugins = new LinkedHashMap<Plugin, Plugin>();
+
+ for ( Lifecycle lifecycle : getOrderedLifecycles() )
+ {
+ org.apache.maven.lifecycle.mapping.Lifecycle lifecycleConfiguration =
+ lifecycleMappingForPackaging.getLifecycles().get( lifecycle.getId() );
+
+ Map<String, String> phaseToGoalMapping = null;
+
+ if ( lifecycleConfiguration != null )
+ {
+ phaseToGoalMapping = lifecycleConfiguration.getPhases();
+ }
+ else if ( lifecycle.getDefaultPhases() != null )
+ {
+ phaseToGoalMapping = lifecycle.getDefaultPhases();
+ }
+
+ if ( phaseToGoalMapping != null )
+ {
+ // These are of the form:
+ //
+ // compile -> org.apache.maven.plugins:maven-compiler-plugin:compile[,gid:aid:goal,...]
+ //
+ for ( Map.Entry<String, String> goalsForLifecyclePhase : phaseToGoalMapping.entrySet() )
+ {
+ String phase = goalsForLifecyclePhase.getKey();
+ String goals = goalsForLifecyclePhase.getValue();
+ if ( goals != null )
+ {
+ parseLifecyclePhaseDefinitions( plugins, phase, goals );
+ }
+ }
+ }
+ }
+
+ return plugins.keySet();
+ }
+
+ private List<Lifecycle> getOrderedLifecycles()
+ {
+ // NOTE: The lifecycle order can affect implied execution ids so we better be deterministic.
+
+ List<Lifecycle> lifecycles = new ArrayList<Lifecycle>( defaultLifeCycles.getLifeCycles() );
+
+ Collections.sort( lifecycles, new Comparator<Lifecycle>()
+ {
+
+ public int compare( Lifecycle l1, Lifecycle l2 )
+ {
+ return l1.getId().compareTo( l2.getId() );
+ }
+
+ } );
+
+ return lifecycles;
+ }
+
+ private void parseLifecyclePhaseDefinitions( Map<Plugin, Plugin> plugins, String phase, String goals )
+ {
+ String[] mojos = StringUtils.split( goals, "," );
+
+ for ( int i = 0; i < mojos.length; i++ )
+ {
+ GoalSpec gs = parseGoalSpec( mojos[i].trim() );
+
+ if ( gs == null )
+ {
+ logger.warn( "Ignored invalid goal specification '" + mojos[i] + "' from lifecycle mapping for phase "
+ + phase );
+ continue;
+ }
+
+ Plugin plugin = new Plugin();
+ plugin.setGroupId( gs.groupId );
+ plugin.setArtifactId( gs.artifactId );
+ plugin.setVersion( gs.version );
+
+ Plugin existing = plugins.get( plugin );
+ if ( existing != null )
+ {
+ if ( existing.getVersion() == null )
+ {
+ existing.setVersion( plugin.getVersion() );
+ }
+ plugin = existing;
+ }
+ else
+ {
+ plugins.put( plugin, plugin );
+ }
+
+ PluginExecution execution = new PluginExecution();
+ execution.setId( getExecutionId( plugin, gs.goal ) );
+ execution.setPhase( phase );
+ execution.setPriority( i - mojos.length );
+ execution.getGoals().add( gs.goal );
+
+ plugin.getExecutions().add( execution );
+ }
+ }
+
+ private GoalSpec parseGoalSpec( String goalSpec )
+ {
+ GoalSpec gs = new GoalSpec();
+
+ String[] p = StringUtils.split( goalSpec.trim(), ":" );
+
+ if ( p.length == 3 )
+ {
+ // <groupId>:<artifactId>:<goal>
+ gs.groupId = p[0];
+ gs.artifactId = p[1];
+ gs.goal = p[2];
+ }
+ else if ( p.length == 4 )
+ {
+ // <groupId>:<artifactId>:<version>:<goal>
+ gs.groupId = p[0];
+ gs.artifactId = p[1];
+ gs.version = p[2];
+ gs.goal = p[3];
+ }
+ else
+ {
+ // invalid
+ gs = null;
+ }
+
+ return gs;
+ }
+
+ private String getExecutionId( Plugin plugin, String goal )
+ {
+ Set<String> existingIds = new HashSet<String>();
+ for ( PluginExecution execution : plugin.getExecutions() )
+ {
+ existingIds.add( execution.getId() );
+ }
+
+ String base = "default-" + goal;
+ String id = base;
+
+ for ( int index = 1; existingIds.contains( id ); index++ )
+ {
+ id = base + '-' + index;
+ }
+
+ return id;
+ }
+
+ static class GoalSpec
+ {
+
+ String groupId;
+
+ String artifactId;
+
+ String version;
+
+ String goal;
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleTaskSegmentCalculator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleTaskSegmentCalculator.java
new file mode 100644
index 00000000..28377f1d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleTaskSegmentCalculator.java
@@ -0,0 +1,155 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.LifecycleNotFoundException;
+import org.apache.maven.lifecycle.LifecyclePhaseNotFoundException;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Calculates the task segments in the build
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ * @author Jason van Zyl
+ * @author jdcasey
+ * @author Kristian Rosenvold (extracted class)
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+
+@Component( role = LifecycleTaskSegmentCalculator.class )
+public class DefaultLifecycleTaskSegmentCalculator
+ implements LifecycleTaskSegmentCalculator
+{
+ @Requirement
+ private MojoDescriptorCreator mojoDescriptorCreator;
+
+ @Requirement
+ private LifecyclePluginResolver lifecyclePluginResolver;
+
+ public DefaultLifecycleTaskSegmentCalculator()
+ {
+ }
+
+ public List<TaskSegment> calculateTaskSegments( MavenSession session )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ PluginVersionResolutionException, LifecyclePhaseNotFoundException, LifecycleNotFoundException
+ {
+
+ MavenProject rootProject = session.getTopLevelProject();
+
+ List<String> tasks = session.getGoals();
+
+ if ( ( tasks == null || tasks.isEmpty() ) && !StringUtils.isEmpty( rootProject.getDefaultGoal() ) )
+ {
+ tasks = Arrays.asList( StringUtils.split( rootProject.getDefaultGoal() ) );
+ }
+
+ return calculateTaskSegments( session, tasks );
+ }
+
+ public List<TaskSegment> calculateTaskSegments( MavenSession session, List<String> tasks )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ PluginVersionResolutionException
+ {
+ List<TaskSegment> taskSegments = new ArrayList<TaskSegment>( tasks.size() );
+
+ TaskSegment currentSegment = null;
+
+ for ( String task : tasks )
+ {
+ if ( isGoalSpecification( task ) )
+ {
+ // "pluginPrefix:goal" or "groupId:artifactId[:version]:goal"
+
+ lifecyclePluginResolver.resolveMissingPluginVersions( session.getTopLevelProject(), session );
+
+ MojoDescriptor mojoDescriptor =
+ mojoDescriptorCreator.getMojoDescriptor( task, session, session.getTopLevelProject() );
+
+ boolean aggregating = mojoDescriptor.isAggregator() || !mojoDescriptor.isProjectRequired();
+
+ if ( currentSegment == null || currentSegment.isAggregating() != aggregating )
+ {
+ currentSegment = new TaskSegment( aggregating );
+ taskSegments.add( currentSegment );
+ }
+
+ currentSegment.getTasks().add( new GoalTask( task ) );
+ }
+ else
+ {
+ // lifecycle phase
+
+ if ( currentSegment == null || currentSegment.isAggregating() )
+ {
+ currentSegment = new TaskSegment( false );
+ taskSegments.add( currentSegment );
+ }
+
+ currentSegment.getTasks().add( new LifecycleTask( task ) );
+ }
+ }
+
+ return taskSegments;
+ }
+
+ public boolean requiresProject( MavenSession session )
+ {
+ List<String> goals = session.getGoals();
+ if ( goals != null )
+ {
+ for ( String goal : goals )
+ {
+ if ( !isGoalSpecification( goal ) )
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+
+ private boolean isGoalSpecification( String task )
+ {
+ return task.indexOf( ':' ) >= 0;
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultMojoExecutionConfigurator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultMojoExecutionConfigurator.java
new file mode 100644
index 00000000..176ba320
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultMojoExecutionConfigurator.java
@@ -0,0 +1,108 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+
+import org.apache.maven.lifecycle.MojoExecutionConfigurator;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * @since 3.3.1, MNG-5753
+ */
+@Component( role = MojoExecutionConfigurator.class )
+public class DefaultMojoExecutionConfigurator
+ implements MojoExecutionConfigurator
+{
+
+ @Override
+ public void configure( MavenProject project, MojoExecution mojoExecution, boolean allowPluginLevelConfig )
+ {
+ String g = mojoExecution.getGroupId();
+
+ String a = mojoExecution.getArtifactId();
+
+ Plugin plugin = findPlugin( g, a, project.getBuildPlugins() );
+
+ if ( plugin == null && project.getPluginManagement() != null )
+ {
+ plugin = findPlugin( g, a, project.getPluginManagement().getPlugins() );
+ }
+
+ if ( plugin != null )
+ {
+ PluginExecution pluginExecution =
+ findPluginExecution( mojoExecution.getExecutionId(), plugin.getExecutions() );
+
+ Xpp3Dom pomConfiguration = null;
+
+ if ( pluginExecution != null )
+ {
+ pomConfiguration = (Xpp3Dom) pluginExecution.getConfiguration();
+ }
+ else if ( allowPluginLevelConfig )
+ {
+ pomConfiguration = (Xpp3Dom) plugin.getConfiguration();
+ }
+
+ Xpp3Dom mojoConfiguration = ( pomConfiguration != null ) ? new Xpp3Dom( pomConfiguration ) : null;
+
+ mojoConfiguration = Xpp3Dom.mergeXpp3Dom( mojoExecution.getConfiguration(), mojoConfiguration );
+
+ mojoExecution.setConfiguration( mojoConfiguration );
+ }
+ }
+
+ private Plugin findPlugin( String groupId, String artifactId, Collection<Plugin> plugins )
+ {
+ for ( Plugin plugin : plugins )
+ {
+ if ( artifactId.equals( plugin.getArtifactId() ) && groupId.equals( plugin.getGroupId() ) )
+ {
+ return plugin;
+ }
+ }
+
+ return null;
+ }
+
+ private PluginExecution findPluginExecution( String executionId, Collection<PluginExecution> executions )
+ {
+ if ( StringUtils.isNotEmpty( executionId ) )
+ {
+ for ( PluginExecution execution : executions )
+ {
+ if ( executionId.equals( execution.getId() ) )
+ {
+ return execution;
+ }
+ }
+ }
+
+ return null;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultProjectArtifactFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultProjectArtifactFactory.java
new file mode 100644
index 00000000..762fc72b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultProjectArtifactFactory.java
@@ -0,0 +1,53 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Set;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
+import org.apache.maven.project.artifact.MavenMetadataSource;
+
+@SuppressWarnings( "deprecation" )
+@Named
+public class DefaultProjectArtifactFactory
+ implements ProjectArtifactFactory
+{
+ private final ArtifactFactory artifactFactory;
+
+ @Inject
+ public DefaultProjectArtifactFactory( ArtifactFactory artifactFactory )
+ {
+ this.artifactFactory = artifactFactory;
+ }
+
+ @Override
+ public Set<Artifact> createArtifacts( MavenProject project )
+ throws InvalidDependencyVersionException
+ {
+ return MavenMetadataSource.createArtifacts( artifactFactory, project.getDependencies(), null, null, project );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DependencyContext.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DependencyContext.java
new file mode 100644
index 00000000..18fae7a9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DependencyContext.java
@@ -0,0 +1,114 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.project.MavenProject;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.TreeSet;
+
+/**
+ * Context of dependency artifacts for a particular project.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ * @author Kristian Rosenvold (class extract only)
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+// TODO: From a concurrency perspective, this class is not good. The combination of mutable/immutable state is not nice
+public class DependencyContext
+{
+
+ private static final Collection<?> UNRESOLVED = Arrays.asList();
+
+ private final MavenProject project;
+
+ private final Collection<String> scopesToCollectForCurrentProject;
+
+ private final Collection<String> scopesToResolveForCurrentProject;
+
+ private final Collection<String> scopesToCollectForAggregatedProjects;
+
+ private final Collection<String> scopesToResolveForAggregatedProjects;
+
+ private volatile Collection<?> lastDependencyArtifacts = UNRESOLVED;
+
+ private volatile int lastDependencyArtifactCount = -1;
+
+ public DependencyContext( MavenProject project, Collection<String> scopesToCollect,
+ Collection<String> scopesToResolve )
+ {
+ this.project = project;
+ scopesToCollectForCurrentProject = scopesToCollect;
+ scopesToResolveForCurrentProject = scopesToResolve;
+ scopesToCollectForAggregatedProjects = Collections.synchronizedSet( new TreeSet<String>() );
+ scopesToResolveForAggregatedProjects = Collections.synchronizedSet( new TreeSet<String>() );
+ }
+
+ public MavenProject getProject()
+ {
+ return project;
+ }
+
+ public Collection<String> getScopesToCollectForCurrentProject()
+ {
+ return scopesToCollectForCurrentProject;
+ }
+
+ public Collection<String> getScopesToResolveForCurrentProject()
+ {
+ return scopesToResolveForCurrentProject;
+ }
+
+ public Collection<String> getScopesToCollectForAggregatedProjects()
+ {
+ return scopesToCollectForAggregatedProjects;
+ }
+
+ public Collection<String> getScopesToResolveForAggregatedProjects()
+ {
+ return scopesToResolveForAggregatedProjects;
+ }
+
+ public boolean isResolutionRequiredForCurrentProject()
+ {
+ return lastDependencyArtifacts != project.getDependencyArtifacts() || ( lastDependencyArtifacts != null
+ && lastDependencyArtifactCount != lastDependencyArtifacts.size() );
+ }
+
+ public boolean isResolutionRequiredForAggregatedProjects( Collection<String> scopesToCollect,
+ Collection<String> scopesToResolve )
+ {
+ boolean required =
+ scopesToCollectForAggregatedProjects.addAll( scopesToCollect )
+ || scopesToResolveForAggregatedProjects.addAll( scopesToResolve );
+ return required;
+ }
+
+ public void synchronizeWithProjectState()
+ {
+ lastDependencyArtifacts = project.getDependencyArtifacts();
+ lastDependencyArtifactCount = ( lastDependencyArtifacts != null ) ? lastDependencyArtifacts.size() : 0;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionEventCatapult.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionEventCatapult.java
new file mode 100644
index 00000000..acff5661
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionEventCatapult.java
@@ -0,0 +1,40 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.ExecutionEvent;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.MojoExecution;
+
+/**
+ * Assists in firing execution events. <strong>Warning:</strong> This is an internal utility interface that is only
+ * public for technical reasons, it is not part of the public API. In particular, this interface can be changed or
+ * deleted without prior notice.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ExecutionEventCatapult
+{
+
+ void fire( ExecutionEvent.Type eventType, MavenSession session, MojoExecution mojoExecution );
+
+ void fire( ExecutionEvent.Type eventType, MavenSession session, MojoExecution mojoExecution, Exception exception );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java
new file mode 100644
index 00000000..cceffdf8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java
@@ -0,0 +1,84 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.lifecycle.internal.builder.BuilderCommon;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.project.MavenProject;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Wraps individual MojoExecutions, containing information about completion status and scheduling.
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ *
+ * @since 3.0
+ * @author Kristian Rosenvold
+ */
+public class ExecutionPlanItem
+{
+ private final MojoExecution mojoExecution;
+
+ public ExecutionPlanItem( MojoExecution mojoExecution )
+ {
+ this.mojoExecution = mojoExecution;
+ }
+
+ public static List<ExecutionPlanItem> createExecutionPlanItems( MavenProject mavenProject,
+ List<MojoExecution> executions )
+ {
+ BuilderCommon.attachToThread( mavenProject );
+
+ List<ExecutionPlanItem> result = new ArrayList<ExecutionPlanItem>();
+ for ( MojoExecution mojoExecution : executions )
+ {
+ result.add( new ExecutionPlanItem( mojoExecution ) );
+ }
+ return result;
+ }
+
+ public MojoExecution getMojoExecution()
+ {
+ return mojoExecution;
+ }
+
+ public String getLifecyclePhase()
+ {
+ return mojoExecution.getLifecyclePhase();
+ }
+
+ public Plugin getPlugin()
+ {
+ final MojoDescriptor mojoDescriptor = getMojoExecution().getMojoDescriptor();
+ return mojoDescriptor.getPluginDescriptor().getPlugin();
+ }
+
+ @Override
+ public String toString()
+ {
+ return "ExecutionPlanItem{" + ", mojoExecution=" + mojoExecution + '}'
+ + super.toString();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/GoalTask.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/GoalTask.java
new file mode 100644
index 00000000..5c43dbd4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/GoalTask.java
@@ -0,0 +1,45 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * A task that is a goal
+ * <p/>
+ * TODO: From a concurrecy perspective, this class is not good. The combination of mutable/immutable state is not nice
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+public final class GoalTask
+{
+
+ final String pluginGoal;
+
+ public GoalTask( String pluginGoal )
+ {
+ this.pluginGoal = pluginGoal;
+ }
+
+ @Override
+ public String toString()
+ {
+ return pluginGoal;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDebugLogger.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDebugLogger.java
new file mode 100644
index 00000000..2edbe754
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDebugLogger.java
@@ -0,0 +1,182 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.lifecycle.MavenExecutionPlan;
+import org.apache.maven.lifecycle.internal.builder.BuilderCommon;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * Logs debug output from the various lifecycle phases.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ * @author Jason van Zyl
+ * @author Kristian Rosenvold (extracted class only)
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+@Component( role = LifecycleDebugLogger.class )
+public class LifecycleDebugLogger
+{
+ @Requirement
+ private Logger logger;
+
+
+ public LifecycleDebugLogger()
+ {
+ }
+
+ public LifecycleDebugLogger( Logger logger )
+ {
+ this.logger = logger;
+ }
+
+
+ public void debug( String s )
+ {
+ logger.debug( s );
+ }
+
+ public void info( String s )
+ {
+ logger.info( s );
+ }
+
+ public void debugReactorPlan( ProjectBuildList projectBuilds )
+ {
+ if ( !logger.isDebugEnabled() )
+ {
+ return;
+ }
+
+ logger.debug( "=== REACTOR BUILD PLAN ================================================" );
+
+ for ( Iterator<ProjectSegment> it = projectBuilds.iterator(); it.hasNext(); )
+ {
+ ProjectSegment projectBuild = it.next();
+
+ logger.debug( "Project: " + projectBuild.getProject().getId() );
+ logger.debug( "Tasks: " + projectBuild.getTaskSegment().getTasks() );
+ logger.debug( "Style: " + ( projectBuild.getTaskSegment().isAggregating() ? "Aggregating" : "Regular" ) );
+
+ if ( it.hasNext() )
+ {
+ logger.debug( "-----------------------------------------------------------------------" );
+ }
+ }
+
+ logger.debug( "=======================================================================" );
+ }
+
+
+ public void debugProjectPlan( MavenProject currentProject, MavenExecutionPlan executionPlan )
+ {
+ if ( !logger.isDebugEnabled() )
+ {
+ return;
+ }
+
+ logger.debug( "=== PROJECT BUILD PLAN ================================================" );
+ logger.debug( "Project: " + BuilderCommon.getKey( currentProject ) );
+
+ debugDependencyRequirements( executionPlan.getMojoExecutions() );
+
+ logger.debug( "Repositories (dependencies): " + currentProject.getRemoteProjectRepositories() );
+ logger.debug( "Repositories (plugins) : " + currentProject.getRemotePluginRepositories() );
+
+ for ( ExecutionPlanItem mojoExecution : executionPlan )
+ {
+ debugMojoExecution( mojoExecution.getMojoExecution() );
+ }
+
+ logger.debug( "=======================================================================" );
+ }
+
+ private void debugMojoExecution( MojoExecution mojoExecution )
+ {
+ String mojoExecId =
+ mojoExecution.getGroupId() + ':' + mojoExecution.getArtifactId() + ':' + mojoExecution.getVersion() + ':'
+ + mojoExecution.getGoal() + " (" + mojoExecution.getExecutionId() + ')';
+
+ Map<String, List<MojoExecution>> forkedExecutions = mojoExecution.getForkedExecutions();
+ if ( !forkedExecutions.isEmpty() )
+ {
+ for ( Map.Entry<String, List<MojoExecution>> fork : forkedExecutions.entrySet() )
+ {
+ logger.debug( "--- init fork of " + fork.getKey() + " for " + mojoExecId + " ---" );
+
+ debugDependencyRequirements( fork.getValue() );
+
+ for ( MojoExecution forkedExecution : fork.getValue() )
+ {
+ debugMojoExecution( forkedExecution );
+ }
+
+ logger.debug( "--- exit fork of " + fork.getKey() + " for " + mojoExecId + " ---" );
+ }
+ }
+
+ logger.debug( "-----------------------------------------------------------------------" );
+ logger.debug( "Goal: " + mojoExecId );
+ logger.debug(
+ "Style: " + ( mojoExecution.getMojoDescriptor().isAggregator() ? "Aggregating" : "Regular" ) );
+ logger.debug( "Configuration: " + mojoExecution.getConfiguration() );
+ }
+
+ private void debugDependencyRequirements( List<MojoExecution> mojoExecutions )
+ {
+ Set<String> scopesToCollect = new TreeSet<String>();
+ Set<String> scopesToResolve = new TreeSet<String>();
+
+ for ( MojoExecution mojoExecution : mojoExecutions )
+ {
+ MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+
+ String scopeToCollect = mojoDescriptor.getDependencyCollectionRequired();
+ if ( StringUtils.isNotEmpty( scopeToCollect ) )
+ {
+ scopesToCollect.add( scopeToCollect );
+ }
+
+ String scopeToResolve = mojoDescriptor.getDependencyResolutionRequired();
+ if ( StringUtils.isNotEmpty( scopeToResolve ) )
+ {
+ scopesToResolve.add( scopeToResolve );
+ }
+ }
+
+ logger.debug( "Dependencies (collect): " + scopesToCollect );
+ logger.debug( "Dependencies (resolve): " + scopesToResolve );
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
new file mode 100644
index 00000000..4d73528c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
@@ -0,0 +1,334 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.eventspy.internal.EventSpyDispatcher;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.LifecycleExecutionException;
+import org.apache.maven.project.DefaultDependencyResolutionRequest;
+import org.apache.maven.project.DependencyResolutionException;
+import org.apache.maven.project.DependencyResolutionResult;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectDependenciesResolver;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
+import org.codehaus.plexus.logging.Logger;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.util.filter.AndDependencyFilter;
+import org.eclipse.aether.util.filter.ScopeDependencyFilter;
+
+/**
+ * Resolves dependencies for the artifacts in context of the lifecycle build
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ * @author Jason van Zyl
+ * @author Kristian Rosenvold (extracted class)
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+@Named
+public class LifecycleDependencyResolver
+{
+
+ @Inject
+ private ProjectDependenciesResolver dependenciesResolver;
+
+ @Inject
+ private Logger logger;
+
+ @Inject
+ private ProjectArtifactFactory artifactFactory;
+
+ @Inject
+ private EventSpyDispatcher eventSpyDispatcher;
+
+ public LifecycleDependencyResolver()
+ {
+ }
+
+ public LifecycleDependencyResolver( ProjectDependenciesResolver projectDependenciesResolver, Logger logger )
+ {
+ this.dependenciesResolver = projectDependenciesResolver;
+ this.logger = logger;
+ }
+
+ public static List<MavenProject> getProjects( MavenProject project, MavenSession session, boolean aggregator )
+ {
+ if ( aggregator )
+ {
+ return session.getProjects();
+ }
+ else
+ {
+ return Collections.singletonList( project );
+ }
+ }
+
+ public void resolveProjectDependencies( MavenProject project, Collection<String> scopesToCollect,
+ Collection<String> scopesToResolve, MavenSession session,
+ boolean aggregating, Set<Artifact> projectArtifacts )
+ throws LifecycleExecutionException
+ {
+ ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+ try
+ {
+ ClassLoader projectRealm = project.getClassRealm();
+ if ( projectRealm != null && projectRealm != tccl )
+ {
+ Thread.currentThread().setContextClassLoader( projectRealm );
+ }
+
+ if ( project.getDependencyArtifacts() == null )
+ {
+ try
+ {
+ project.setDependencyArtifacts( artifactFactory.createArtifacts( project ) );
+ }
+ catch ( InvalidDependencyVersionException e )
+ {
+ throw new LifecycleExecutionException( e );
+ }
+ }
+
+ Set<Artifact> artifacts =
+ getDependencies( project, scopesToCollect, scopesToResolve, session, aggregating, projectArtifacts );
+
+ project.setResolvedArtifacts( artifacts );
+
+ Map<String, Artifact> map = new HashMap<String, Artifact>();
+ for ( Artifact artifact : artifacts )
+ {
+ map.put( artifact.getDependencyConflictId(), artifact );
+ }
+ for ( Artifact artifact : project.getDependencyArtifacts() )
+ {
+ if ( artifact.getFile() == null )
+ {
+ Artifact resolved = map.get( artifact.getDependencyConflictId() );
+ if ( resolved != null )
+ {
+ artifact.setFile( resolved.getFile() );
+ artifact.setDependencyTrail( resolved.getDependencyTrail() );
+ artifact.setResolvedVersion( resolved.getVersion() );
+ artifact.setResolved( true );
+ }
+ }
+ }
+ }
+ finally
+ {
+ Thread.currentThread().setContextClassLoader( tccl );
+ }
+ }
+
+ private Set<Artifact> getDependencies( MavenProject project, Collection<String> scopesToCollect,
+ Collection<String> scopesToResolve, MavenSession session,
+ boolean aggregating, Set<Artifact> projectArtifacts )
+ throws LifecycleExecutionException
+ {
+ if ( scopesToCollect == null )
+ {
+ scopesToCollect = Collections.emptySet();
+ }
+ if ( scopesToResolve == null )
+ {
+ scopesToResolve = Collections.emptySet();
+ }
+
+ if ( scopesToCollect.isEmpty() && scopesToResolve.isEmpty() )
+ {
+ return new LinkedHashSet<Artifact>();
+ }
+
+ scopesToCollect = new HashSet<String>( scopesToCollect );
+ scopesToCollect.addAll( scopesToResolve );
+
+ DependencyFilter collectionFilter = new ScopeDependencyFilter( null, negate( scopesToCollect ) );
+ DependencyFilter resolutionFilter = new ScopeDependencyFilter( null, negate( scopesToResolve ) );
+ resolutionFilter = AndDependencyFilter.newInstance( collectionFilter, resolutionFilter );
+ resolutionFilter =
+ AndDependencyFilter.newInstance( resolutionFilter, new ReactorDependencyFilter( projectArtifacts ) );
+
+ DependencyResolutionResult result;
+ try
+ {
+ DefaultDependencyResolutionRequest request =
+ new DefaultDependencyResolutionRequest( project, session.getRepositorySession() );
+ request.setResolutionFilter( resolutionFilter );
+
+ eventSpyDispatcher.onEvent( request );
+
+ result = dependenciesResolver.resolve( request );
+ }
+ catch ( DependencyResolutionException e )
+ {
+ result = e.getResult();
+
+ /*
+ * MNG-2277, the check below compensates for our bad plugin support where we ended up with aggregator
+ * plugins that require dependency resolution although they usually run in phases of the build where project
+ * artifacts haven't been assembled yet. The prime example of this is "mvn release:prepare".
+ */
+ if ( aggregating && areAllDependenciesInReactor( session.getProjects(),
+ result.getUnresolvedDependencies() ) )
+ {
+ logger.warn( "The following dependencies could not be resolved at this point of the build"
+ + " but seem to be part of the reactor:" );
+
+ for ( Dependency dependency : result.getUnresolvedDependencies() )
+ {
+ logger.warn( "o " + dependency );
+ }
+
+ logger.warn( "Try running the build up to the lifecycle phase \"package\"" );
+ }
+ else
+ {
+ throw new LifecycleExecutionException( null, project, e );
+ }
+ }
+
+ eventSpyDispatcher.onEvent( result );
+
+ Set<Artifact> artifacts = new LinkedHashSet<Artifact>();
+ if ( result.getDependencyGraph() != null && !result.getDependencyGraph().getChildren().isEmpty() )
+ {
+ RepositoryUtils.toArtifacts( artifacts, result.getDependencyGraph().getChildren(),
+ Collections.singletonList( project.getArtifact().getId() ), collectionFilter );
+ }
+ return artifacts;
+ }
+
+ private boolean areAllDependenciesInReactor( Collection<MavenProject> projects,
+ Collection<Dependency> dependencies )
+ {
+ Set<String> projectKeys = getReactorProjectKeys( projects );
+
+ for ( Dependency dependency : dependencies )
+ {
+ org.eclipse.aether.artifact.Artifact a = dependency.getArtifact();
+ String key = ArtifactUtils.key( a.getGroupId(), a.getArtifactId(), a.getVersion() );
+ if ( !projectKeys.contains( key ) )
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private Set<String> getReactorProjectKeys( Collection<MavenProject> projects )
+ {
+ Set<String> projectKeys = new HashSet<String>( projects.size() * 2 );
+ for ( MavenProject project : projects )
+ {
+ String key = ArtifactUtils.key( project.getGroupId(), project.getArtifactId(), project.getVersion() );
+ projectKeys.add( key );
+ }
+ return projectKeys;
+ }
+
+ private Collection<String> negate( Collection<String> scopes )
+ {
+ Collection<String> result = new HashSet<String>();
+ Collections.addAll( result, "system", "compile", "provided", "runtime", "test" );
+
+ for ( String scope : scopes )
+ {
+ if ( "compile".equals( scope ) )
+ {
+ result.remove( "compile" );
+ result.remove( "system" );
+ result.remove( "provided" );
+ }
+ else if ( "runtime".equals( scope ) )
+ {
+ result.remove( "compile" );
+ result.remove( "runtime" );
+ }
+ else if ( "compile+runtime".equals( scope ) )
+ {
+ result.remove( "compile" );
+ result.remove( "system" );
+ result.remove( "provided" );
+ result.remove( "runtime" );
+ }
+ else if ( "runtime+system".equals( scope ) )
+ {
+ result.remove( "compile" );
+ result.remove( "system" );
+ result.remove( "runtime" );
+ }
+ else if ( "test".equals( scope ) )
+ {
+ result.clear();
+ }
+ }
+
+ return result;
+ }
+
+ private static class ReactorDependencyFilter
+ implements DependencyFilter
+ {
+
+ private Set<String> keys = new HashSet<String>();
+
+ public ReactorDependencyFilter( Collection<Artifact> artifacts )
+ {
+ for ( Artifact artifact : artifacts )
+ {
+ String key = ArtifactUtils.key( artifact );
+ keys.add( key );
+ }
+ }
+
+ public boolean accept( DependencyNode node, List<DependencyNode> parents )
+ {
+ Dependency dependency = node.getDependency();
+ if ( dependency != null )
+ {
+ org.eclipse.aether.artifact.Artifact a = dependency.getArtifact();
+ String key = ArtifactUtils.key( a.getGroupId(), a.getArtifactId(), a.getVersion() );
+ return !keys.contains( key );
+ }
+ return false;
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculator.java
new file mode 100644
index 00000000..7d35b102
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculator.java
@@ -0,0 +1,67 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.LifecycleNotFoundException;
+import org.apache.maven.lifecycle.LifecyclePhaseNotFoundException;
+import org.apache.maven.lifecycle.MavenExecutionPlan;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.project.MavenProject;
+
+import java.util.List;
+
+/**
+ * @since 3.0
+ * @author Benjamin Bentmann
+ * @author Kristian Rosenvold (extract interface only)
+ * <p/>
+ */
+public interface LifecycleExecutionPlanCalculator
+{
+ MavenExecutionPlan calculateExecutionPlan( MavenSession session, MavenProject project, List<Object> tasks )
+ throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException,
+ PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException,
+ NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException;
+
+ MavenExecutionPlan calculateExecutionPlan( MavenSession session, MavenProject project, List<Object> tasks,
+ boolean setup )
+ throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException,
+ PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException,
+ NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException;
+
+ void calculateForkedExecutions( MojoExecution mojoExecution, MavenSession session )
+ throws MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ PluginDescriptorParsingException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException;
+
+ void setupMojoExecution( MavenSession session, MavenProject project, MojoExecution mojoExecution )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, InvalidPluginDescriptorException, NoPluginFoundForPrefixException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java
new file mode 100644
index 00000000..343fbf95
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java
@@ -0,0 +1,154 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.HashSet;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.execution.BuildSuccess;
+import org.apache.maven.execution.ExecutionEvent;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.ProjectExecutionEvent;
+import org.apache.maven.execution.ProjectExecutionListener;
+import org.apache.maven.lifecycle.MavenExecutionPlan;
+import org.apache.maven.lifecycle.internal.builder.BuilderCommon;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.session.scope.internal.SessionScope;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+/**
+ * Builds one or more lifecycles for a full module
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ * @author Jason van Zyl
+ * @author Kristian Rosenvold (extracted class)
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+@Component( role = LifecycleModuleBuilder.class )
+public class LifecycleModuleBuilder
+{
+
+ @Requirement
+ private MojoExecutor mojoExecutor;
+
+ @Requirement
+ private BuilderCommon builderCommon;
+
+ @Requirement
+ private ExecutionEventCatapult eventCatapult;
+
+ private ProjectExecutionListener projectExecutionListener;
+
+ // this tricks plexus-component-metadata generate required metadata
+ @Requirement
+ private List<ProjectExecutionListener> projectExecutionListeners;
+
+ @Requirement
+ private SessionScope sessionScope;
+
+ public void setProjectExecutionListeners( final List<ProjectExecutionListener> listeners )
+ {
+ this.projectExecutionListeners = listeners;
+ this.projectExecutionListener = new CompoundProjectExecutionListener( listeners );
+ }
+
+ public void buildProject( MavenSession session, ReactorContext reactorContext, MavenProject currentProject,
+ TaskSegment taskSegment )
+ {
+ buildProject( session, session, reactorContext, currentProject, taskSegment );
+ }
+
+ public void buildProject( MavenSession session, MavenSession rootSession, ReactorContext reactorContext,
+ MavenProject currentProject, TaskSegment taskSegment )
+ {
+ session.setCurrentProject( currentProject );
+
+ long buildStartTime = System.currentTimeMillis();
+
+ // session may be different from rootSession seeded in DefaultMaven
+ // explicitly seed the right session here to make sure it is used by Guice
+ sessionScope.enter( reactorContext.getSessionScopeMemento() );
+ sessionScope.seed( MavenSession.class, session );
+ try
+ {
+
+ if ( reactorContext.getReactorBuildStatus().isHaltedOrBlacklisted( currentProject ) )
+ {
+ eventCatapult.fire( ExecutionEvent.Type.ProjectSkipped, session, null );
+ return;
+ }
+
+ BuilderCommon.attachToThread( currentProject );
+
+ projectExecutionListener.beforeProjectExecution( new ProjectExecutionEvent( session, currentProject ) );
+
+ eventCatapult.fire( ExecutionEvent.Type.ProjectStarted, session, null );
+
+ MavenExecutionPlan executionPlan =
+ builderCommon.resolveBuildPlan( session, currentProject, taskSegment, new HashSet<Artifact>() );
+ List<MojoExecution> mojoExecutions = executionPlan.getMojoExecutions();
+
+ projectExecutionListener.beforeProjectLifecycleExecution( new ProjectExecutionEvent( session,
+ currentProject,
+ mojoExecutions ) );
+ mojoExecutor.execute( session, mojoExecutions, reactorContext.getProjectIndex() );
+
+ long buildEndTime = System.currentTimeMillis();
+
+ projectExecutionListener.afterProjectExecutionSuccess( new ProjectExecutionEvent( session, currentProject,
+ mojoExecutions ) );
+
+ reactorContext.getResult().addBuildSummary( new BuildSuccess( currentProject,
+ buildEndTime - buildStartTime ) );
+
+ eventCatapult.fire( ExecutionEvent.Type.ProjectSucceeded, session, null );
+ }
+ catch ( Throwable t )
+ {
+ builderCommon.handleBuildError( reactorContext, rootSession, session, currentProject, t, buildStartTime );
+
+ projectExecutionListener.afterProjectExecutionFailure( new ProjectExecutionEvent( session, currentProject,
+ t ) );
+
+ // rethrow original errors and runtime exceptions
+ if ( t instanceof RuntimeException )
+ {
+ throw (RuntimeException) t;
+ }
+ if ( t instanceof Error )
+ {
+ throw (Error) t;
+ }
+ }
+ finally
+ {
+ sessionScope.exit();
+
+ session.setCurrentProject( null );
+
+ Thread.currentThread().setContextClassLoader( reactorContext.getOriginalContextClassLoader() );
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java
new file mode 100644
index 00000000..c615a6f6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java
@@ -0,0 +1,95 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginManagement;
+import org.apache.maven.plugin.version.DefaultPluginVersionRequest;
+import org.apache.maven.plugin.version.PluginVersionRequest;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.plugin.version.PluginVersionResolver;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @since 3.0
+ * @author Benjamin Bentmann
+ * @author Kristian Rosenvold (Extract class)
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+@Component( role = LifecyclePluginResolver.class )
+public class LifecyclePluginResolver
+{
+ @Requirement
+ private PluginVersionResolver pluginVersionResolver;
+
+
+ public LifecyclePluginResolver( PluginVersionResolver pluginVersionResolver )
+ {
+ this.pluginVersionResolver = pluginVersionResolver;
+ }
+
+ public LifecyclePluginResolver()
+ {
+ }
+
+ public void resolveMissingPluginVersions( MavenProject project, MavenSession session )
+ throws PluginVersionResolutionException
+ {
+ Map<String, String> versions = new HashMap<String, String>( 64 );
+
+ for ( Plugin plugin : project.getBuildPlugins() )
+ {
+ if ( plugin.getVersion() == null )
+ {
+ PluginVersionRequest request =
+ new DefaultPluginVersionRequest( plugin, session.getRepositorySession(),
+ project.getRemotePluginRepositories() );
+ plugin.setVersion( pluginVersionResolver.resolve( request ).getVersion() );
+ }
+ versions.put( plugin.getKey(), plugin.getVersion() );
+ }
+
+ PluginManagement pluginManagement = project.getPluginManagement();
+ if ( pluginManagement != null )
+ {
+ for ( Plugin plugin : pluginManagement.getPlugins() )
+ {
+ if ( plugin.getVersion() == null )
+ {
+ plugin.setVersion( versions.get( plugin.getKey() ) );
+ if ( plugin.getVersion() == null )
+ {
+ PluginVersionRequest request =
+ new DefaultPluginVersionRequest( plugin, session.getRepositorySession(),
+ project.getRemotePluginRepositories() );
+ plugin.setVersion( pluginVersionResolver.resolve( request ).getVersion() );
+ }
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
new file mode 100644
index 00000000..cee80739
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
@@ -0,0 +1,150 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.execution.ExecutionEvent;
+import org.apache.maven.execution.MavenExecutionResult;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.DefaultLifecycles;
+import org.apache.maven.lifecycle.MissingProjectException;
+import org.apache.maven.lifecycle.NoGoalSpecifiedException;
+import org.apache.maven.lifecycle.internal.builder.Builder;
+import org.apache.maven.lifecycle.internal.builder.BuilderNotFoundException;
+import org.apache.maven.session.scope.internal.SessionScope;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+
+/**
+ * Starts the build life cycle
+ *
+ * @author Jason van Zyl
+ * @author Benjamin Bentmann
+ * @author Kristian Rosenvold
+ */
+@Component( role = LifecycleStarter.class )
+public class LifecycleStarter
+{
+ @Requirement
+ private ExecutionEventCatapult eventCatapult;
+
+ @Requirement
+ private DefaultLifecycles defaultLifeCycles;
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private BuildListCalculator buildListCalculator;
+
+ @Requirement
+ private LifecycleDebugLogger lifecycleDebugLogger;
+
+ @Requirement
+ private LifecycleTaskSegmentCalculator lifecycleTaskSegmentCalculator;
+
+ @Requirement
+ private Map<String, Builder> builders;
+
+ @Requirement
+ private SessionScope sessionScope;
+
+ public void execute( MavenSession session )
+ {
+ eventCatapult.fire( ExecutionEvent.Type.SessionStarted, session, null );
+
+ ReactorContext reactorContext = null;
+ ProjectBuildList projectBuilds = null;
+ MavenExecutionResult result = session.getResult();
+
+ try
+ {
+ if ( buildExecutionRequiresProject( session ) && projectIsNotPresent( session ) )
+ {
+ throw new MissingProjectException( "The goal you specified requires a project to execute"
+ + " but there is no POM in this directory (" + session.getExecutionRootDirectory() + ")."
+ + " Please verify you invoked Maven from the correct directory." );
+ }
+
+ List<TaskSegment> taskSegments = lifecycleTaskSegmentCalculator.calculateTaskSegments( session );
+ projectBuilds = buildListCalculator.calculateProjectBuilds( session, taskSegments );
+
+ if ( projectBuilds.isEmpty() )
+ {
+ throw new NoGoalSpecifiedException( "No goals have been specified for this build."
+ + " You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or"
+ + " <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>."
+ + " Available lifecycle phases are: " + defaultLifeCycles.getLifecyclePhaseList() + "." );
+ }
+
+ ProjectIndex projectIndex = new ProjectIndex( session.getProjects() );
+
+ if ( logger.isDebugEnabled() )
+ {
+ lifecycleDebugLogger.debugReactorPlan( projectBuilds );
+ }
+
+ ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
+ ReactorBuildStatus reactorBuildStatus = new ReactorBuildStatus( session.getProjectDependencyGraph() );
+ reactorContext =
+ new ReactorContext( result, projectIndex, oldContextClassLoader, reactorBuildStatus,
+ sessionScope.memento() );
+
+ String builderId = session.getRequest().getBuilderId();
+ Builder builder = builders.get( builderId );
+ if ( builder == null )
+ {
+ throw new BuilderNotFoundException( String.format( "The builder requested using id = %s cannot be"
+ + " found", builderId ) );
+ }
+
+ int degreeOfConcurrency = session.getRequest().getDegreeOfConcurrency();
+ if ( degreeOfConcurrency >= 2 )
+ {
+ logger.info( "" );
+ logger.info( String.format( "Using the %s implementation with a thread count of %d",
+ builder.getClass().getSimpleName(), degreeOfConcurrency ) );
+ }
+ builder.build( session, reactorContext, projectBuilds, taskSegments, reactorBuildStatus );
+
+ }
+ catch ( Exception e )
+ {
+ result.addException( e );
+ }
+ finally
+ {
+ eventCatapult.fire( ExecutionEvent.Type.SessionEnded, session, null );
+ }
+ }
+
+ private boolean buildExecutionRequiresProject( MavenSession session )
+ {
+ return lifecycleTaskSegmentCalculator.requiresProject( session );
+ }
+
+ private boolean projectIsNotPresent( MavenSession session )
+ {
+ return !session.getRequest().isProjectPresent();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTask.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTask.java
new file mode 100644
index 00000000..0b5fff34
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTask.java
@@ -0,0 +1,50 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * A task that is a lifecycle
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+public final class LifecycleTask
+{
+
+ private final String lifecyclePhase;
+
+ public LifecycleTask( String lifecyclePhase )
+ {
+ this.lifecyclePhase = lifecyclePhase;
+ }
+
+ @Override
+ public String toString()
+ {
+ return getLifecyclePhase();
+ }
+
+ public String getLifecyclePhase()
+ {
+ return lifecyclePhase;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculator.java
new file mode 100644
index 00000000..a721355b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculator.java
@@ -0,0 +1,61 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.LifecycleNotFoundException;
+import org.apache.maven.lifecycle.LifecyclePhaseNotFoundException;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+
+import java.util.List;
+
+/**
+ * Calculates the task segments in the build
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ * @author Jason van Zyl
+ * @author jdcasey
+ * @author Kristian Rosenvold (extracted interface)
+ * <p/>
+ * NOTE: This interface is not part of any public api and can be changed or deleted without prior notice.
+ */
+
+public interface LifecycleTaskSegmentCalculator
+{
+ List<TaskSegment> calculateTaskSegments( MavenSession session )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ PluginVersionResolutionException, LifecyclePhaseNotFoundException, LifecycleNotFoundException;
+
+ List<TaskSegment> calculateTaskSegments( MavenSession session, List<String> tasks )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ PluginVersionResolutionException;
+
+ boolean requiresProject( MavenSession session );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java
new file mode 100644
index 00000000..36c85fdd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java
@@ -0,0 +1,309 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.BuildPluginManager;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.prefix.DefaultPluginPrefixRequest;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.prefix.PluginPrefixRequest;
+import org.apache.maven.plugin.prefix.PluginPrefixResolver;
+import org.apache.maven.plugin.prefix.PluginPrefixResult;
+import org.apache.maven.plugin.version.DefaultPluginVersionRequest;
+import org.apache.maven.plugin.version.PluginVersionRequest;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.plugin.version.PluginVersionResolver;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.StringTokenizer;
+
+/**
+ * Resolves dependencies for the artifacts in context of the lifecycle build
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ * @author Jason van Zyl
+ * @author jdcasey
+ * @author Kristian Rosenvold (extracted class only)
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+@Component( role = MojoDescriptorCreator.class )
+public class MojoDescriptorCreator
+{
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private PluginVersionResolver pluginVersionResolver;
+
+ @Requirement
+ private BuildPluginManager pluginManager;
+
+ @Requirement
+ private PluginPrefixResolver pluginPrefixResolver;
+
+ @Requirement
+ private LifecyclePluginResolver lifecyclePluginResolver;
+
+ public MojoDescriptorCreator()
+ {
+ }
+
+ public MojoDescriptorCreator( PluginVersionResolver pluginVersionResolver, BuildPluginManager pluginManager,
+ PluginPrefixResolver pluginPrefixResolver,
+ LifecyclePluginResolver lifecyclePluginResolver )
+ {
+ this.pluginVersionResolver = pluginVersionResolver;
+ this.pluginManager = pluginManager;
+ this.pluginPrefixResolver = pluginPrefixResolver;
+ this.lifecyclePluginResolver = lifecyclePluginResolver;
+ }
+
+ private Plugin findPlugin( String groupId, String artifactId, Collection<Plugin> plugins )
+ {
+ for ( Plugin plugin : plugins )
+ {
+ if ( artifactId.equals( plugin.getArtifactId() ) && groupId.equals( plugin.getGroupId() ) )
+ {
+ return plugin;
+ }
+ }
+
+ return null;
+ }
+
+ public static Xpp3Dom convert( MojoDescriptor mojoDescriptor )
+ {
+ Xpp3Dom dom = new Xpp3Dom( "configuration" );
+
+ PlexusConfiguration c = mojoDescriptor.getMojoConfiguration();
+
+ PlexusConfiguration[] ces = c.getChildren();
+
+ if ( ces != null )
+ {
+ for ( PlexusConfiguration ce : ces )
+ {
+ String value = ce.getValue( null );
+ String defaultValue = ce.getAttribute( "default-value", null );
+ if ( value != null || defaultValue != null )
+ {
+ Xpp3Dom e = new Xpp3Dom( ce.getName() );
+ e.setValue( value );
+ if ( defaultValue != null )
+ {
+ e.setAttribute( "default-value", defaultValue );
+ }
+ dom.addChild( e );
+ }
+ }
+ }
+
+ return dom;
+ }
+
+ // org.apache.maven.plugins:maven-remote-resources-plugin:1.0:process@executionId
+
+ public MojoDescriptor getMojoDescriptor( String task, MavenSession session, MavenProject project )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ PluginVersionResolutionException
+ {
+ String goal = null;
+
+ Plugin plugin = null;
+
+ StringTokenizer tok = new StringTokenizer( task, ":" );
+
+ int numTokens = tok.countTokens();
+
+ if ( numTokens >= 4 )
+ {
+ // We have everything that we need
+ //
+ // org.apache.maven.plugins:maven-remote-resources-plugin:1.0:process
+ //
+ // groupId
+ // artifactId
+ // version
+ // goal
+ //
+ plugin = new Plugin();
+ plugin.setGroupId( tok.nextToken() );
+ plugin.setArtifactId( tok.nextToken() );
+ plugin.setVersion( tok.nextToken() );
+ goal = tok.nextToken();
+
+ // This won't be valid, but it constructs something easy to read in the error message
+ while ( tok.hasMoreTokens() )
+ {
+ goal += ":" + tok.nextToken();
+ }
+ }
+ else if ( numTokens == 3 )
+ {
+ // We have everything that we need except the version
+ //
+ // org.apache.maven.plugins:maven-remote-resources-plugin:???:process
+ //
+ // groupId
+ // artifactId
+ // ???
+ // goal
+ //
+ plugin = new Plugin();
+ plugin.setGroupId( tok.nextToken() );
+ plugin.setArtifactId( tok.nextToken() );
+ goal = tok.nextToken();
+ }
+ else if ( numTokens <= 2 )
+ {
+ // We have a prefix and goal
+ //
+ // idea:idea
+ //
+ String prefix = tok.nextToken();
+
+ if ( numTokens == 2 )
+ {
+ goal = tok.nextToken();
+ }
+ else
+ {
+ // goal was missing - pass through to MojoNotFoundException
+ goal = "";
+ }
+
+ // This is the case where someone has executed a single goal from the command line
+ // of the form:
+ //
+ // mvn remote-resources:process
+ //
+ // From the metadata stored on the server which has been created as part of a standard
+ // Maven plugin deployment we will find the right PluginDescriptor from the remote
+ // repository.
+
+ plugin = findPluginForPrefix( prefix, session );
+ }
+
+ int executionIdx = goal.indexOf( '@' );
+ if ( executionIdx > 0 )
+ {
+ goal = goal.substring( 0, executionIdx );
+ }
+
+ injectPluginDeclarationFromProject( plugin, project );
+
+ // If there is no version to be found then we need to look in the repository metadata for
+ // this plugin and see what's specified as the latest release.
+ //
+ if ( plugin.getVersion() == null )
+ {
+ resolvePluginVersion( plugin, session, project );
+ }
+
+ return pluginManager.getMojoDescriptor( plugin, goal, project.getRemotePluginRepositories(),
+ session.getRepositorySession() );
+ }
+
+ // TODO: take repo mans into account as one may be aggregating prefixes of many
+ // TODO: collect at the root of the repository, read the one at the root, and fetch remote if something is missing
+ // or the user forces the issue
+
+ public Plugin findPluginForPrefix( String prefix, MavenSession session )
+ throws NoPluginFoundForPrefixException
+ {
+ // [prefix]:[goal]
+
+ if ( session.getCurrentProject() != null )
+ {
+ try
+ {
+ lifecyclePluginResolver.resolveMissingPluginVersions( session.getCurrentProject(), session );
+ }
+ catch ( PluginVersionResolutionException e )
+ {
+ // not critical here
+ logger.debug( e.getMessage(), e );
+ }
+ }
+
+ PluginPrefixRequest prefixRequest = new DefaultPluginPrefixRequest( prefix, session );
+ PluginPrefixResult prefixResult = pluginPrefixResolver.resolve( prefixRequest );
+
+ Plugin plugin = new Plugin();
+ plugin.setGroupId( prefixResult.getGroupId() );
+ plugin.setArtifactId( prefixResult.getArtifactId() );
+
+ return plugin;
+ }
+
+ private void resolvePluginVersion( Plugin plugin, MavenSession session, MavenProject project )
+ throws PluginVersionResolutionException
+ {
+ PluginVersionRequest versionRequest =
+ new DefaultPluginVersionRequest( plugin, session.getRepositorySession(),
+ project.getRemotePluginRepositories() );
+ plugin.setVersion( pluginVersionResolver.resolve( versionRequest ).getVersion() );
+ }
+
+ private void injectPluginDeclarationFromProject( Plugin plugin, MavenProject project )
+ {
+ Plugin pluginInPom = findPlugin( plugin, project.getBuildPlugins() );
+
+ if ( pluginInPom == null && project.getPluginManagement() != null )
+ {
+ pluginInPom = findPlugin( plugin, project.getPluginManagement().getPlugins() );
+ }
+
+ if ( pluginInPom != null )
+ {
+ if ( plugin.getVersion() == null )
+ {
+ plugin.setVersion( pluginInPom.getVersion() );
+ }
+
+ plugin.setDependencies( new ArrayList<Dependency>( pluginInPom.getDependencies() ) );
+ }
+ }
+
+ private Plugin findPlugin( Plugin plugin, Collection<Plugin> plugins )
+ {
+ return findPlugin( plugin.getGroupId(), plugin.getArtifactId(), plugins );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java
new file mode 100644
index 00000000..a6ba752c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java
@@ -0,0 +1,394 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.CumulativeScopeArtifactFilter;
+import org.apache.maven.execution.ExecutionEvent;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.LifecycleExecutionException;
+import org.apache.maven.lifecycle.MissingProjectException;
+import org.apache.maven.plugin.BuildPluginManager;
+import org.apache.maven.plugin.MavenPluginManager;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.PluginConfigurationException;
+import org.apache.maven.plugin.PluginIncompatibleException;
+import org.apache.maven.plugin.PluginManagerException;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * Executes an individual mojo
+ *
+ * @since 3.0
+ * @author Jason van Zyl
+ * @author Benjamin Bentmann
+ * @author Kristian Rosenvold
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+@Component( role = MojoExecutor.class )
+public class MojoExecutor
+{
+
+ @Requirement
+ private BuildPluginManager pluginManager;
+
+ @Requirement
+ private MavenPluginManager mavenPluginManager;
+
+ @Requirement
+ private LifecycleDependencyResolver lifeCycleDependencyResolver;
+
+ @Requirement
+ private ExecutionEventCatapult eventCatapult;
+
+ public MojoExecutor()
+ {
+ }
+
+ public DependencyContext newDependencyContext( MavenSession session, List<MojoExecution> mojoExecutions )
+ {
+ Set<String> scopesToCollect = new TreeSet<String>();
+ Set<String> scopesToResolve = new TreeSet<String>();
+
+ collectDependencyRequirements( scopesToResolve, scopesToCollect, mojoExecutions );
+
+ return new DependencyContext( session.getCurrentProject(), scopesToCollect, scopesToResolve );
+ }
+
+ private void collectDependencyRequirements( Set<String> scopesToResolve, Set<String> scopesToCollect,
+ Collection<MojoExecution> mojoExecutions )
+ {
+ for ( MojoExecution mojoExecution : mojoExecutions )
+ {
+ MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+
+ scopesToResolve.addAll( toScopes( mojoDescriptor.getDependencyResolutionRequired() ) );
+
+ scopesToCollect.addAll( toScopes( mojoDescriptor.getDependencyCollectionRequired() ) );
+ }
+ }
+
+ private Collection<String> toScopes( String classpath )
+ {
+ if ( StringUtils.isNotEmpty( classpath ) )
+ {
+ if ( Artifact.SCOPE_COMPILE.equals( classpath ) )
+ {
+ return Arrays.asList( Artifact.SCOPE_COMPILE, Artifact.SCOPE_SYSTEM, Artifact.SCOPE_PROVIDED );
+ }
+ else if ( Artifact.SCOPE_RUNTIME.equals( classpath ) )
+ {
+ return Arrays.asList( Artifact.SCOPE_COMPILE, Artifact.SCOPE_RUNTIME );
+ }
+ else if ( Artifact.SCOPE_COMPILE_PLUS_RUNTIME.equals( classpath ) )
+ {
+ return Arrays.asList( Artifact.SCOPE_COMPILE, Artifact.SCOPE_SYSTEM, Artifact.SCOPE_PROVIDED,
+ Artifact.SCOPE_RUNTIME );
+ }
+ else if ( Artifact.SCOPE_RUNTIME_PLUS_SYSTEM.equals( classpath ) )
+ {
+ return Arrays.asList( Artifact.SCOPE_COMPILE, Artifact.SCOPE_SYSTEM, Artifact.SCOPE_RUNTIME );
+ }
+ else if ( Artifact.SCOPE_TEST.equals( classpath ) )
+ {
+ return Arrays.asList( Artifact.SCOPE_COMPILE, Artifact.SCOPE_SYSTEM, Artifact.SCOPE_PROVIDED,
+ Artifact.SCOPE_RUNTIME, Artifact.SCOPE_TEST );
+ }
+ }
+ return Collections.emptyList();
+ }
+
+ public void execute( MavenSession session, List<MojoExecution> mojoExecutions, ProjectIndex projectIndex )
+ throws LifecycleExecutionException
+
+ {
+ DependencyContext dependencyContext = newDependencyContext( session, mojoExecutions );
+
+ PhaseRecorder phaseRecorder = new PhaseRecorder( session.getCurrentProject() );
+
+ for ( MojoExecution mojoExecution : mojoExecutions )
+ {
+ execute( session, mojoExecution, projectIndex, dependencyContext, phaseRecorder );
+ }
+ }
+
+ public void execute( MavenSession session, MojoExecution mojoExecution, ProjectIndex projectIndex,
+ DependencyContext dependencyContext, PhaseRecorder phaseRecorder )
+ throws LifecycleExecutionException
+ {
+ execute( session, mojoExecution, projectIndex, dependencyContext );
+ phaseRecorder.observeExecution( mojoExecution );
+ }
+
+ private void execute( MavenSession session, MojoExecution mojoExecution, ProjectIndex projectIndex,
+ DependencyContext dependencyContext )
+ throws LifecycleExecutionException
+ {
+ MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+
+ try
+ {
+ mavenPluginManager.checkRequiredMavenVersion( mojoDescriptor.getPluginDescriptor() );
+ }
+ catch ( PluginIncompatibleException e )
+ {
+ throw new LifecycleExecutionException( mojoExecution, session.getCurrentProject(), e );
+ }
+
+ if ( mojoDescriptor.isProjectRequired() && !session.getRequest().isProjectPresent() )
+ {
+ Throwable cause =
+ new MissingProjectException( "Goal requires a project to execute"
+ + " but there is no POM in this directory (" + session.getExecutionRootDirectory() + ")."
+ + " Please verify you invoked Maven from the correct directory." );
+ throw new LifecycleExecutionException( mojoExecution, null, cause );
+ }
+
+ if ( mojoDescriptor.isOnlineRequired() && session.isOffline() )
+ {
+ if ( MojoExecution.Source.CLI.equals( mojoExecution.getSource() ) )
+ {
+ Throwable cause =
+ new IllegalStateException( "Goal requires online mode for execution"
+ + " but Maven is currently offline." );
+ throw new LifecycleExecutionException( mojoExecution, session.getCurrentProject(), cause );
+ }
+ else
+ {
+ eventCatapult.fire( ExecutionEvent.Type.MojoSkipped, session, mojoExecution );
+
+ return;
+ }
+ }
+
+ List<MavenProject> forkedProjects = executeForkedExecutions( mojoExecution, session, projectIndex );
+
+ ensureDependenciesAreResolved( mojoDescriptor, session, dependencyContext );
+
+ eventCatapult.fire( ExecutionEvent.Type.MojoStarted, session, mojoExecution );
+
+ try
+ {
+ try
+ {
+ pluginManager.executeMojo( session, mojoExecution );
+ }
+ catch ( MojoFailureException e )
+ {
+ throw new LifecycleExecutionException( mojoExecution, session.getCurrentProject(), e );
+ }
+ catch ( MojoExecutionException e )
+ {
+ throw new LifecycleExecutionException( mojoExecution, session.getCurrentProject(), e );
+ }
+ catch ( PluginConfigurationException e )
+ {
+ throw new LifecycleExecutionException( mojoExecution, session.getCurrentProject(), e );
+ }
+ catch ( PluginManagerException e )
+ {
+ throw new LifecycleExecutionException( mojoExecution, session.getCurrentProject(), e );
+ }
+
+ eventCatapult.fire( ExecutionEvent.Type.MojoSucceeded, session, mojoExecution );
+ }
+ catch ( LifecycleExecutionException e )
+ {
+ eventCatapult.fire( ExecutionEvent.Type.MojoFailed, session, mojoExecution, e );
+
+ throw e;
+ }
+ finally
+ {
+ for ( MavenProject forkedProject : forkedProjects )
+ {
+ forkedProject.setExecutionProject( null );
+ }
+ }
+ }
+
+ public void ensureDependenciesAreResolved( MojoDescriptor mojoDescriptor, MavenSession session,
+ DependencyContext dependencyContext )
+ throws LifecycleExecutionException
+
+ {
+ MavenProject project = dependencyContext.getProject();
+ boolean aggregating = mojoDescriptor.isAggregator();
+
+ if ( dependencyContext.isResolutionRequiredForCurrentProject() )
+ {
+ Collection<String> scopesToCollect = dependencyContext.getScopesToCollectForCurrentProject();
+ Collection<String> scopesToResolve = dependencyContext.getScopesToResolveForCurrentProject();
+
+ lifeCycleDependencyResolver.resolveProjectDependencies( project, scopesToCollect, scopesToResolve, session,
+ aggregating, Collections.<Artifact>emptySet() );
+
+ dependencyContext.synchronizeWithProjectState();
+ }
+
+ if ( aggregating )
+ {
+ Collection<String> scopesToCollect = toScopes( mojoDescriptor.getDependencyCollectionRequired() );
+ Collection<String> scopesToResolve = toScopes( mojoDescriptor.getDependencyResolutionRequired() );
+
+ if ( dependencyContext.isResolutionRequiredForAggregatedProjects( scopesToCollect, scopesToResolve ) )
+ {
+ for ( MavenProject aggregatedProject : session.getProjects() )
+ {
+ if ( aggregatedProject != project )
+ {
+ lifeCycleDependencyResolver.resolveProjectDependencies( aggregatedProject, scopesToCollect,
+ scopesToResolve, session, aggregating,
+ Collections.<Artifact>emptySet() );
+ }
+ }
+ }
+ }
+
+ ArtifactFilter artifactFilter = getArtifactFilter( mojoDescriptor );
+ List<MavenProject> projectsToResolve =
+ LifecycleDependencyResolver.getProjects( session.getCurrentProject(), session,
+ mojoDescriptor.isAggregator() );
+ for ( MavenProject projectToResolve : projectsToResolve )
+ {
+ projectToResolve.setArtifactFilter( artifactFilter );
+ }
+ }
+
+ private ArtifactFilter getArtifactFilter( MojoDescriptor mojoDescriptor )
+ {
+ String scopeToResolve = mojoDescriptor.getDependencyResolutionRequired();
+ String scopeToCollect = mojoDescriptor.getDependencyCollectionRequired();
+
+ List<String> scopes = new ArrayList<String>( 2 );
+ if ( StringUtils.isNotEmpty( scopeToCollect ) )
+ {
+ scopes.add( scopeToCollect );
+ }
+ if ( StringUtils.isNotEmpty( scopeToResolve ) )
+ {
+ scopes.add( scopeToResolve );
+ }
+
+ if ( scopes.isEmpty() )
+ {
+ return null;
+ }
+ else
+ {
+ return new CumulativeScopeArtifactFilter( scopes );
+ }
+ }
+
+ public List<MavenProject> executeForkedExecutions( MojoExecution mojoExecution, MavenSession session,
+ ProjectIndex projectIndex )
+ throws LifecycleExecutionException
+ {
+ List<MavenProject> forkedProjects = Collections.emptyList();
+
+ Map<String, List<MojoExecution>> forkedExecutions = mojoExecution.getForkedExecutions();
+
+ if ( !forkedExecutions.isEmpty() )
+ {
+ eventCatapult.fire( ExecutionEvent.Type.ForkStarted, session, mojoExecution );
+
+ MavenProject project = session.getCurrentProject();
+
+ forkedProjects = new ArrayList<MavenProject>( forkedExecutions.size() );
+
+ try
+ {
+ for ( Map.Entry<String, List<MojoExecution>> fork : forkedExecutions.entrySet() )
+ {
+ String projectId = fork.getKey();
+
+ int index = projectIndex.getIndices().get( projectId );
+
+ MavenProject forkedProject = projectIndex.getProjects().get( projectId );
+
+ forkedProjects.add( forkedProject );
+
+ MavenProject executedProject = forkedProject.clone();
+
+ forkedProject.setExecutionProject( executedProject );
+
+ List<MojoExecution> mojoExecutions = fork.getValue();
+
+ if ( mojoExecutions.isEmpty() )
+ {
+ continue;
+ }
+
+ try
+ {
+ session.setCurrentProject( executedProject );
+ session.getProjects().set( index, executedProject );
+ projectIndex.getProjects().put( projectId, executedProject );
+
+ eventCatapult.fire( ExecutionEvent.Type.ForkedProjectStarted, session, mojoExecution );
+
+ execute( session, mojoExecutions, projectIndex );
+
+ eventCatapult.fire( ExecutionEvent.Type.ForkedProjectSucceeded, session, mojoExecution );
+ }
+ catch ( LifecycleExecutionException e )
+ {
+ eventCatapult.fire( ExecutionEvent.Type.ForkedProjectFailed, session, mojoExecution, e );
+
+ throw e;
+ }
+ finally
+ {
+ projectIndex.getProjects().put( projectId, forkedProject );
+ session.getProjects().set( index, forkedProject );
+ session.setCurrentProject( project );
+ }
+ }
+
+ eventCatapult.fire( ExecutionEvent.Type.ForkSucceeded, session, mojoExecution );
+ }
+ catch ( LifecycleExecutionException e )
+ {
+ eventCatapult.fire( ExecutionEvent.Type.ForkFailed, session, mojoExecution, e );
+
+ throw e;
+ }
+ }
+
+ return forkedProjects;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/PhaseRecorder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/PhaseRecorder.java
new file mode 100644
index 00000000..a09a3cb9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/PhaseRecorder.java
@@ -0,0 +1,78 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * @since 3.0
+ * @author Benjamin Bentmann
+ * @author Kristian Rosenvold
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+public class PhaseRecorder
+{
+ private String lastLifecyclePhase;
+
+ private final MavenProject project;
+
+ public PhaseRecorder( MavenProject project )
+ {
+ this.project = project;
+ }
+
+ public void observeExecution( MojoExecution mojoExecution )
+ {
+ String lifecyclePhase = mojoExecution.getLifecyclePhase();
+
+ if ( lifecyclePhase != null )
+ {
+ if ( lastLifecyclePhase == null )
+ {
+ lastLifecyclePhase = lifecyclePhase;
+ }
+ else if ( !lifecyclePhase.equals( lastLifecyclePhase ) )
+ {
+ project.addLifecyclePhase( lastLifecyclePhase );
+ lastLifecyclePhase = lifecyclePhase;
+ }
+ }
+
+ if ( lastLifecyclePhase != null )
+ {
+ project.addLifecyclePhase( lastLifecyclePhase );
+ }
+ }
+
+ public boolean isDifferentPhase( MojoExecution nextMojoExecution )
+ {
+ String lifecyclePhase = nextMojoExecution.getLifecyclePhase();
+ if ( lifecyclePhase == null )
+ {
+ return lastLifecyclePhase != null;
+ }
+ return !lifecyclePhase.equals( lastLifecyclePhase );
+
+ }
+
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectArtifactFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectArtifactFactory.java
new file mode 100644
index 00000000..b4a81075
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectArtifactFactory.java
@@ -0,0 +1,38 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
+
+/**
+ * Component interface responsible for creation of MavenProject#dependencyArtifacts instances.
+ *
+ * @since 3.2.4
+ * @provisional This interface is part of work in progress and can be changed or removed without notice.
+ */
+public interface ProjectArtifactFactory
+{
+ Set<Artifact> createArtifacts( MavenProject project )
+ throws InvalidDependencyVersionException;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectBuildList.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectBuildList.java
new file mode 100644
index 00000000..6c8fd50a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectBuildList.java
@@ -0,0 +1,158 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * A list of project segments, ordered so that all ProjectSegments from first TaskSegment come before any
+ * subsequent TaskSegments.
+ *
+ * @since 3.0
+ * @author Kristian Rosenvold
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+public class ProjectBuildList
+ implements Iterable<ProjectSegment>
+{
+ private final List<ProjectSegment> items;
+
+ public ProjectBuildList( List<ProjectSegment> items )
+ {
+ this.items = Collections.unmodifiableList( items );
+ }
+
+ // TODO: Optimize; or maybe just rewrite the whole way aggregating mojos are being run.
+ /**
+ * Returns aProjectBuildList that contains only items for the specified taskSegment
+ * @param taskSegment the requested tasksegment
+ * @return a project build list for the supplied task segment
+ */
+ public ProjectBuildList getByTaskSegment( TaskSegment taskSegment )
+ {
+ List<ProjectSegment> currentSegment = new ArrayList<ProjectSegment>();
+ for ( ProjectSegment projectBuild : items )
+ {
+ if ( taskSegment == projectBuild.getTaskSegment() )
+ { // NOTE: There's no notion of taskSegment equality.
+ currentSegment.add( projectBuild );
+ }
+ }
+ return new ProjectBuildList( currentSegment );
+ }
+
+ public Map<MavenProject, ProjectSegment> selectSegment( TaskSegment taskSegment )
+ {
+ Map<MavenProject, ProjectSegment> result = new HashMap<MavenProject, ProjectSegment>();
+ for ( ProjectSegment projectBuild : items )
+ {
+ if ( taskSegment == projectBuild.getTaskSegment() )
+ { // NOTE: There's no notion of taskSegment equality.
+ result.put( projectBuild.getProject(), projectBuild );
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Finds the first ProjectSegment matching the supplied project
+ * @param mavenProject the requested project
+ * @return The projectSegment or null.
+ */
+ public ProjectSegment findByMavenProject( MavenProject mavenProject )
+ {
+ for ( ProjectSegment projectBuild : items )
+ {
+ if ( mavenProject.equals( projectBuild.getProject() ) )
+ {
+ return projectBuild;
+ }
+ }
+ return null;
+ }
+
+ public Iterator<ProjectSegment> iterator()
+ {
+ return items.iterator();
+ }
+
+ public void closeAll()
+ {
+ for ( ProjectSegment item : items )
+ {
+ MavenSession sessionForThisModule = item.getSession();
+ sessionForThisModule.setCurrentProject( null );
+ }
+ }
+
+ public int size()
+ {
+ return items.size();
+ }
+
+ public ProjectSegment get( int index )
+ {
+ return items.get( index );
+ }
+
+ public Set<String> getReactorProjectKeys()
+ {
+ Set<String> projectKeys = new HashSet<String>( items.size() * 2 );
+ for ( ProjectSegment projectBuild : items )
+ {
+ MavenProject project = projectBuild.getProject();
+ String key = ArtifactUtils.key( project.getGroupId(), project.getArtifactId(), project.getVersion() );
+ projectKeys.add( key );
+ }
+ return projectKeys;
+ }
+
+
+ public boolean isEmpty()
+ {
+ return items.isEmpty();
+ }
+
+ /**
+ * @return a set of all the projects managed by the build
+ */
+ public Set<MavenProject> getProjects()
+ {
+ Set<MavenProject> projects = new HashSet<MavenProject>();
+
+ for ( ProjectSegment s : items )
+ {
+ projects.add( s.getProject() );
+ }
+ return projects;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectIndex.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectIndex.java
new file mode 100644
index 00000000..b1b1d186
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectIndex.java
@@ -0,0 +1,70 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.lifecycle.internal.builder.BuilderCommon;
+import org.apache.maven.project.MavenProject;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Provides the positional index of the project
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ * @author Kristian Rosenvold (extracted class only)
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+// Todo: Kristian wonders if this class really is necessary and if it overlaps other concepts.
+public final class ProjectIndex
+{
+
+ private final Map<String, MavenProject> projects;
+
+ private final Map<String, Integer> indices;
+
+ public ProjectIndex( List<MavenProject> projects )
+ {
+ this.projects = new HashMap<String, MavenProject>( projects.size() * 2 );
+ this.indices = new HashMap<String, Integer>( projects.size() * 2 );
+
+ for ( int i = 0; i < projects.size(); i++ )
+ {
+ MavenProject project = projects.get( i );
+ String key = BuilderCommon.getKey( project );
+
+ this.getProjects().put( key, project );
+ this.getIndices().put( key, i );
+ }
+ }
+
+ public Map<String, MavenProject> getProjects()
+ {
+ return projects;
+ }
+
+ public Map<String, Integer> getIndices()
+ {
+ return indices;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectSegment.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectSegment.java
new file mode 100644
index 00000000..5ef77454
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectSegment.java
@@ -0,0 +1,106 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.ProjectDependencyGraph;
+import org.apache.maven.project.MavenProject;
+
+import java.util.List;
+
+/**
+ * A build context that matches a mavenproject to a given tasksegment, and the session to be used.
+ * <p/>
+ * A note to the reader;
+ * <p/>
+ * There are several issues/discussions regarding how "aggregator" plugins should be handled.
+ * Read for instance http://docs.codehaus.org/display/MAVEN/Deterministic+Lifecycle+Planning
+ * <p/>
+ * In their current implementation they are "bolted" onto the lifecycle by separating them
+ * into TaskSegments. This class represents the execution context of one such task segment.
+ * <p/>
+ * Wise voices have suggested that maybe aggregators shouldn't be bound to the ordinary
+ * lifecycle at all, in which case we wouldn't be needing this class at all ( and
+ * ProjectBuildList.getByTaskSegments). Or maybe they should be introduced in the calculation
+ * of the execution plan instead, which seems much nicer.
+ * <p/>
+ * Additionally this class contains a clone of the MavenSession, which is *only* needed
+ * because it has as notion of a "current" project.
+ *
+ * @since 3.0
+ * @author Jason van Zyl
+ * @author Benjamin Bentmann
+ * @author Kristian Rosenvold
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+public final class ProjectSegment
+{
+ private final MavenProject project;
+
+ private final TaskSegment taskSegment;
+
+ private final MavenSession session;
+
+ private final List<MavenProject> nonTransitiveUpstreamProjects;
+
+ private final List<MavenProject> transitiveUpstreamProjects;
+
+ public ProjectSegment( MavenProject project, TaskSegment taskSegment, MavenSession copiedSession )
+ {
+ this.project = project;
+ this.taskSegment = taskSegment;
+ this.session = copiedSession;
+ final ProjectDependencyGraph dependencyGraph = getSession().getProjectDependencyGraph();
+ nonTransitiveUpstreamProjects = dependencyGraph.getUpstreamProjects( getProject(), false );
+ transitiveUpstreamProjects = dependencyGraph.getUpstreamProjects( getProject(), true );
+ }
+
+ public MavenSession getSession()
+ {
+ return session;
+ }
+
+ public MavenProject getProject()
+ {
+ return project;
+ }
+
+ public TaskSegment getTaskSegment()
+ {
+ return taskSegment;
+ }
+
+ public List<MavenProject> getImmediateUpstreamProjects()
+ {
+ return nonTransitiveUpstreamProjects;
+ }
+
+ public List<MavenProject> getTransitiveUpstreamProjects()
+ {
+ return transitiveUpstreamProjects;
+ }
+
+ @Override
+ public String toString()
+ {
+ return getProject().getId() + " -> " + getTaskSegment();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorBuildStatus.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorBuildStatus.java
new file mode 100644
index 00000000..2e2c3fd4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorBuildStatus.java
@@ -0,0 +1,80 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.ProjectDependencyGraph;
+import org.apache.maven.lifecycle.internal.builder.BuilderCommon;
+import org.apache.maven.project.MavenProject;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+
+/**
+ * Contains status information that is global to an entire reactor build.
+ *
+ * @since 3.0
+ * @author <a href="mailto:kristian.rosenvold@gmail.com">Kristian Rosenvold</a>
+ */
+public class ReactorBuildStatus
+{
+ private final ProjectDependencyGraph projectDependencyGraph;
+
+ private final Collection<String> blackListedProjects = Collections.synchronizedSet( new HashSet<String>() );
+
+ private volatile boolean halted = false;
+
+ public ReactorBuildStatus( ProjectDependencyGraph projectDependencyGraph )
+ {
+ this.projectDependencyGraph = projectDependencyGraph;
+ }
+
+ public boolean isBlackListed( MavenProject project )
+ {
+ return blackListedProjects.contains( BuilderCommon.getKey( project ) );
+ }
+
+ public void blackList( MavenProject project )
+ {
+ if ( blackListedProjects.add( BuilderCommon.getKey( project ) ) && projectDependencyGraph != null )
+ {
+ for ( MavenProject downstreamProject : projectDependencyGraph.getDownstreamProjects( project, true ) )
+ {
+ blackListedProjects.add( BuilderCommon.getKey( downstreamProject ) );
+ }
+ }
+ }
+
+ public void halt()
+ {
+ halted = true;
+ }
+
+ public boolean isHalted()
+ {
+ return halted;
+ }
+
+ public boolean isHaltedOrBlacklisted( MavenProject mavenProject )
+ {
+ return isBlackListed( mavenProject ) || isHalted();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorContext.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorContext.java
new file mode 100644
index 00000000..7df53140
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorContext.java
@@ -0,0 +1,83 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenExecutionResult;
+import org.apache.maven.session.scope.internal.SessionScope;
+
+/**
+ * Context that is fixed for the entire reactor build.
+ *
+ * @since 3.0
+ * @author Jason van Zyl
+ * @author Kristian Rosenvold
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+public class ReactorContext
+{
+ private final MavenExecutionResult result;
+
+ private final ProjectIndex projectIndex;
+
+ private final ClassLoader originalContextClassLoader;
+
+ private final ReactorBuildStatus reactorBuildStatus;
+
+ private final SessionScope.Memento sessionScope;
+
+ public ReactorContext( MavenExecutionResult result, ProjectIndex projectIndex,
+ ClassLoader originalContextClassLoader, ReactorBuildStatus reactorBuildStatus,
+ SessionScope.Memento sessionScope )
+ {
+ this.result = result;
+ this.projectIndex = projectIndex;
+ this.originalContextClassLoader = originalContextClassLoader;
+ this.reactorBuildStatus = reactorBuildStatus;
+ this.sessionScope = sessionScope;
+ }
+
+ public ReactorBuildStatus getReactorBuildStatus()
+ {
+ return reactorBuildStatus;
+ }
+
+ public MavenExecutionResult getResult()
+ {
+ return result;
+ }
+
+ public ProjectIndex getProjectIndex()
+ {
+ return projectIndex;
+ }
+
+ public ClassLoader getOriginalContextClassLoader()
+ {
+ return originalContextClassLoader;
+ }
+
+ /**
+ * @since 3.3.0
+ */
+ public SessionScope.Memento getSessionScopeMemento()
+ {
+ return sessionScope;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/TaskSegment.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/TaskSegment.java
new file mode 100644
index 00000000..9551887c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/TaskSegment.java
@@ -0,0 +1,73 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Describes the required task segment as provided on the maven command line; i.e. "clean jetty:run install"
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ * @author Kristian Rosenvold (extracted class only)
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+public final class TaskSegment
+{
+
+ // Can be both "LifeCycleTask" (clean/install) and "GoalTask" (org.mortbay.jetty:maven-jetty-plugin:6.1.19:run)
+
+ private final List<Object> tasks;
+
+ private final boolean aggregating;
+
+ public TaskSegment( boolean aggregating )
+ {
+ this.aggregating = aggregating;
+ tasks = new ArrayList<Object>();
+ }
+
+ public TaskSegment( boolean aggregating, Object... tasks )
+ {
+ this.aggregating = aggregating;
+ this.tasks = new ArrayList<Object>( Arrays.asList( tasks ) );
+ }
+
+ @Override
+ public String toString()
+ {
+ return getTasks().toString();
+ }
+
+ public List<Object> getTasks()
+ {
+ return tasks;
+ }
+
+ public boolean isAggregating()
+ {
+ return aggregating;
+ }
+
+ // TODO: Consider throwing UnsupprtedSomething on hashCode/equals
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/Builder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/Builder.java
new file mode 100644
index 00000000..155abf92
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/Builder.java
@@ -0,0 +1,47 @@
+package org.apache.maven.lifecycle.internal.builder;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.internal.ProjectBuildList;
+import org.apache.maven.lifecycle.internal.ReactorBuildStatus;
+import org.apache.maven.lifecycle.internal.ReactorContext;
+import org.apache.maven.lifecycle.internal.TaskSegment;
+
+/**
+ * A {@link Builder} encapsulates a strategy for building a set of Maven projects. The default strategy in Maven builds
+ * the the projects serially, but a {@link Builder} can employ any type of concurrency model to build the projects.
+ *
+ * @author jvanzyl
+ * @provisional
+ */
+public interface Builder
+{
+ //
+ // Be nice to whittle this down to Session, maybe add task segments to the session. The session really is the
+ // the place to store reactor related information.
+ //
+ void build( MavenSession session, ReactorContext reactorContext, ProjectBuildList projectBuilds,
+ List<TaskSegment> taskSegments, ReactorBuildStatus reactorBuildStatus )
+ throws ExecutionException, InterruptedException;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java
new file mode 100644
index 00000000..34fb323e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java
@@ -0,0 +1,199 @@
+package org.apache.maven.lifecycle.internal.builder;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.execution.BuildFailure;
+import org.apache.maven.execution.ExecutionEvent;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.LifecycleExecutionException;
+import org.apache.maven.lifecycle.LifecycleNotFoundException;
+import org.apache.maven.lifecycle.LifecyclePhaseNotFoundException;
+import org.apache.maven.lifecycle.MavenExecutionPlan;
+import org.apache.maven.lifecycle.internal.ExecutionEventCatapult;
+import org.apache.maven.lifecycle.internal.LifecycleDebugLogger;
+import org.apache.maven.lifecycle.internal.LifecycleExecutionPlanCalculator;
+import org.apache.maven.lifecycle.internal.ReactorContext;
+import org.apache.maven.lifecycle.internal.TaskSegment;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+
+import java.util.Set;
+
+/**
+ * Common code that is shared by the LifecycleModuleBuilder and the LifeCycleWeaveBuilder
+ *
+ * @since 3.0
+ * @author Kristian Rosenvold
+ * Builds one or more lifecycles for a full module
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+@Component( role = BuilderCommon.class )
+public class BuilderCommon
+{
+ @Requirement
+ private LifecycleDebugLogger lifecycleDebugLogger;
+
+ @Requirement
+ private LifecycleExecutionPlanCalculator lifeCycleExecutionPlanCalculator;
+
+ @Requirement
+ private ExecutionEventCatapult eventCatapult;
+
+ @Requirement
+ private Logger logger;
+
+
+ public BuilderCommon()
+ {
+ }
+
+ public BuilderCommon( LifecycleDebugLogger lifecycleDebugLogger,
+ LifecycleExecutionPlanCalculator lifeCycleExecutionPlanCalculator, Logger logger )
+ {
+ this.lifecycleDebugLogger = lifecycleDebugLogger;
+ this.lifeCycleExecutionPlanCalculator = lifeCycleExecutionPlanCalculator;
+ this.logger = logger;
+ }
+
+ public MavenExecutionPlan resolveBuildPlan( MavenSession session, MavenProject project, TaskSegment taskSegment,
+ Set<Artifact> projectArtifacts )
+ throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException,
+ PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException,
+ NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException,
+ LifecycleExecutionException
+ {
+ MavenExecutionPlan executionPlan =
+ lifeCycleExecutionPlanCalculator.calculateExecutionPlan( session, project, taskSegment.getTasks() );
+
+ lifecycleDebugLogger.debugProjectPlan( project, executionPlan );
+
+ if ( session.getRequest().getDegreeOfConcurrency() > 1 )
+ {
+ final Set<Plugin> unsafePlugins = executionPlan.getNonThreadSafePlugins();
+ if ( !unsafePlugins.isEmpty() && logger.isDebugEnabled() )
+ {
+ logger.warn( "*****************************************************************" );
+ logger.warn( "* Your build is requesting parallel execution, but project *" );
+ logger.warn( "* contains the following plugin(s) that have goals not marked *" );
+ logger.warn( "* as @threadSafe to support parallel building. *" );
+ logger.warn( "* While this /may/ work fine, please look for plugin updates *" );
+ logger.warn( "* and/or request plugins be made thread-safe. *" );
+ logger.warn( "* If reporting an issue, report it against the plugin in *" );
+ logger.warn( "* question, not against maven-core *" );
+ logger.warn( "*****************************************************************" );
+ if ( logger.isDebugEnabled() )
+ {
+ final Set<MojoDescriptor> unsafeGoals = executionPlan.getNonThreadSafeMojos();
+ logger.warn( "The following goals are not marked @threadSafe in " + project.getName() + ":" );
+ for ( MojoDescriptor unsafeGoal : unsafeGoals )
+ {
+ logger.warn( unsafeGoal.getId() );
+ }
+ }
+ else
+ {
+ logger.warn( "The following plugins are not marked @threadSafe in " + project.getName() + ":" );
+ for ( Plugin unsafePlugin : unsafePlugins )
+ {
+ logger.warn( unsafePlugin.getId() );
+ }
+ logger.warn( "Enable debug to see more precisely which goals are not marked @threadSafe." );
+ }
+ logger.warn( "*****************************************************************" );
+ }
+ }
+
+ return executionPlan;
+ }
+
+ public void handleBuildError( final ReactorContext buildContext, final MavenSession rootSession,
+ final MavenSession currentSession, final MavenProject mavenProject, Throwable t,
+ final long buildStartTime )
+ {
+ // record the error and mark the project as failed
+ long buildEndTime = System.currentTimeMillis();
+ buildContext.getResult().addException( t );
+ buildContext.getResult().addBuildSummary( new BuildFailure( mavenProject, buildEndTime - buildStartTime, t ) );
+
+ // notify listeners about "soft" project build failures only
+ if ( t instanceof Exception && !( t instanceof RuntimeException ) )
+ {
+ eventCatapult.fire( ExecutionEvent.Type.ProjectFailed, currentSession, null, (Exception) t );
+ }
+
+ // reactor failure modes
+ if ( t instanceof RuntimeException || !( t instanceof Exception ) )
+ {
+ // fail fast on RuntimeExceptions, Errors and "other" Throwables
+ // assume these are system errors and further build is meaningless
+ buildContext.getReactorBuildStatus().halt();
+ }
+ else if ( MavenExecutionRequest.REACTOR_FAIL_NEVER.equals( rootSession.getReactorFailureBehavior() ) )
+ {
+ // continue the build
+ }
+ else if ( MavenExecutionRequest.REACTOR_FAIL_AT_END.equals( rootSession.getReactorFailureBehavior() ) )
+ {
+ // continue the build but ban all projects that depend on the failed one
+ buildContext.getReactorBuildStatus().blackList( mavenProject );
+ }
+ else if ( MavenExecutionRequest.REACTOR_FAIL_FAST.equals( rootSession.getReactorFailureBehavior() ) )
+ {
+ buildContext.getReactorBuildStatus().halt();
+ }
+ else
+ {
+ logger.error( "invalid reactor failure behavior " + rootSession.getReactorFailureBehavior() );
+ buildContext.getReactorBuildStatus().halt();
+ }
+ }
+
+ public static void attachToThread( MavenProject currentProject )
+ {
+ ClassRealm projectRealm = currentProject.getClassRealm();
+ if ( projectRealm != null )
+ {
+ Thread.currentThread().setContextClassLoader( projectRealm );
+ }
+ }
+
+ // Todo: I'm really wondering where this method belongs; smells like it should be on MavenProject, but for some
+ // reason it isn't ? This localization is kind-of a code smell.
+
+ public static String getKey( MavenProject project )
+ {
+ return project.getGroupId() + ':' + project.getArtifactId() + ':' + project.getVersion();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderNotFoundException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderNotFoundException.java
new file mode 100644
index 00000000..52c668f1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderNotFoundException.java
@@ -0,0 +1,29 @@
+package org.apache.maven.lifecycle.internal.builder;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public class BuilderNotFoundException
+ extends Exception
+{
+ public BuilderNotFoundException( String message )
+ {
+ super( message );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ConcurrencyDependencyGraph.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ConcurrencyDependencyGraph.java
new file mode 100644
index 00000000..de6a5a31
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ConcurrencyDependencyGraph.java
@@ -0,0 +1,153 @@
+package org.apache.maven.lifecycle.internal.builder.multithreaded;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.ProjectDependencyGraph;
+import org.apache.maven.lifecycle.internal.ProjectBuildList;
+import org.apache.maven.lifecycle.internal.ProjectSegment;
+import org.apache.maven.project.MavenProject;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Presents a view of the Dependency Graph that is suited for concurrent building.
+ *
+ * @since 3.0
+ * @author Kristian Rosenvold
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+public class ConcurrencyDependencyGraph
+{
+
+ private final ProjectBuildList projectBuilds;
+
+ private final ProjectDependencyGraph projectDependencyGraph;
+
+ private final HashSet<MavenProject> finishedProjects = new HashSet<MavenProject>();
+
+ public ConcurrencyDependencyGraph( ProjectBuildList projectBuilds, ProjectDependencyGraph projectDependencyGraph )
+ {
+ this.projectDependencyGraph = projectDependencyGraph;
+ this.projectBuilds = projectBuilds;
+ }
+
+ public int getNumberOfBuilds()
+ {
+ return projectBuilds.size();
+ }
+
+ /**
+ * Gets all the builds that have no reactor-dependencies
+ *
+ * @return A list of all the initial builds
+ */
+
+ public List<MavenProject> getRootSchedulableBuilds()
+ {
+ List<MavenProject> result = new ArrayList<MavenProject>();
+ for ( ProjectSegment projectBuild : projectBuilds )
+ {
+ if ( projectDependencyGraph.getUpstreamProjects( projectBuild.getProject(), false ).size() == 0 )
+ {
+ result.add( projectBuild.getProject() );
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Marks the provided project as finished. Returns a list of
+ *
+ * @param mavenProject The project
+ * @return The list of builds that are eligible for starting now that the provided project is done
+ */
+ public List<MavenProject> markAsFinished( MavenProject mavenProject )
+ {
+ finishedProjects.add( mavenProject );
+ return getSchedulableNewProcesses( mavenProject );
+ }
+
+ private List<MavenProject> getSchedulableNewProcesses( MavenProject finishedProject )
+ {
+ List<MavenProject> result = new ArrayList<MavenProject>();
+ // schedule dependent projects, if all of their requirements are met
+ for ( MavenProject dependentProject : projectDependencyGraph.getDownstreamProjects( finishedProject, false ) )
+ {
+ final List<MavenProject> upstreamProjects =
+ projectDependencyGraph.getUpstreamProjects( dependentProject, false );
+ if ( finishedProjects.containsAll( upstreamProjects ) )
+ {
+ result.add( dependentProject );
+ }
+ }
+ return result;
+ }
+
+ /**
+ * @return set of projects that have yet to be processed successfully by the build.
+ */
+ public Set<MavenProject> getUnfinishedProjects()
+ {
+ Set<MavenProject> unfinished = new HashSet<MavenProject>( projectBuilds.getProjects() );
+ unfinished.remove( finishedProjects );
+ return unfinished;
+ }
+
+ /**
+ * @return set of projects that have been successfully processed by the build.
+ */
+ protected Set<MavenProject> getFinishedProjects()
+ {
+ return finishedProjects;
+ }
+
+ protected ProjectBuildList getProjectBuilds()
+ {
+ return projectBuilds;
+ }
+
+ /**
+ * For the given {@link MavenProject} {@code p}, return all of {@code p}'s dependencies.
+ *
+ * @param p
+ * @return List of prerequisite projects
+ */
+ protected List<MavenProject> getDependencies( MavenProject p )
+ {
+ return projectDependencyGraph.getUpstreamProjects( p, false );
+ }
+
+ /**
+ * For the given {@link MavenProject} {@code p} return {@code p}'s uncompleted dependencies.
+ *
+ * @param p
+ * @return List of uncompleted prerequisite projects
+ */
+ public List<MavenProject> getActiveDependencies( MavenProject p )
+ {
+ List<MavenProject> activeDependencies = projectDependencyGraph.getUpstreamProjects( p, false );
+ activeDependencies.removeAll( finishedProjects );
+ return activeDependencies;
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java
new file mode 100644
index 00000000..906e5e75
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java
@@ -0,0 +1,197 @@
+package org.apache.maven.lifecycle.internal.builder.multithreaded;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CompletionService;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorCompletionService;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.internal.BuildThreadFactory;
+import org.apache.maven.lifecycle.internal.LifecycleModuleBuilder;
+import org.apache.maven.lifecycle.internal.ProjectBuildList;
+import org.apache.maven.lifecycle.internal.ProjectSegment;
+import org.apache.maven.lifecycle.internal.ReactorBuildStatus;
+import org.apache.maven.lifecycle.internal.ReactorContext;
+import org.apache.maven.lifecycle.internal.TaskSegment;
+import org.apache.maven.lifecycle.internal.builder.Builder;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+
+/**
+ * Builds the full lifecycle in weave-mode (phase by phase as opposed to project-by-project)
+ *
+ * @since 3.0
+ * @author Kristian Rosenvold
+ * Builds one or more lifecycles for a full module
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ */
+@Component( role = Builder.class, hint = "multithreaded" )
+public class MultiThreadedBuilder
+ implements Builder
+{
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private LifecycleModuleBuilder lifecycleModuleBuilder;
+
+
+ public MultiThreadedBuilder()
+ {
+ }
+
+ @Override
+ public void build( MavenSession session, ReactorContext reactorContext, ProjectBuildList projectBuilds,
+ List<TaskSegment> taskSegments, ReactorBuildStatus reactorBuildStatus )
+ throws ExecutionException, InterruptedException
+ {
+ ExecutorService executor =
+ Executors.newFixedThreadPool( Math.min( session.getRequest().getDegreeOfConcurrency(),
+ session.getProjects().size() ), new BuildThreadFactory() );
+ CompletionService<ProjectSegment> service = new ExecutorCompletionService<ProjectSegment>( executor );
+ ConcurrencyDependencyGraph analyzer =
+ new ConcurrencyDependencyGraph( projectBuilds, session.getProjectDependencyGraph() );
+
+ // Currently disabled
+ ThreadOutputMuxer muxer = null; // new ThreadOutputMuxer( analyzer.getProjectBuilds(), System.out );
+
+ for ( TaskSegment taskSegment : taskSegments )
+ {
+ Map<MavenProject, ProjectSegment> projectBuildMap = projectBuilds.selectSegment( taskSegment );
+ try
+ {
+ multiThreadedProjectTaskSegmentBuild( analyzer, reactorContext, session, service, taskSegment,
+ projectBuildMap, muxer );
+ if ( reactorContext.getReactorBuildStatus().isHalted() )
+ {
+ break;
+ }
+ }
+ catch ( Exception e )
+ {
+ session.getResult().addException( e );
+ break;
+ }
+
+ }
+ }
+
+ private void multiThreadedProjectTaskSegmentBuild( ConcurrencyDependencyGraph analyzer,
+ ReactorContext reactorContext, MavenSession rootSession,
+ CompletionService<ProjectSegment> service,
+ TaskSegment taskSegment,
+ Map<MavenProject, ProjectSegment> projectBuildList,
+ ThreadOutputMuxer muxer )
+ {
+
+ // schedule independent projects
+ for ( MavenProject mavenProject : analyzer.getRootSchedulableBuilds() )
+ {
+ ProjectSegment projectSegment = projectBuildList.get( mavenProject );
+ logger.debug( "Scheduling: " + projectSegment.getProject() );
+ Callable<ProjectSegment> cb =
+ createBuildCallable( rootSession, projectSegment, reactorContext, taskSegment, muxer );
+ service.submit( cb );
+ }
+
+ // for each finished project
+ for ( int i = 0; i < analyzer.getNumberOfBuilds(); i++ )
+ {
+ try
+ {
+ ProjectSegment projectBuild = service.take().get();
+ if ( reactorContext.getReactorBuildStatus().isHalted() )
+ {
+ break;
+ }
+ final List<MavenProject> newItemsThatCanBeBuilt =
+ analyzer.markAsFinished( projectBuild.getProject() );
+ for ( MavenProject mavenProject : newItemsThatCanBeBuilt )
+ {
+ ProjectSegment scheduledDependent = projectBuildList.get( mavenProject );
+ logger.debug( "Scheduling: " + scheduledDependent );
+ Callable<ProjectSegment> cb =
+ createBuildCallable( rootSession, scheduledDependent, reactorContext, taskSegment, muxer );
+ service.submit( cb );
+ }
+ }
+ catch ( InterruptedException e )
+ {
+ rootSession.getResult().addException( e );
+ break;
+ }
+ catch ( ExecutionException e )
+ {
+ // TODO MNG-5766 changes likely made this redundant
+ rootSession.getResult().addException( e );
+ break;
+ }
+ }
+
+ // cancel outstanding builds (if any) - this can happen if an exception is thrown in above block
+
+ Future<ProjectSegment> unprocessed;
+ while ( ( unprocessed = service.poll() ) != null )
+ {
+ try
+ {
+ unprocessed.get();
+ }
+ catch ( InterruptedException e )
+ {
+ throw new RuntimeException( e );
+ }
+ catch ( ExecutionException e )
+ {
+ throw new RuntimeException( e );
+ }
+ }
+ }
+
+ private Callable<ProjectSegment> createBuildCallable( final MavenSession rootSession,
+ final ProjectSegment projectBuild,
+ final ReactorContext reactorContext,
+ final TaskSegment taskSegment, final ThreadOutputMuxer muxer )
+ {
+ return new Callable<ProjectSegment>()
+ {
+ public ProjectSegment call()
+ {
+ // muxer.associateThreadWithProjectSegment( projectBuild );
+ lifecycleModuleBuilder.buildProject( projectBuild.getSession(), rootSession, reactorContext,
+ projectBuild.getProject(), taskSegment );
+ // muxer.setThisModuleComplete( projectBuild );
+
+ return projectBuild;
+ }
+ };
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxer.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxer.java
new file mode 100644
index 00000000..8f1f4932
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxer.java
@@ -0,0 +1,477 @@
+package org.apache.maven.lifecycle.internal.builder.multithreaded;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.lifecycle.internal.ProjectBuildList;
+import org.apache.maven.lifecycle.internal.ProjectSegment;
+
+/**
+ * @since 3.0
+ * @author Kristian Rosenvold
+ * <p/>
+ * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ * This class in particular may spontaneusly self-combust and be replaced by a plexus-compliant thread aware
+ * logger implementation at any time.
+ */
+@SuppressWarnings( { "SynchronizationOnLocalVariableOrMethodParameter" } )
+public class ThreadOutputMuxer
+{
+ private final Iterator<ProjectSegment> projects;
+
+ private final ThreadLocal<ProjectSegment> projectBuildThreadLocal = new ThreadLocal<ProjectSegment>();
+
+ private final Map<ProjectSegment, ByteArrayOutputStream> streams =
+ new HashMap<ProjectSegment, ByteArrayOutputStream>();
+
+ private final Map<ProjectSegment, PrintStream> printStreams = new HashMap<ProjectSegment, PrintStream>();
+
+ private final ByteArrayOutputStream defaultOutputStreamForUnknownData = new ByteArrayOutputStream();
+
+ private final PrintStream defaultPringStream = new PrintStream( defaultOutputStreamForUnknownData );
+
+ private final Set<ProjectSegment> completedBuilds = Collections.synchronizedSet( new HashSet<ProjectSegment>() );
+
+ private volatile ProjectSegment currentBuild;
+
+ private final PrintStream originalSystemOUtStream;
+
+ private final ConsolePrinter printer;
+
+ /**
+ * A simple but safe solution for printing to the console.
+ */
+
+ class ConsolePrinter
+ implements Runnable
+ {
+ public volatile boolean running;
+
+ private final ProjectBuildList projectBuildList;
+
+ ConsolePrinter( ProjectBuildList projectBuildList )
+ {
+ this.projectBuildList = projectBuildList;
+ }
+
+ public void run()
+ {
+ running = true;
+ for ( ProjectSegment projectBuild : projectBuildList )
+ {
+ final PrintStream projectStream = printStreams.get( projectBuild );
+ ByteArrayOutputStream projectOs = streams.get( projectBuild );
+
+ do
+ {
+ synchronized ( projectStream )
+ {
+ try
+ {
+ projectStream.wait( 100 );
+ }
+ catch ( InterruptedException e )
+ {
+ throw new RuntimeException( e );
+ }
+ try
+ {
+ projectOs.writeTo( originalSystemOUtStream );
+ }
+ catch ( IOException e )
+ {
+ throw new RuntimeException( e );
+ }
+
+ projectOs.reset();
+ }
+ }
+ while ( !completedBuilds.contains( projectBuild ) );
+ }
+ running = false;
+ }
+
+ /*
+ Wait until we are sure the print-stream thread is running.
+ */
+
+ public void waitUntilRunning( boolean expect )
+ {
+ while ( !running == expect )
+ {
+ try
+ {
+ Thread.sleep( 10 );
+ }
+ catch ( InterruptedException e )
+ {
+ throw new RuntimeException( e );
+ }
+ }
+ }
+ }
+
+ public ThreadOutputMuxer( ProjectBuildList segmentChunks, PrintStream originalSystemOut )
+ {
+ projects = segmentChunks.iterator();
+ for ( ProjectSegment segmentChunk : segmentChunks )
+ {
+ final ByteArrayOutputStream value = new ByteArrayOutputStream();
+ streams.put( segmentChunk, value );
+ printStreams.put( segmentChunk, new PrintStream( value ) );
+ }
+ setNext();
+ this.originalSystemOUtStream = originalSystemOut;
+ System.setOut( new ThreadBoundPrintStream( this.originalSystemOUtStream ) );
+ printer = new ConsolePrinter( segmentChunks );
+ new Thread( printer ).start();
+ printer.waitUntilRunning( true );
+ }
+
+ public void close()
+ {
+ printer.waitUntilRunning( false );
+ System.setOut( this.originalSystemOUtStream );
+ }
+
+ private void setNext()
+ {
+ currentBuild = projects.hasNext() ? projects.next() : null;
+ }
+
+ private boolean ownsRealOutputStream( ProjectSegment projectBuild )
+ {
+ return projectBuild.equals( currentBuild );
+ }
+
+ private PrintStream getThreadBoundPrintStream()
+ {
+ ProjectSegment threadProject = projectBuildThreadLocal.get();
+ if ( threadProject == null )
+ {
+ return defaultPringStream;
+ }
+ if ( ownsRealOutputStream( threadProject ) )
+ {
+ return originalSystemOUtStream;
+ }
+ return printStreams.get( threadProject );
+ }
+
+ public void associateThreadWithProjectSegment( ProjectSegment projectBuild )
+ {
+ projectBuildThreadLocal.set( projectBuild );
+ }
+
+ public void setThisModuleComplete( ProjectSegment projectBuild )
+ {
+ completedBuilds.add( projectBuild );
+ PrintStream stream = printStreams.get( projectBuild );
+ synchronized ( stream )
+ {
+ stream.notifyAll();
+ }
+ disconnectThreadFromProject();
+ }
+
+ private void disconnectThreadFromProject()
+ {
+ projectBuildThreadLocal.remove();
+ }
+
+ private class ThreadBoundPrintStream
+ extends PrintStream
+ {
+
+ public ThreadBoundPrintStream( PrintStream systemOutStream )
+ {
+ super( systemOutStream );
+ }
+
+ private PrintStream getOutputStreamForCurrentThread()
+ {
+ return getThreadBoundPrintStream();
+ }
+
+ @Override
+ public void println()
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.println();
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void print( char c )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.print( c );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void println( char x )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.println( x );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void print( double d )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.print( d );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void println( double x )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.println( x );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void print( float f )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.print( f );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void println( float x )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.println( x );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void print( int i )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.print( i );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void println( int x )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.println( x );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void print( long l )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.print( l );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void println( long x )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.print( x );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void print( boolean b )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.print( b );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void println( boolean x )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.print( x );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void print( char s[] )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.print( s );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void println( char x[] )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.print( x );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void print( Object obj )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.print( obj );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void println( Object x )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.println( x );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void print( String s )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.print( s );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void println( String x )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.println( x );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void write( byte b[], int off, int len )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.write( b, off, len );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void close()
+ {
+ getOutputStreamForCurrentThread().close();
+ }
+
+ @Override
+ public void flush()
+ {
+ getOutputStreamForCurrentThread().flush();
+ }
+
+ @Override
+ public void write( int b )
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.write( b );
+ currentStream.notifyAll();
+ }
+ }
+
+ @Override
+ public void write( byte b[] )
+ throws IOException
+ {
+ final PrintStream currentStream = getOutputStreamForCurrentThread();
+ synchronized ( currentStream )
+ {
+ currentStream.write( b );
+ currentStream.notifyAll();
+ }
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/singlethreaded/SingleThreadedBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/singlethreaded/SingleThreadedBuilder.java
new file mode 100644
index 00000000..464944f1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/singlethreaded/SingleThreadedBuilder.java
@@ -0,0 +1,65 @@
+package org.apache.maven.lifecycle.internal.builder.singlethreaded;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.internal.LifecycleModuleBuilder;
+import org.apache.maven.lifecycle.internal.ProjectBuildList;
+import org.apache.maven.lifecycle.internal.ProjectSegment;
+import org.apache.maven.lifecycle.internal.ReactorBuildStatus;
+import org.apache.maven.lifecycle.internal.ReactorContext;
+import org.apache.maven.lifecycle.internal.TaskSegment;
+import org.apache.maven.lifecycle.internal.builder.Builder;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+@Component( role = Builder.class, hint = "singlethreaded" )
+public class SingleThreadedBuilder
+ implements Builder
+{
+ @Requirement
+ private LifecycleModuleBuilder lifecycleModuleBuilder;
+
+ public void build( MavenSession session, ReactorContext reactorContext, ProjectBuildList projectBuilds,
+ List<TaskSegment> taskSegments, ReactorBuildStatus reactorBuildStatus )
+ {
+ for ( TaskSegment taskSegment : taskSegments )
+ {
+ for ( ProjectSegment projectBuild : projectBuilds.getByTaskSegment( taskSegment ) )
+ {
+ try
+ {
+ lifecycleModuleBuilder.buildProject( session, reactorContext, projectBuild.getProject(),
+ taskSegment );
+ if ( reactorBuildStatus.isHalted() )
+ {
+ break;
+ }
+ }
+ catch ( Exception e )
+ {
+ break; // Why are we just ignoring this exception? Are exceptions are being used for flow control
+ }
+ }
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/DefaultLifecycleMapping.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/DefaultLifecycleMapping.java
new file mode 100644
index 00000000..9947e2fc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/DefaultLifecycleMapping.java
@@ -0,0 +1,111 @@
+package org.apache.maven.lifecycle.mapping;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class DefaultLifecycleMapping
+ implements LifecycleMapping
+{
+
+ private List<Lifecycle> lifecycles;
+
+ private Map<String, Lifecycle> lifecycleMap;
+
+ /** @deprecated use lifecycles instead */
+ private Map<String, String> phases;
+
+ /**
+ * Populates the lifecycle map from the injected list of lifecycle mappings (if not already done).
+ */
+ private void initLifecycleMap()
+ {
+ if ( lifecycleMap == null )
+ {
+ lifecycleMap = new HashMap<String, Lifecycle>();
+
+ if ( lifecycles != null )
+ {
+ for ( Lifecycle lifecycle : lifecycles )
+ {
+ lifecycleMap.put( lifecycle.getId(), lifecycle );
+ }
+ }
+ else
+ {
+ /*
+ * NOTE: This is to provide a migration path for implementors of the legacy API which did not know about
+ * getLifecycles().
+ */
+
+ String[] lifecycleIds = { "default", "clean", "site" };
+
+ for ( String lifecycleId : lifecycleIds )
+ {
+ Map<String, String> phases = getPhases( lifecycleId );
+ if ( phases != null )
+ {
+ Lifecycle lifecycle = new Lifecycle();
+
+ lifecycle.setId( lifecycleId );
+ lifecycle.setPhases( phases );
+
+ lifecycleMap.put( lifecycleId, lifecycle );
+ }
+ }
+ }
+ }
+ }
+
+ public Map<String, Lifecycle> getLifecycles()
+ {
+ initLifecycleMap();
+
+ return lifecycleMap;
+ }
+
+ public List<String> getOptionalMojos( String lifecycle )
+ {
+ return null;
+ }
+
+ public Map<String, String> getPhases( String lifecycle )
+ {
+ initLifecycleMap();
+
+ Lifecycle lifecycleMapping = lifecycleMap.get( lifecycle );
+
+ if ( lifecycleMapping != null )
+ {
+ return lifecycleMapping.getPhases();
+ }
+ else if ( "default".equals( lifecycle ) )
+ {
+ return phases;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/Lifecycle.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/Lifecycle.java
new file mode 100644
index 00000000..6adf4f34
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/Lifecycle.java
@@ -0,0 +1,83 @@
+package org.apache.maven.lifecycle.mapping;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Class Lifecycle.
+ */
+public class Lifecycle
+{
+ /**
+ * Field id
+ */
+ private String id;
+
+ /**
+ * Field phases
+ */
+ private Map<String, String> phases;
+
+ /*
+ * NOTE: This exists merely for backward-compat with legacy-style lifecycle definitions and allows configuration
+ * injection to work instead of failing.
+ */
+ @SuppressWarnings( "unused" )
+ private List<String> optionalMojos;
+
+ /**
+ * Method getId
+ */
+ public String getId()
+ {
+ return this.id;
+ }
+
+ /**
+ * Method getPhases
+ */
+ public Map<String, String> getPhases()
+ {
+ return this.phases;
+ }
+
+ /**
+ * Method setId
+ *
+ * @param id
+ */
+ public void setId( String id )
+ {
+ this.id = id;
+ }
+
+ /**
+ * Method setPhases
+ *
+ * @param phases
+ */
+ public void setPhases( Map<String, String> phases )
+ {
+ this.phases = phases;
+ } //-- void setPhases(java.util.List)
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/LifecycleMapping.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/LifecycleMapping.java
new file mode 100644
index 00000000..e656cc9f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/LifecycleMapping.java
@@ -0,0 +1,39 @@
+package org.apache.maven.lifecycle.mapping;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+
+public interface LifecycleMapping
+{
+
+ @Deprecated
+ String ROLE = LifecycleMapping.class.getName();
+
+ Map<String, Lifecycle> getLifecycles();
+
+ @Deprecated
+ List<String> getOptionalMojos( String lifecycle );
+
+ @Deprecated
+ Map<String, String> getPhases( String lifecycle );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java
new file mode 100644
index 00000000..1702aa1e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java
@@ -0,0 +1,171 @@
+package org.apache.maven.model.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.lifecycle.LifeCyclePluginAnalyzer;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginContainer;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.model.PluginManagement;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.building.ModelProblem.Severity;
+import org.apache.maven.model.building.ModelProblem.Version;
+import org.apache.maven.model.building.ModelProblemCollectorRequest;
+import org.apache.maven.model.merge.MavenModelMerger;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+/**
+ * Handles injection of plugin executions induced by the lifecycle bindings for a packaging.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = LifecycleBindingsInjector.class )
+public class DefaultLifecycleBindingsInjector
+ implements LifecycleBindingsInjector
+{
+
+ private LifecycleBindingsMerger merger = new LifecycleBindingsMerger();
+
+ @Requirement
+ private LifeCyclePluginAnalyzer lifecycle;
+
+ public void injectLifecycleBindings( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
+ {
+ String packaging = model.getPackaging();
+
+ Collection<Plugin> defaultPlugins = lifecycle.getPluginsBoundByDefaultToAllLifecycles( packaging );
+
+ if ( defaultPlugins == null )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( "Unknown packaging: " + packaging )
+ .setLocation( model.getLocation( "packaging" ) ) );
+ }
+ else if ( !defaultPlugins.isEmpty() )
+ {
+ Model lifecycleModel = new Model();
+ lifecycleModel.setBuild( new Build() );
+ lifecycleModel.getBuild().getPlugins().addAll( defaultPlugins );
+
+ merger.merge( model, lifecycleModel );
+ }
+ }
+
+ protected static class LifecycleBindingsMerger
+ extends MavenModelMerger
+ {
+
+ private static final String PLUGIN_MANAGEMENT = "plugin-management";
+
+ public void merge( Model target, Model source )
+ {
+ if ( target.getBuild() == null )
+ {
+ target.setBuild( new Build() );
+ }
+
+ Map<Object, Object> context =
+ Collections.<Object, Object>singletonMap( PLUGIN_MANAGEMENT, target.getBuild().getPluginManagement() );
+
+ mergePluginContainer_Plugins( target.getBuild(), source.getBuild(), false, context );
+ }
+
+ @Override
+ protected void mergePluginContainer_Plugins( PluginContainer target, PluginContainer source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ List<Plugin> src = source.getPlugins();
+ if ( !src.isEmpty() )
+ {
+ List<Plugin> tgt = target.getPlugins();
+
+ Map<Object, Plugin> merged = new LinkedHashMap<Object, Plugin>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Plugin element : tgt )
+ {
+ Object key = getPluginKey( element );
+ merged.put( key, element );
+ }
+
+ Map<Object, Plugin> unmanaged = new LinkedHashMap<Object, Plugin>();
+
+ for ( Plugin element : src )
+ {
+ Object key = getPluginKey( element );
+ Plugin existing = merged.get( key );
+ if ( existing != null )
+ {
+ mergePlugin( existing, element, sourceDominant, context );
+ }
+ else
+ {
+ merged.put( key, element );
+ unmanaged.put( key, element );
+ }
+ }
+
+ if ( !unmanaged.isEmpty() )
+ {
+ PluginManagement pluginMgmt = (PluginManagement) context.get( PLUGIN_MANAGEMENT );
+ if ( pluginMgmt != null )
+ {
+ for ( Plugin managedPlugin : pluginMgmt.getPlugins() )
+ {
+ Object key = getPluginKey( managedPlugin );
+ Plugin unmanagedPlugin = unmanaged.get( key );
+ if ( unmanagedPlugin != null )
+ {
+ Plugin plugin = managedPlugin.clone();
+ mergePlugin( plugin, unmanagedPlugin, sourceDominant, Collections.emptyMap() );
+ merged.put( key, plugin );
+ }
+ }
+ }
+ }
+
+ List<Plugin> result = new ArrayList<Plugin>( merged.values() );
+
+ target.setPlugins( result );
+ }
+ }
+
+ @Override
+ protected void mergePluginExecution( PluginExecution target, PluginExecution source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ super.mergePluginExecution( target, source, sourceDominant, context );
+
+ target.setPriority( Math.min( target.getPriority(), source.getPriority() ) );
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/monitor/event/EventDispatcher.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/monitor/event/EventDispatcher.java
new file mode 100644
index 00000000..492a2980
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/monitor/event/EventDispatcher.java
@@ -0,0 +1,37 @@
+package org.apache.maven.monitor.event;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author jdcasey
+ */
+@Deprecated
+public interface EventDispatcher
+{
+
+ void addEventMonitor( EventMonitor monitor );
+
+ void dispatchStart( String event, String target );
+
+ void dispatchEnd( String event, String target );
+
+ void dispatchError( String event, String target, Throwable cause );
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/monitor/event/EventMonitor.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/monitor/event/EventMonitor.java
new file mode 100644
index 00000000..3e726746
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/monitor/event/EventMonitor.java
@@ -0,0 +1,35 @@
+package org.apache.maven.monitor.event;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author jdcasey
+ */
+@Deprecated
+public interface EventMonitor
+{
+
+ void startEvent( String eventName, String target, long timestamp );
+
+ void endEvent( String eventName, String target, long timestamp );
+
+ void errorEvent( String eventName, String target, long timestamp, Throwable cause );
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/BuildPluginManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/BuildPluginManager.java
new file mode 100644
index 00000000..6c1b9cbf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/BuildPluginManager.java
@@ -0,0 +1,54 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * @author Jason van Zyl
+ */
+public interface BuildPluginManager
+{
+ // igorf: Way too many declared exceptions!
+ PluginDescriptor loadPlugin( Plugin plugin, List<RemoteRepository> repositories, RepositorySystemSession session )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ InvalidPluginDescriptorException;
+
+ // igorf: Way too many declared exceptions!
+ MojoDescriptor getMojoDescriptor( Plugin plugin, String goal, List<RemoteRepository> repositories,
+ RepositorySystemSession session )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, InvalidPluginDescriptorException;
+
+ ClassRealm getPluginRealm( MavenSession session, PluginDescriptor pluginDescriptor )
+ throws PluginResolutionException, PluginManagerException;
+
+ void executeMojo( MavenSession session, MojoExecution execution )
+ throws MojoFailureException, MojoExecutionException, PluginConfigurationException, PluginManagerException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/CacheUtils.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/CacheUtils.java
new file mode 100644
index 00000000..a73e1efe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/CacheUtils.java
@@ -0,0 +1,211 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Exclusion;
+import org.apache.maven.model.Plugin;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.repository.RepositoryPolicy;
+import org.eclipse.aether.repository.WorkspaceReader;
+import org.eclipse.aether.repository.WorkspaceRepository;
+
+/**
+ * @author Benjamin Bentmann
+ */
+class CacheUtils
+{
+
+ public static <T> boolean eq( T s1, T s2 )
+ {
+ return s1 != null ? s1.equals( s2 ) : s2 == null;
+ }
+
+ public static int hash( Object obj )
+ {
+ return obj != null ? obj.hashCode() : 0;
+ }
+
+ public static int repositoriesHashCode( List<RemoteRepository> repositories )
+ {
+ int result = 17;
+ for ( RemoteRepository repository : repositories )
+ {
+ result = 31 * result + repositoryHashCode( repository );
+ }
+ return result;
+ }
+
+ private static int repositoryHashCode( RemoteRepository repository )
+ {
+ int result = 17;
+ result = 31 * result + hash( repository.getUrl() );
+ return result;
+ }
+
+ private static boolean repositoryEquals( RemoteRepository r1, RemoteRepository r2 )
+ {
+ if ( r1 == r2 )
+ {
+ return true;
+ }
+
+ return eq( r1.getId(), r2.getId() ) && eq( r1.getUrl(), r2.getUrl() )
+ && policyEquals( r1.getPolicy( false ), r2.getPolicy( false ) )
+ && policyEquals( r1.getPolicy( true ), r2.getPolicy( true ) );
+ }
+
+ private static boolean policyEquals( RepositoryPolicy p1, RepositoryPolicy p2 )
+ {
+ if ( p1 == p2 )
+ {
+ return true;
+ }
+ // update policy doesn't affect contents
+ return p1.isEnabled() == p2.isEnabled() && eq( p1.getChecksumPolicy(), p2.getChecksumPolicy() );
+ }
+
+ public static boolean repositoriesEquals( List<RemoteRepository> r1, List<RemoteRepository> r2 )
+ {
+ if ( r1.size() != r2.size() )
+ {
+ return false;
+ }
+
+ for ( Iterator<RemoteRepository> it1 = r1.iterator(), it2 = r2.iterator(); it1.hasNext(); )
+ {
+ if ( !repositoryEquals( it1.next(), it2.next() ) )
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public static int pluginHashCode( Plugin plugin )
+ {
+ int hash = 17;
+
+ hash = hash * 31 + hash( plugin.getGroupId() );
+ hash = hash * 31 + hash( plugin.getArtifactId() );
+ hash = hash * 31 + hash( plugin.getVersion() );
+
+ hash = hash * 31 + ( plugin.isExtensions() ? 1 : 0 );
+
+ for ( Dependency dependency : plugin.getDependencies() )
+ {
+ hash = hash * 31 + hash( dependency.getGroupId() );
+ hash = hash * 31 + hash( dependency.getArtifactId() );
+ hash = hash * 31 + hash( dependency.getVersion() );
+ hash = hash * 31 + hash( dependency.getType() );
+ hash = hash * 31 + hash( dependency.getClassifier() );
+ hash = hash * 31 + hash( dependency.getScope() );
+
+ for ( Exclusion exclusion : dependency.getExclusions() )
+ {
+ hash = hash * 31 + hash( exclusion.getGroupId() );
+ hash = hash * 31 + hash( exclusion.getArtifactId() );
+ }
+ }
+
+ return hash;
+ }
+
+ public static boolean pluginEquals( Plugin a, Plugin b )
+ {
+ return eq( a.getArtifactId(), b.getArtifactId() ) //
+ && eq( a.getGroupId(), b.getGroupId() ) //
+ && eq( a.getVersion(), b.getVersion() ) //
+ && a.isExtensions() == b.isExtensions() //
+ && dependenciesEquals( a.getDependencies(), b.getDependencies() );
+ }
+
+ private static boolean dependenciesEquals( List<Dependency> a, List<Dependency> b )
+ {
+ if ( a.size() != b.size() )
+ {
+ return false;
+ }
+
+ Iterator<Dependency> aI = a.iterator();
+ Iterator<Dependency> bI = b.iterator();
+
+ while ( aI.hasNext() )
+ {
+ Dependency aD = aI.next();
+ Dependency bD = bI.next();
+
+ boolean r = eq( aD.getGroupId(), bD.getGroupId() ) //
+ && eq( aD.getArtifactId(), bD.getArtifactId() ) //
+ && eq( aD.getVersion(), bD.getVersion() ) //
+ && eq( aD.getType(), bD.getType() ) //
+ && eq( aD.getClassifier(), bD.getClassifier() ) //
+ && eq( aD.getScope(), bD.getScope() );
+
+ r &= exclusionsEquals( aD.getExclusions(), bD.getExclusions() );
+
+ if ( !r )
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private static boolean exclusionsEquals( List<Exclusion> a, List<Exclusion> b )
+ {
+ if ( a.size() != b.size() )
+ {
+ return false;
+ }
+
+ Iterator<Exclusion> aI = a.iterator();
+ Iterator<Exclusion> bI = b.iterator();
+
+ while ( aI.hasNext() )
+ {
+ Exclusion aD = aI.next();
+ Exclusion bD = bI.next();
+
+ boolean r = eq( aD.getGroupId(), bD.getGroupId() ) //
+ && eq( aD.getArtifactId(), bD.getArtifactId() );
+
+ if ( !r )
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public static WorkspaceRepository getWorkspace( RepositorySystemSession session )
+ {
+ WorkspaceReader reader = session.getWorkspaceReader();
+ return ( reader != null ) ? reader.getRepository() : null;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/CompoundMojoExecutionListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/CompoundMojoExecutionListener.java
new file mode 100644
index 00000000..9fe52833
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/CompoundMojoExecutionListener.java
@@ -0,0 +1,64 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+
+import org.apache.maven.execution.MojoExecutionEvent;
+import org.apache.maven.execution.MojoExecutionListener;
+
+class CompoundMojoExecutionListener
+ implements MojoExecutionListener
+{
+
+ private final Collection<MojoExecutionListener> listeners;
+
+ public CompoundMojoExecutionListener( Collection<MojoExecutionListener> listeners )
+ {
+ this.listeners = listeners; // NB this is live injected collection
+ }
+
+ public void beforeMojoExecution( MojoExecutionEvent event )
+ throws MojoExecutionException
+ {
+ for ( MojoExecutionListener listener : listeners )
+ {
+ listener.beforeMojoExecution( event );
+ }
+ }
+
+ public void afterMojoExecutionSuccess( MojoExecutionEvent event )
+ throws MojoExecutionException
+ {
+ for ( MojoExecutionListener listener : listeners )
+ {
+ listener.afterMojoExecutionSuccess( event );
+ }
+ }
+
+ public void afterExecutionFailure( MojoExecutionEvent event )
+ {
+ for ( MojoExecutionListener listener : listeners )
+ {
+ listener.afterExecutionFailure( event );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/CycleDetectedInPluginGraphException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/CycleDetectedInPluginGraphException.java
new file mode 100644
index 00000000..f77461fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/CycleDetectedInPluginGraphException.java
@@ -0,0 +1,46 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Plugin;
+import org.codehaus.plexus.component.composition.CycleDetectedInComponentGraphException;
+
+/**
+ * Exception occurring trying to resolve a plugin.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class CycleDetectedInPluginGraphException
+ extends Exception
+{
+ private final Plugin plugin;
+
+ public CycleDetectedInPluginGraphException( Plugin plugin, CycleDetectedInComponentGraphException e )
+ {
+ super( "A cycle was detected in the component graph of the plugin: " + plugin.getArtifactId() );
+
+ this.plugin = plugin;
+ }
+
+ public Plugin getPlugin()
+ {
+ return plugin;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DebugConfigurationListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DebugConfigurationListener.java
new file mode 100644
index 00000000..57084ceb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DebugConfigurationListener.java
@@ -0,0 +1,91 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.lang.reflect.Array;
+
+import org.codehaus.plexus.component.configurator.ConfigurationListener;
+import org.codehaus.plexus.logging.Logger;
+
+/**
+ * Log at debug level the mojo configuration.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+@Deprecated
+public class DebugConfigurationListener
+ implements ConfigurationListener
+{
+ private Logger logger;
+
+ public DebugConfigurationListener( Logger logger )
+ {
+ this.logger = logger;
+ }
+
+ public void notifyFieldChangeUsingSetter( String fieldName, Object value, Object target )
+ {
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( " (s) " + fieldName + " = " + toString( value ) );
+ }
+ }
+
+ public void notifyFieldChangeUsingReflection( String fieldName, Object value, Object target )
+ {
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( " (f) " + fieldName + " = " + toString( value ) );
+ }
+ }
+
+ /**
+ * Creates a human-friendly string represenation of the specified object.
+ *
+ * @param obj The object to create a string representation for, may be <code>null</code>.
+ * @return The string representation, never <code>null</code>.
+ */
+ private String toString( Object obj )
+ {
+ String str;
+ if ( obj != null && obj.getClass().isArray() )
+ {
+ int n = Array.getLength( obj );
+ StringBuilder buf = new StringBuilder( 256 );
+ buf.append( '[' );
+ for ( int i = 0; i < n; i++ )
+ {
+ if ( i > 0 )
+ {
+ buf.append( ", " );
+ }
+ buf.append( String.valueOf( Array.get( obj, i ) ) );
+ }
+ buf.append( ']' );
+ str = buf.toString();
+ }
+ else
+ {
+ str = String.valueOf( obj );
+ }
+ return str;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java
new file mode 100644
index 00000000..8145bd58
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java
@@ -0,0 +1,244 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.util.List;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.MojoExecutionEvent;
+import org.apache.maven.execution.MojoExecutionListener;
+import org.apache.maven.execution.scope.internal.MojoExecutionScope;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.RemoteRepository;
+
+// TODO: the antrun plugin has its own configurator, the only plugin that does. might need to think about how that works
+// TODO: remove the coreArtifactFilterManager
+
+@Component( role = BuildPluginManager.class )
+public class DefaultBuildPluginManager
+ implements BuildPluginManager
+{
+
+ @Requirement
+ private MavenPluginManager mavenPluginManager;
+
+ @Requirement
+ private LegacySupport legacySupport;
+
+ @Requirement
+ private MojoExecutionScope scope;
+
+ private MojoExecutionListener mojoExecutionListener;
+
+ // this tricks plexus-component-metadata generate required metadata
+ @Requirement( role = MojoExecutionListener.class )
+ private List<MojoExecutionListener> mojoExecutionListeners;
+
+ public void setMojoExecutionListeners( final List<MojoExecutionListener> listeners )
+ {
+ this.mojoExecutionListeners = listeners;
+ this.mojoExecutionListener = new CompoundMojoExecutionListener( listeners );
+ }
+
+ /**
+ * @param plugin
+ * @param repositories
+ * @param session
+ * @return PluginDescriptor The component descriptor for the Maven plugin.
+ * @throws PluginNotFoundException The plugin could not be found in any repositories.
+ * @throws PluginResolutionException The plugin could be found but could not be resolved.
+ * @throws InvalidPluginDescriptorException
+ */
+ public PluginDescriptor loadPlugin( Plugin plugin, List<RemoteRepository> repositories,
+ RepositorySystemSession session )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ InvalidPluginDescriptorException
+ {
+ return mavenPluginManager.getPluginDescriptor( plugin, repositories, session );
+ }
+
+ // ----------------------------------------------------------------------
+ // Mojo execution
+ // ----------------------------------------------------------------------
+
+ public void executeMojo( MavenSession session, MojoExecution mojoExecution )
+ throws MojoFailureException, MojoExecutionException, PluginConfigurationException, PluginManagerException
+ {
+ MavenProject project = session.getCurrentProject();
+
+ MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+
+ Mojo mojo = null;
+
+ ClassRealm pluginRealm;
+ try
+ {
+ pluginRealm = getPluginRealm( session, mojoDescriptor.getPluginDescriptor() );
+ }
+ catch ( PluginResolutionException e )
+ {
+ throw new PluginExecutionException( mojoExecution, project, e );
+ }
+
+ ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader( pluginRealm );
+
+ MavenSession oldSession = legacySupport.getSession();
+
+ scope.enter();
+
+ try
+ {
+ scope.seed( MavenProject.class, project );
+ scope.seed( MojoExecution.class, mojoExecution );
+
+ mojo = mavenPluginManager.getConfiguredMojo( Mojo.class, session, mojoExecution );
+
+ legacySupport.setSession( session );
+
+ // NOTE: DuplicateArtifactAttachmentException is currently unchecked, so be careful removing this try/catch!
+ // This is necessary to avoid creating compatibility problems for existing plugins that use
+ // MavenProjectHelper.attachArtifact(..).
+ try
+ {
+ MojoExecutionEvent mojoExecutionEvent = new MojoExecutionEvent( session, project, mojoExecution, mojo );
+
+ mojoExecutionListener.beforeMojoExecution( mojoExecutionEvent );
+
+ mojo.execute();
+
+ mojoExecutionListener.afterMojoExecutionSuccess( mojoExecutionEvent );
+ }
+ catch ( ClassCastException e )
+ {
+ // to be processed in the outer catch block
+ throw e;
+ }
+ catch ( RuntimeException e )
+ {
+ throw new PluginExecutionException( mojoExecution, project, e );
+ }
+ }
+ catch ( PluginContainerException e )
+ {
+ mojoExecutionListener.afterExecutionFailure( new MojoExecutionEvent( session, project, mojoExecution, mojo,
+ e ) );
+
+ throw new PluginExecutionException( mojoExecution, project, e );
+ }
+ catch ( NoClassDefFoundError e )
+ {
+ mojoExecutionListener.afterExecutionFailure( new MojoExecutionEvent( session, project, mojoExecution, mojo,
+ e ) );
+
+ ByteArrayOutputStream os = new ByteArrayOutputStream( 1024 );
+ PrintStream ps = new PrintStream( os );
+ ps.println( "A required class was missing while executing " + mojoDescriptor.getId() + ": "
+ + e.getMessage() );
+ pluginRealm.display( ps );
+
+ Exception wrapper = new PluginContainerException( mojoDescriptor, pluginRealm, os.toString(), e );
+
+ throw new PluginExecutionException( mojoExecution, project, wrapper );
+ }
+ catch ( LinkageError e )
+ {
+ mojoExecutionListener.afterExecutionFailure( new MojoExecutionEvent( session, project, mojoExecution, mojo,
+ e ) );
+
+ ByteArrayOutputStream os = new ByteArrayOutputStream( 1024 );
+ PrintStream ps = new PrintStream( os );
+ ps.println( "An API incompatibility was encountered while executing " + mojoDescriptor.getId() + ": "
+ + e.getClass().getName() + ": " + e.getMessage() );
+ pluginRealm.display( ps );
+
+ Exception wrapper = new PluginContainerException( mojoDescriptor, pluginRealm, os.toString(), e );
+
+ throw new PluginExecutionException( mojoExecution, project, wrapper );
+ }
+ catch ( ClassCastException e )
+ {
+ mojoExecutionListener.afterExecutionFailure( new MojoExecutionEvent( session, project, mojoExecution, mojo,
+ e ) );
+
+ ByteArrayOutputStream os = new ByteArrayOutputStream( 1024 );
+ PrintStream ps = new PrintStream( os );
+ ps.println( "A type incompatibility occured while executing " + mojoDescriptor.getId() + ": "
+ + e.getMessage() );
+ pluginRealm.display( ps );
+
+ throw new PluginExecutionException( mojoExecution, project, os.toString(), e );
+ }
+ catch ( RuntimeException e )
+ {
+ mojoExecutionListener.afterExecutionFailure( new MojoExecutionEvent( session, project, mojoExecution, mojo,
+ e ) );
+
+ throw e;
+ }
+ finally
+ {
+ mavenPluginManager.releaseMojo( mojo, mojoExecution );
+
+ scope.exit();
+
+ Thread.currentThread().setContextClassLoader( oldClassLoader );
+
+ legacySupport.setSession( oldSession );
+ }
+ }
+
+ /**
+ * TODO pluginDescriptor classRealm and artifacts are set as a side effect of this
+ * call, which is not nice.
+ * @throws PluginResolutionException
+ */
+ public ClassRealm getPluginRealm( MavenSession session, PluginDescriptor pluginDescriptor )
+ throws PluginResolutionException, PluginManagerException
+ {
+ ClassRealm pluginRealm = pluginDescriptor.getClassRealm();
+ if ( pluginRealm != null )
+ {
+ return pluginRealm;
+ }
+
+ mavenPluginManager.setupPluginRealm( pluginDescriptor, session, null, null, null );
+
+ return pluginDescriptor.getClassRealm();
+ }
+
+ public MojoDescriptor getMojoDescriptor( Plugin plugin, String goal, List<RemoteRepository> repositories,
+ RepositorySystemSession session )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, InvalidPluginDescriptorException
+ {
+ return mavenPluginManager.getMojoDescriptor( plugin, goal, repositories, session );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultExtensionRealmCache.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultExtensionRealmCache.java
new file mode 100644
index 00000000..c9df92c6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultExtensionRealmCache.java
@@ -0,0 +1,170 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.project.ExtensionDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.classworlds.realm.NoSuchRealmException;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Disposable;
+
+/**
+ * Default extension realm cache implementation. Assumes cached data does not change.
+ */
+@Component( role = ExtensionRealmCache.class )
+public class DefaultExtensionRealmCache
+ implements ExtensionRealmCache, Disposable
+{
+
+ protected static class CacheKey
+ implements Key
+ {
+
+ private final List<File> files;
+
+ private final List<Long> timestamps;
+
+ private final List<Long> sizes;
+
+ private final List<String> ids;
+
+ private final int hashCode;
+
+ public CacheKey( List<Artifact> extensionArtifacts )
+ {
+ this.files = new ArrayList<File>( extensionArtifacts.size() );
+ this.timestamps = new ArrayList<Long>( extensionArtifacts.size() );
+ this.sizes = new ArrayList<Long>( extensionArtifacts.size() );
+ this.ids = new ArrayList<String>( extensionArtifacts.size() );
+
+ for ( Artifact artifact : extensionArtifacts )
+ {
+ File file = artifact.getFile();
+ files.add( file );
+ timestamps.add( ( file != null ) ? Long.valueOf( file.lastModified() ) : Long.valueOf( 0 ) );
+ sizes.add( ( file != null ) ? Long.valueOf( file.length() ) : Long.valueOf( 0 ) );
+ ids.add( artifact.getVersion() );
+ }
+
+ this.hashCode =
+ 31 * files.hashCode() + 31 * ids.hashCode() + 31 * timestamps.hashCode() + 31 * sizes.hashCode();
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return hashCode;
+ }
+
+ @Override
+ public boolean equals( Object o )
+ {
+ if ( o == this )
+ {
+ return true;
+ }
+
+ if ( !( o instanceof CacheKey ) )
+ {
+ return false;
+ }
+
+ CacheKey other = (CacheKey) o;
+
+ return ids.equals( other.ids ) && files.equals( other.files ) && timestamps.equals( other.timestamps )
+ && sizes.equals( other.sizes );
+ }
+
+ @Override
+ public String toString()
+ {
+ return files.toString();
+ }
+ }
+
+ protected final Map<Key, CacheRecord> cache = new ConcurrentHashMap<Key, CacheRecord>();
+
+ @Override
+ public Key createKey( List<Artifact> extensionArtifacts )
+ {
+ return new CacheKey( extensionArtifacts );
+ }
+
+ public CacheRecord get( Key key )
+ {
+ return cache.get( key );
+ }
+
+ public CacheRecord put( Key key, ClassRealm extensionRealm, ExtensionDescriptor extensionDescriptor,
+ List<Artifact> artifacts )
+ {
+ if ( extensionRealm == null )
+ {
+ throw new NullPointerException();
+ }
+
+ if ( cache.containsKey( key ) )
+ {
+ throw new IllegalStateException( "Duplicate extension realm for extension " + key );
+ }
+
+ CacheRecord record = new CacheRecord( extensionRealm, extensionDescriptor, artifacts );
+
+ cache.put( key, record );
+
+ return record;
+ }
+
+ public void flush()
+ {
+ for ( CacheRecord record : cache.values() )
+ {
+ ClassRealm realm = record.realm;
+ try
+ {
+ realm.getWorld().disposeRealm( realm.getId() );
+ }
+ catch ( NoSuchRealmException e )
+ {
+ // ignore
+ }
+ }
+ cache.clear();
+ }
+
+ public void register( MavenProject project, Key key, CacheRecord record )
+ {
+ // default cache does not track extension usage
+ }
+
+ public void dispose()
+ {
+ flush();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginArtifactsCache.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginArtifactsCache.java
new file mode 100644
index 00000000..23bda64d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginArtifactsCache.java
@@ -0,0 +1,218 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.annotations.Component;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.repository.WorkspaceRepository;
+
+/**
+ * @author Igor Fedorenko
+ * @author Benjamin Bentmann
+ */
+@Component( role = PluginArtifactsCache.class )
+public class DefaultPluginArtifactsCache
+ implements PluginArtifactsCache
+{
+
+ protected static class CacheKey
+ implements Key
+ {
+
+ private final Plugin plugin;
+
+ private final WorkspaceRepository workspace;
+
+ private final LocalRepository localRepo;
+
+ private final List<RemoteRepository> repositories;
+
+ private final DependencyFilter filter;
+
+ private final int hashCode;
+
+ public CacheKey( Plugin plugin, DependencyFilter extensionFilter, List<RemoteRepository> repositories,
+ RepositorySystemSession session )
+ {
+ this.plugin = plugin.clone();
+ workspace = CacheUtils.getWorkspace( session );
+ this.localRepo = session.getLocalRepository();
+ this.repositories = new ArrayList<RemoteRepository>( repositories.size() );
+ for ( RemoteRepository repository : repositories )
+ {
+ if ( repository.isRepositoryManager() )
+ {
+ this.repositories.addAll( repository.getMirroredRepositories() );
+ }
+ else
+ {
+ this.repositories.add( repository );
+ }
+ }
+ this.filter = extensionFilter;
+
+ int hash = 17;
+ hash = hash * 31 + CacheUtils.pluginHashCode( plugin );
+ hash = hash * 31 + hash( workspace );
+ hash = hash * 31 + hash( localRepo );
+ hash = hash * 31 + CacheUtils.repositoriesHashCode( repositories );
+ hash = hash * 31 + hash( extensionFilter );
+ this.hashCode = hash;
+ }
+
+ @Override
+ public String toString()
+ {
+ return plugin.getId();
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return hashCode;
+ }
+
+ private static int hash( Object obj )
+ {
+ return obj != null ? obj.hashCode() : 0;
+ }
+
+ @Override
+ public boolean equals( Object o )
+ {
+ if ( o == this )
+ {
+ return true;
+ }
+
+ if ( !( o instanceof CacheKey ) )
+ {
+ return false;
+ }
+
+ CacheKey that = (CacheKey) o;
+
+ return CacheUtils.pluginEquals( plugin, that.plugin ) && eq( workspace, that.workspace )
+ && eq( localRepo, that.localRepo ) && CacheUtils.repositoriesEquals( repositories, that.repositories )
+ && eq( filter, that.filter );
+ }
+
+ private static <T> boolean eq( T s1, T s2 )
+ {
+ return s1 != null ? s1.equals( s2 ) : s2 == null;
+ }
+
+ }
+
+ protected final Map<Key, CacheRecord> cache = new ConcurrentHashMap<Key, CacheRecord>();
+
+ public Key createKey( Plugin plugin, DependencyFilter extensionFilter, List<RemoteRepository> repositories,
+ RepositorySystemSession session )
+ {
+ return new CacheKey( plugin, extensionFilter, repositories, session );
+ }
+
+ public CacheRecord get( Key key )
+ throws PluginResolutionException
+ {
+ CacheRecord cacheRecord = cache.get( key );
+
+ if ( cacheRecord != null && cacheRecord.exception != null )
+ {
+ throw cacheRecord.exception;
+ }
+
+ return cacheRecord;
+ }
+
+ public CacheRecord put( Key key, List<Artifact> pluginArtifacts )
+ {
+ if ( pluginArtifacts == null )
+ {
+ throw new NullPointerException();
+ }
+
+ assertUniqueKey( key );
+
+ CacheRecord record =
+ new CacheRecord( Collections.unmodifiableList( new ArrayList<Artifact>( pluginArtifacts ) ) );
+
+ cache.put( key, record );
+
+ return record;
+ }
+
+ protected void assertUniqueKey( Key key )
+ {
+ if ( cache.containsKey( key ) )
+ {
+ throw new IllegalStateException( "Duplicate artifact resolution result for plugin " + key );
+ }
+ }
+
+ public CacheRecord put( Key key, PluginResolutionException exception )
+ {
+ if ( exception == null )
+ {
+ throw new NullPointerException();
+ }
+
+ assertUniqueKey( key );
+
+ CacheRecord record = new CacheRecord( exception );
+
+ cache.put( key, record );
+
+ return record;
+ }
+
+ public void flush()
+ {
+ cache.clear();
+ }
+
+ protected static int pluginHashCode( Plugin plugin )
+ {
+ return CacheUtils.pluginHashCode( plugin );
+ }
+
+ protected static boolean pluginEquals( Plugin a, Plugin b )
+ {
+ return CacheUtils.pluginEquals( a, b );
+ }
+
+ public void register( MavenProject project, Key cacheKey, CacheRecord record )
+ {
+ // default cache does not track record usage
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginDescriptorCache.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginDescriptorCache.java
new file mode 100644
index 00000000..4927726b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginDescriptorCache.java
@@ -0,0 +1,219 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.repository.ComponentDescriptor;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.repository.WorkspaceRepository;
+
+/**
+ * Caches raw plugin descriptors. A raw plugin descriptor is a descriptor that has just been extracted from the plugin
+ * artifact and does not contain any runtime specific data. The cache must not be used for descriptors that hold runtime
+ * data like the plugin realm. <strong>Warning:</strong> This is an internal utility interface that is only public for
+ * technical reasons, it is not part of the public API. In particular, this interface can be changed or deleted without
+ * prior notice.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+@Component( role = PluginDescriptorCache.class )
+public class DefaultPluginDescriptorCache
+ implements PluginDescriptorCache
+{
+
+ private Map<Key, PluginDescriptor> descriptors = new HashMap<Key, PluginDescriptor>( 128 );
+
+ public void flush()
+ {
+ descriptors.clear();
+ }
+
+ public Key createKey( Plugin plugin, List<RemoteRepository> repositories, RepositorySystemSession session )
+ {
+ return new CacheKey( plugin, repositories, session );
+ }
+
+ public PluginDescriptor get( Key cacheKey )
+ {
+ return clone( descriptors.get( cacheKey ) );
+ }
+
+ public void put( Key cacheKey, PluginDescriptor pluginDescriptor )
+ {
+ descriptors.put( cacheKey, clone( pluginDescriptor ) );
+ }
+
+ protected static PluginDescriptor clone( PluginDescriptor original )
+ {
+ PluginDescriptor clone = null;
+
+ if ( original != null )
+ {
+ clone = new PluginDescriptor();
+
+ clone.setGroupId( original.getGroupId() );
+ clone.setArtifactId( original.getArtifactId() );
+ clone.setVersion( original.getVersion() );
+ clone.setGoalPrefix( original.getGoalPrefix() );
+ clone.setInheritedByDefault( original.isInheritedByDefault() );
+
+ clone.setName( original.getName() );
+ clone.setDescription( original.getDescription() );
+ clone.setRequiredMavenVersion( original.getRequiredMavenVersion() );
+
+ clone.setPluginArtifact( ArtifactUtils.copyArtifactSafe( original.getPluginArtifact() ) );
+
+ clone.setComponents( clone( original.getMojos(), clone ) );
+ clone.setId( original.getId() );
+ clone.setIsolatedRealm( original.isIsolatedRealm() );
+ clone.setSource( original.getSource() );
+
+ clone.setDependencies( original.getDependencies() );
+ }
+
+ return clone;
+ }
+
+ private static List<ComponentDescriptor<?>> clone( List<MojoDescriptor> mojos, PluginDescriptor pluginDescriptor )
+ {
+ List<ComponentDescriptor<?>> clones = null;
+
+ if ( mojos != null )
+ {
+ clones = new ArrayList<ComponentDescriptor<?>>( mojos.size() );
+
+ for ( MojoDescriptor mojo : mojos )
+ {
+ MojoDescriptor clone = mojo.clone();
+ clone.setPluginDescriptor( pluginDescriptor );
+ clones.add( clone );
+ }
+ }
+
+ return clones;
+ }
+
+ private static final class CacheKey
+ implements Key
+ {
+
+ private final String groupId;
+
+ private final String artifactId;
+
+ private final String version;
+
+ private final WorkspaceRepository workspace;
+
+ private final LocalRepository localRepo;
+
+ private final List<RemoteRepository> repositories;
+
+ private final int hashCode;
+
+ public CacheKey( Plugin plugin, List<RemoteRepository> repositories, RepositorySystemSession session )
+ {
+ groupId = plugin.getGroupId();
+ artifactId = plugin.getArtifactId();
+ version = plugin.getVersion();
+
+ workspace = CacheUtils.getWorkspace( session );
+ localRepo = session.getLocalRepository();
+ this.repositories = new ArrayList<RemoteRepository>( repositories.size() );
+ for ( RemoteRepository repository : repositories )
+ {
+ if ( repository.isRepositoryManager() )
+ {
+ this.repositories.addAll( repository.getMirroredRepositories() );
+ }
+ else
+ {
+ this.repositories.add( repository );
+ }
+ }
+
+ int hash = 17;
+ hash = hash * 31 + groupId.hashCode();
+ hash = hash * 31 + artifactId.hashCode();
+ hash = hash * 31 + version.hashCode();
+ hash = hash * 31 + hash( workspace );
+ hash = hash * 31 + localRepo.hashCode();
+ hash = hash * 31 + CacheUtils.repositoriesHashCode( repositories );
+ this.hashCode = hash;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return hashCode;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ if ( !( obj instanceof CacheKey ) )
+ {
+ return false;
+ }
+
+ CacheKey that = (CacheKey) obj;
+
+ return eq( this.artifactId, that.artifactId ) && eq( this.groupId, that.groupId )
+ && eq( this.version, that.version ) && eq( this.localRepo, that.localRepo )
+ && eq( this.workspace, that.workspace )
+ && CacheUtils.repositoriesEquals( this.repositories, that.repositories );
+ }
+
+ @Override
+ public String toString()
+ {
+ return groupId + ':' + artifactId + ':' + version;
+ }
+
+ private static int hash( Object obj )
+ {
+ return obj != null ? obj.hashCode() : 0;
+ }
+
+ private static <T> boolean eq( T s1, T s2 )
+ {
+ return s1 != null ? s1.equals( s2 ) : s2 == null;
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRealmCache.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRealmCache.java
new file mode 100644
index 00000000..6c8288ee
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRealmCache.java
@@ -0,0 +1,219 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.classworlds.realm.NoSuchRealmException;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Disposable;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.repository.WorkspaceRepository;
+
+/**
+ * Default PluginCache implementation. Assumes cached data does not change.
+ */
+@Component( role = PluginRealmCache.class )
+public class DefaultPluginRealmCache
+ implements PluginRealmCache, Disposable
+{
+
+ protected static class CacheKey
+ implements Key
+ {
+
+ private final Plugin plugin;
+
+ private final WorkspaceRepository workspace;
+
+ private final LocalRepository localRepo;
+
+ private final List<RemoteRepository> repositories;
+
+ private final ClassLoader parentRealm;
+
+ private final Map<String, ClassLoader> foreignImports;
+
+ private final DependencyFilter filter;
+
+ private final int hashCode;
+
+ public CacheKey( Plugin plugin, ClassLoader parentRealm, Map<String, ClassLoader> foreignImports,
+ DependencyFilter dependencyFilter, List<RemoteRepository> repositories,
+ RepositorySystemSession session )
+ {
+ this.plugin = plugin.clone();
+ this.workspace = CacheUtils.getWorkspace( session );
+ this.localRepo = session.getLocalRepository();
+ this.repositories = new ArrayList<RemoteRepository>( repositories.size() );
+ for ( RemoteRepository repository : repositories )
+ {
+ if ( repository.isRepositoryManager() )
+ {
+ this.repositories.addAll( repository.getMirroredRepositories() );
+ }
+ else
+ {
+ this.repositories.add( repository );
+ }
+ }
+ this.parentRealm = parentRealm;
+ this.foreignImports =
+ ( foreignImports != null ) ? foreignImports : Collections.<String, ClassLoader>emptyMap();
+ this.filter = dependencyFilter;
+
+ int hash = 17;
+ hash = hash * 31 + CacheUtils.pluginHashCode( plugin );
+ hash = hash * 31 + hash( workspace );
+ hash = hash * 31 + hash( localRepo );
+ hash = hash * 31 + CacheUtils.repositoriesHashCode( repositories );
+ hash = hash * 31 + hash( parentRealm );
+ hash = hash * 31 + this.foreignImports.hashCode();
+ hash = hash * 31 + hash( dependencyFilter );
+ this.hashCode = hash;
+ }
+
+ @Override
+ public String toString()
+ {
+ return plugin.getId();
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return hashCode;
+ }
+
+ private static int hash( Object obj )
+ {
+ return obj != null ? obj.hashCode() : 0;
+ }
+
+ @Override
+ public boolean equals( Object o )
+ {
+ if ( o == this )
+ {
+ return true;
+ }
+
+ if ( !( o instanceof CacheKey ) )
+ {
+ return false;
+ }
+
+ CacheKey that = (CacheKey) o;
+
+ return parentRealm == that.parentRealm && CacheUtils.pluginEquals( plugin, that.plugin )
+ && eq( workspace, that.workspace ) && eq( localRepo, that.localRepo )
+ && CacheUtils.repositoriesEquals( this.repositories, that.repositories ) && eq( filter, that.filter )
+ && eq( foreignImports, that.foreignImports );
+ }
+
+ private static <T> boolean eq( T s1, T s2 )
+ {
+ return s1 != null ? s1.equals( s2 ) : s2 == null;
+ }
+
+ }
+
+ protected final Map<Key, CacheRecord> cache = new ConcurrentHashMap<Key, CacheRecord>();
+
+ public Key createKey( Plugin plugin, ClassLoader parentRealm, Map<String, ClassLoader> foreignImports,
+ DependencyFilter dependencyFilter, List<RemoteRepository> repositories,
+ RepositorySystemSession session )
+ {
+ return new CacheKey( plugin, parentRealm, foreignImports, dependencyFilter, repositories, session );
+ }
+
+ public CacheRecord get( Key key )
+ {
+ return cache.get( key );
+ }
+
+ public CacheRecord put( Key key, ClassRealm pluginRealm, List<Artifact> pluginArtifacts )
+ {
+ if ( pluginRealm == null || pluginArtifacts == null )
+ {
+ throw new IllegalArgumentException();
+ }
+
+ if ( cache.containsKey( key ) )
+ {
+ throw new IllegalStateException( "Duplicate plugin realm for plugin " + key );
+ }
+
+ CacheRecord record = new CacheRecord( pluginRealm, pluginArtifacts );
+
+ cache.put( key, record );
+
+ return record;
+ }
+
+ public void flush()
+ {
+ for ( CacheRecord record : cache.values() )
+ {
+ ClassRealm realm = record.realm;
+ try
+ {
+ realm.getWorld().disposeRealm( realm.getId() );
+ }
+ catch ( NoSuchRealmException e )
+ {
+ // ignore
+ }
+ }
+ cache.clear();
+ }
+
+ protected static int pluginHashCode( Plugin plugin )
+ {
+ return CacheUtils.pluginHashCode( plugin );
+ }
+
+ protected static boolean pluginEquals( Plugin a, Plugin b )
+ {
+ return CacheUtils.pluginEquals( a, b );
+ }
+
+ public void register( MavenProject project, Key key, CacheRecord record )
+ {
+ // default cache does not track plugin usage
+ }
+
+ public void dispose()
+ {
+ flush();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/ExtensionRealmCache.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/ExtensionRealmCache.java
new file mode 100644
index 00000000..d50df0e9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/ExtensionRealmCache.java
@@ -0,0 +1,84 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.project.ExtensionDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+
+/**
+ * Caches extension class realms. <strong>Warning:</strong> This is an internal utility interface that is only public
+ * for technical reasons, it is not part of the public API. In particular, this interface can be changed or deleted
+ * without prior notice.
+ *
+ * @author Igor Fedorenko
+ * @author Benjamin Bentmann
+ */
+public interface ExtensionRealmCache
+{
+ /**
+ * A cache key.
+ */
+ interface Key
+ {
+ // marker interface for cache keys
+ }
+
+ static class CacheRecord
+ {
+
+ public final ClassRealm realm;
+
+ public final ExtensionDescriptor desciptor;
+
+ public final List<Artifact> artifacts;
+
+ public CacheRecord( ClassRealm realm, ExtensionDescriptor descriptor, List<Artifact> artifacts )
+ {
+ this.realm = realm;
+ this.desciptor = descriptor;
+ this.artifacts = artifacts;
+ }
+
+ }
+
+ Key createKey( List<Artifact> extensionArtifacts );
+
+ CacheRecord get( Key key );
+
+ CacheRecord put( Key key, ClassRealm extensionRealm, ExtensionDescriptor extensionDescriptor,
+ List<Artifact> artifacts );
+
+ void flush();
+
+ /**
+ * Registers the specified cache record for usage with the given project. Integrators can use the information
+ * collected from this method in combination with a custom cache implementation to dispose unused records from the
+ * cache.
+ *
+ * @param project The project that employs the plugin realm, must not be {@code null}.
+ * @param record The cache record being used for the project, must not be {@code null}.
+ */
+ void register( MavenProject project, Key key, CacheRecord record );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginDescriptorException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginDescriptorException.java
new file mode 100644
index 00000000..223ccd81
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginDescriptorException.java
@@ -0,0 +1,44 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+public class InvalidPluginDescriptorException
+ extends Exception
+{
+
+ public InvalidPluginDescriptorException( String message, List<String> errors )
+ {
+ super( toMessage( message, errors ) );
+ }
+
+ private static String toMessage( String message, List<String> errors )
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+ buffer.append( message );
+ for ( String error : errors )
+ {
+ buffer.append( ", " ).append( error );
+ }
+ return buffer.toString();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginException.java
new file mode 100644
index 00000000..b89fc869
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginException.java
@@ -0,0 +1,48 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
+
+/**
+ * Thrown when a plugin is not internally consistent.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class InvalidPluginException
+ extends Exception
+{
+ public InvalidPluginException( String message, ProjectBuildingException e )
+ {
+ super( message, e );
+ }
+
+ public InvalidPluginException( String message, InvalidDependencyVersionException e )
+ {
+ super( message, e );
+ }
+
+ public InvalidPluginException( String message )
+ {
+ super( message );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/LegacySupport.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/LegacySupport.java
new file mode 100644
index 00000000..b246ed18
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/LegacySupport.java
@@ -0,0 +1,59 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+import org.eclipse.aether.RepositorySystemSession;
+
+/**
+ * Helps to provide backward-compatibility with plugins that use legacy components. <strong>Warning:</strong> This is an
+ * internal utility interface that is only public for technical reasons, it is not part of the public API. In
+ * particular, this interface can be changed or deleted without prior notice.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+public interface LegacySupport
+{
+
+ /**
+ * Sets the currently active session. Some legacy components are basically stateful and their API is missing
+ * parameters that would be required to delegate to a stateless component. Saving the session (in a thread-local
+ * variable) is our best effort to record any state that is required to enable proper delegation.
+ *
+ * @param session The currently active session, may be {@code null}.
+ */
+ void setSession( MavenSession session );
+
+ /**
+ * Gets the currently active session.
+ *
+ * @return The currently active session or {@code null} if none.
+ */
+ MavenSession getSession();
+
+ /**
+ * Gets the currently active repository session.
+ *
+ * @return The currently active repository session or {@code null} if none.
+ */
+ RepositorySystemSession getRepositorySession();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginManager.java
new file mode 100644
index 00000000..b228a1b4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginManager.java
@@ -0,0 +1,128 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * Provides basic services to manage Maven plugins and their mojos. This component is kept general in its design such
+ * that the plugins/mojos can be used in arbitrary contexts. In particular, the mojos can be used for ordinary build
+ * plugins as well as special purpose plugins like reports.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+public interface MavenPluginManager
+{
+
+ /**
+ * Retrieves the descriptor for the specified plugin from its main artifact.
+ *
+ * @param plugin The plugin whose descriptor should be retrieved, must not be {@code null}.
+ * @param repositories The plugin repositories to use for resolving the plugin's main artifact, must not be {@code
+ * null}.
+ * @param session The repository session to use for resolving the plugin's main artifact, must not be {@code null}.
+ * @return The plugin descriptor, never {@code null}.
+ */
+ PluginDescriptor getPluginDescriptor( Plugin plugin, List<RemoteRepository> repositories,
+ RepositorySystemSession session )
+ throws PluginResolutionException, PluginDescriptorParsingException, InvalidPluginDescriptorException;
+
+ /**
+ * Retrieves the descriptor for the specified plugin goal from the plugin's main artifact.
+ *
+ * @param plugin The plugin whose mojo descriptor should be retrieved, must not be {@code null}.
+ * @param goal The simple name of the mojo whose descriptor should be retrieved, must not be {@code null}.
+ * @param repositories The plugin repositories to use for resolving the plugin's main artifact, must not be {@code
+ * null}.
+ * @param session The repository session to use for resolving the plugin's main artifact, must not be {@code null}.
+ * @return The mojo descriptor, never {@code null}.
+ */
+ MojoDescriptor getMojoDescriptor( Plugin plugin, String goal, List<RemoteRepository> repositories,
+ RepositorySystemSession session )
+ throws MojoNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ InvalidPluginDescriptorException;
+
+ /**
+ * Verifies the specified plugin is compatible with the current Maven runtime.
+ *
+ * @param pluginDescriptor The descriptor of the plugin to check, must not be {@code null}.
+ */
+ void checkRequiredMavenVersion( PluginDescriptor pluginDescriptor )
+ throws PluginIncompatibleException;
+
+ /**
+ * Sets up the class realm for the specified plugin. Both the class realm and the plugin artifacts that constitute
+ * it will be stored in the plugin descriptor.
+ *
+ * @param pluginDescriptor The plugin descriptor in which to save the class realm and the plugin artifacts, must not
+ * be {@code null}.
+ * @param session The build session from which to pick the current project and repository settings, must not be
+ * {@code null}.
+ * @param parent The parent class realm for the plugin, may be {@code null} to use the Maven core realm.
+ * @param imports The packages/types to import from the parent realm, may be {@code null}.
+ * @param filter The filter used to exclude certain plugin dependencies, may be {@code null}.
+ */
+ void setupPluginRealm( PluginDescriptor pluginDescriptor, MavenSession session, ClassLoader parent,
+ List<String> imports, DependencyFilter filter )
+ throws PluginResolutionException, PluginContainerException;
+
+ /**
+ * Sets up class realm for the specified build extensions plugin.
+ *
+ * @since 3.3.0
+ */
+ ExtensionRealmCache.CacheRecord setupExtensionsRealm( MavenProject project, Plugin plugin,
+ RepositorySystemSession session )
+ throws PluginManagerException;
+
+ /**
+ * Looks up the mojo for the specified mojo execution and populates its parameters from the configuration given by
+ * the mojo execution. The mojo/plugin descriptor associated with the mojo execution provides the class realm to
+ * lookup the mojo from. <strong>Warning:</strong> The returned mojo instance must be released via
+ * {@link #releaseMojo(Object, MojoExecution)} when the mojo is no longer needed to free any resources allocated for
+ * it.
+ *
+ * @param mojoInterface The component role of the mojo, must not be {@code null}.
+ * @param session The build session in whose context the mojo will be used, must not be {@code null}.
+ * @param mojoExecution The mojo execution to retrieve the mojo for, must not be {@code null}.
+ * @return The ready-to-execute mojo, never {@code null}.
+ */
+ <T> T getConfiguredMojo( Class<T> mojoInterface, MavenSession session, MojoExecution mojoExecution )
+ throws PluginConfigurationException, PluginContainerException;
+
+ /**
+ * Releases the specified mojo back to the container.
+ *
+ * @param mojo The mojo to release, may be {@code null}.
+ * @param mojoExecution The mojo execution the mojo was originally retrieved for, must not be {@code null}.
+ */
+ void releaseMojo( Object mojo, MojoExecution mojoExecution );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java
new file mode 100644
index 00000000..2eb2738b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java
@@ -0,0 +1,78 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+
+public class MavenPluginValidator
+{
+ private final Artifact pluginArtifact;
+
+ private List<String> errors = new ArrayList<String>();
+
+ private boolean firstDescriptor = true;
+
+ public MavenPluginValidator( Artifact pluginArtifact )
+ {
+ this.pluginArtifact = pluginArtifact;
+ }
+
+ public void validate( PluginDescriptor pluginDescriptor )
+ {
+ /*
+ * NOTE: For plugins that depend on other plugin artifacts the plugin realm contains more than one plugin
+ * descriptor. However, only the first descriptor is of interest.
+ */
+ if ( !firstDescriptor )
+ {
+ return;
+ }
+ firstDescriptor = false;
+
+ if ( !pluginArtifact.getGroupId().equals( pluginDescriptor.getGroupId() ) )
+ {
+ errors.add( "Plugin's descriptor contains the wrong group ID: " + pluginDescriptor.getGroupId() );
+ }
+
+ if ( !pluginArtifact.getArtifactId().equals( pluginDescriptor.getArtifactId() ) )
+ {
+ errors.add( "Plugin's descriptor contains the wrong artifact ID: " + pluginDescriptor.getArtifactId() );
+ }
+
+ if ( !pluginArtifact.getBaseVersion().equals( pluginDescriptor.getVersion() ) )
+ {
+ errors.add( "Plugin's descriptor contains the wrong version: " + pluginDescriptor.getVersion() );
+ }
+ }
+
+ public boolean hasErrors()
+ {
+ return !errors.isEmpty();
+ }
+
+ public List<String> getErrors()
+ {
+ return errors;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java
new file mode 100644
index 00000000..a417219e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java
@@ -0,0 +1,237 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+public class MojoExecution
+{
+
+ private Plugin plugin;
+
+ private String goal;
+
+ private String executionId;
+
+ private MojoDescriptor mojoDescriptor;
+
+ private Xpp3Dom configuration;
+
+ /**
+ * Describes the source of an execution.
+ */
+ public enum Source
+ {
+
+ /**
+ * An execution that originates from the direct invocation of a goal from the CLI.
+ */
+ CLI,
+
+ /**
+ * An execution that originates from a goal bound to a lifecycle phase.
+ */
+ LIFECYCLE,
+ }
+
+ private Source source = Source.LIFECYCLE;
+
+ /**
+ * The phase may or may not have been bound to a phase but once the plan has been calculated we know what phase
+ * this mojo execution is going to run in.
+ */
+ private String lifecyclePhase;
+
+ /**
+ * The executions to fork before this execution, indexed by the groupId:artifactId:version of the project on which
+ * the forked execution are to be run and in reactor build order.
+ */
+ private Map<String, List<MojoExecution>> forkedExecutions = new LinkedHashMap<String, List<MojoExecution>>();
+
+ public MojoExecution( Plugin plugin, String goal, String executionId )
+ {
+ this.plugin = plugin;
+ this.goal = goal;
+ this.executionId = executionId;
+ }
+
+ public MojoExecution( MojoDescriptor mojoDescriptor )
+ {
+ this.mojoDescriptor = mojoDescriptor;
+ this.executionId = null;
+ this.configuration = null;
+ }
+
+ public MojoExecution( MojoDescriptor mojoDescriptor, String executionId, Source source )
+ {
+ this.mojoDescriptor = mojoDescriptor;
+ this.executionId = executionId;
+ this.configuration = null;
+ this.source = source;
+ }
+
+ public MojoExecution( MojoDescriptor mojoDescriptor, String executionId )
+ {
+ this.mojoDescriptor = mojoDescriptor;
+ this.executionId = executionId;
+ this.configuration = null;
+ }
+
+ public MojoExecution( MojoDescriptor mojoDescriptor, Xpp3Dom configuration )
+ {
+ this.mojoDescriptor = mojoDescriptor;
+ this.configuration = configuration;
+ this.executionId = null;
+ }
+
+ /**
+ * Gets the source of this execution.
+ *
+ * @return The source of this execution or {@code null} if unknown.
+ */
+ public Source getSource()
+ {
+ return source;
+ }
+
+ public String getExecutionId()
+ {
+ return executionId;
+ }
+
+ public Plugin getPlugin()
+ {
+ if ( mojoDescriptor != null )
+ {
+ return mojoDescriptor.getPluginDescriptor().getPlugin();
+ }
+
+ return plugin;
+ }
+
+ public MojoDescriptor getMojoDescriptor()
+ {
+ return mojoDescriptor;
+ }
+
+ public Xpp3Dom getConfiguration()
+ {
+ return configuration;
+ }
+
+ public void setConfiguration( Xpp3Dom configuration )
+ {
+ this.configuration = configuration;
+ }
+
+ public String identify()
+ {
+ StringBuilder sb = new StringBuilder( 256 );
+
+ sb.append( executionId );
+ sb.append( configuration.toString() );
+
+ return sb.toString();
+ }
+
+ public String getLifecyclePhase()
+ {
+ return lifecyclePhase;
+ }
+
+ public void setLifecyclePhase( String lifecyclePhase )
+ {
+ this.lifecyclePhase = lifecyclePhase;
+ }
+
+ @Override
+ public String toString()
+ {
+ StringBuilder buffer = new StringBuilder( 128 );
+ if ( mojoDescriptor != null )
+ {
+ buffer.append( mojoDescriptor.getId() );
+ }
+ buffer.append( " {execution: " ).append( executionId ).append( "}" );
+ return buffer.toString();
+ }
+
+ public String getGroupId()
+ {
+ if ( mojoDescriptor != null )
+ {
+ return mojoDescriptor.getPluginDescriptor().getGroupId();
+ }
+
+ return plugin.getGroupId();
+ }
+
+ public String getArtifactId()
+ {
+ if ( mojoDescriptor != null )
+ {
+ return mojoDescriptor.getPluginDescriptor().getArtifactId();
+ }
+
+ return plugin.getArtifactId();
+ }
+
+ public String getVersion()
+ {
+ if ( mojoDescriptor != null )
+ {
+ return mojoDescriptor.getPluginDescriptor().getVersion();
+ }
+
+ return plugin.getVersion();
+ }
+
+ public String getGoal()
+ {
+ if ( mojoDescriptor != null )
+ {
+ return mojoDescriptor.getGoal();
+ }
+
+ return goal;
+ }
+
+ public void setMojoDescriptor( MojoDescriptor mojoDescriptor )
+ {
+ this.mojoDescriptor = mojoDescriptor;
+ }
+
+ public Map<String, List<MojoExecution>> getForkedExecutions()
+ {
+ return forkedExecutions;
+ }
+
+ public void setForkedExecutions( String projectKey, List<MojoExecution> forkedExecutions )
+ {
+ this.forkedExecutions.put( projectKey, forkedExecutions );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginArtifactsCache.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginArtifactsCache.java
new file mode 100644
index 00000000..17537a29
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginArtifactsCache.java
@@ -0,0 +1,91 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.project.MavenProject;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * Caches plugin artifacts. <strong>Warning:</strong> This is an internal utility interface that is only public for
+ * technical reasons, it is not part of the public API. In particular, this interface can be changed or deleted without
+ * prior notice.
+ *
+ * @author Igor Fedorenko
+ * @author Benjamin Bentmann
+ */
+public interface PluginArtifactsCache
+{
+
+ /**
+ * A cache key.
+ */
+ interface Key
+ {
+ // marker interface for cache keys
+ }
+
+ static class CacheRecord
+ {
+
+ public final List<Artifact> artifacts;
+
+ public final PluginResolutionException exception;
+
+ public CacheRecord( List<Artifact> artifacts )
+ {
+ this.artifacts = artifacts;
+ this.exception = null;
+ }
+
+ public CacheRecord( PluginResolutionException exception )
+ {
+ this.artifacts = null;
+ this.exception = exception;
+ }
+ }
+
+ Key createKey( Plugin plugin, DependencyFilter extensionFilter, List<RemoteRepository> repositories,
+ RepositorySystemSession session );
+
+ CacheRecord get( Key key ) throws PluginResolutionException;
+
+ CacheRecord put( Key key, List<Artifact> pluginArtifacts );
+
+ CacheRecord put( Key key, PluginResolutionException e );
+
+ void flush();
+
+ /**
+ * Registers the specified cache record for usage with the given project. Integrators can use the information
+ * collected from this method in combination with a custom cache implementation to dispose unused records from the
+ * cache.
+ *
+ * @param project The project that employs the plugin realm, must not be {@code null}.
+ * @param record The cache record being used for the project, must not be {@code null}.
+ */
+ void register( MavenProject project, Key cacheKey, CacheRecord record );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginConfigurationException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginConfigurationException.java
new file mode 100644
index 00000000..f4dcffcd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginConfigurationException.java
@@ -0,0 +1,74 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
+import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+
+/**
+ * @author Jason van Zyl
+ */
+public class PluginConfigurationException
+ extends Exception
+{
+ private PluginDescriptor pluginDescriptor;
+
+ private String originalMessage;
+
+ public PluginConfigurationException( PluginDescriptor pluginDescriptor, String originalMessage )
+ {
+ super( originalMessage );
+ this.pluginDescriptor = pluginDescriptor;
+ this.originalMessage = originalMessage;
+ }
+
+ public PluginConfigurationException( PluginDescriptor pluginDescriptor, String originalMessage, Throwable cause )
+ {
+ super( originalMessage, cause );
+ this.pluginDescriptor = pluginDescriptor;
+ this.originalMessage = originalMessage;
+ }
+
+ public PluginConfigurationException( PluginDescriptor pluginDescriptor, String originalMessage,
+ ExpressionEvaluationException cause )
+ {
+ super( originalMessage, cause );
+ this.pluginDescriptor = pluginDescriptor;
+ this.originalMessage = originalMessage;
+ }
+
+ public PluginConfigurationException( PluginDescriptor pluginDescriptor, String originalMessage,
+ ComponentConfigurationException cause )
+ {
+ super( originalMessage, cause );
+ this.pluginDescriptor = pluginDescriptor;
+ this.originalMessage = originalMessage;
+ }
+
+ public PluginConfigurationException( PluginDescriptor pluginDescriptor, String originalMessage,
+ ComponentLookupException cause )
+ {
+ super( originalMessage, cause );
+ this.pluginDescriptor = pluginDescriptor;
+ this.originalMessage = originalMessage;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginContainerException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginContainerException.java
new file mode 100644
index 00000000..d35ac6c3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginContainerException.java
@@ -0,0 +1,88 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.component.repository.exception.ComponentRepositoryException;
+import org.codehaus.plexus.configuration.PlexusConfigurationException;
+
+/**
+ * Exception which occurs to indicate that the plugin cannot be initialized due
+ * to some deeper problem with Plexus. Context information includes the groupId,
+ * artifactId, and version for the plugin; at times, the goal name for which
+ * execution failed; a message detailing the problem; the ClassRealm used to
+ * lookup the plugin; and the Plexus exception that caused this error.
+ *
+ * @author jdcasey
+ *
+ */
+public class PluginContainerException
+ extends PluginManagerException
+{
+
+ private ClassRealm pluginRealm;
+
+ public PluginContainerException( MojoDescriptor mojoDescriptor, ClassRealm pluginRealm, String message,
+ Throwable e )
+ {
+ super( mojoDescriptor, message, e );
+
+ this.pluginRealm = pluginRealm;
+ }
+
+ public PluginContainerException( MojoDescriptor mojoDescriptor, ClassRealm pluginRealm, String message,
+ ComponentLookupException e )
+ {
+ super( mojoDescriptor, message, e );
+
+ this.pluginRealm = pluginRealm;
+ }
+
+ public PluginContainerException( Plugin plugin, ClassRealm pluginRealm, String message, Throwable e )
+ {
+ super( plugin, message, e );
+
+ this.pluginRealm = pluginRealm;
+ }
+
+ public PluginContainerException( Plugin plugin, ClassRealm pluginRealm, String message,
+ PlexusConfigurationException e )
+ {
+ super( plugin, message, e );
+
+ this.pluginRealm = pluginRealm;
+ }
+
+ public PluginContainerException( Plugin plugin, ClassRealm pluginRealm, String message,
+ ComponentRepositoryException e )
+ {
+ super( plugin, message, e );
+
+ this.pluginRealm = pluginRealm;
+ }
+
+ public ClassRealm getPluginRealm()
+ {
+ return pluginRealm;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginDescriptorCache.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginDescriptorCache.java
new file mode 100644
index 00000000..08b4f1bc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginDescriptorCache.java
@@ -0,0 +1,58 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * Caches raw plugin descriptors. A raw plugin descriptor is a descriptor that has just been extracted from the plugin
+ * artifact and does not contain any runtime specific data. The cache must not be used for descriptors that hold runtime
+ * data like the plugin realm. <strong>Warning:</strong> This is an internal utility interface that is only public for
+ * technical reasons, it is not part of the public API. In particular, this interface can be changed or deleted without
+ * prior notice.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+public interface PluginDescriptorCache
+{
+
+ /**
+ * A cache key.
+ */
+ interface Key
+ {
+ // marker interface for cache keys
+ }
+
+ Key createKey( Plugin plugin, List<RemoteRepository> repositories, RepositorySystemSession session );
+
+ void put( Key key, PluginDescriptor pluginDescriptor );
+
+ PluginDescriptor get( Key key );
+
+ void flush();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginDescriptorParsingException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginDescriptorParsingException.java
new file mode 100644
index 00000000..7d57b363
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginDescriptorParsingException.java
@@ -0,0 +1,58 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Plugin;
+
+/**
+ * @author Jason van Zyl
+ */
+public class PluginDescriptorParsingException
+ extends Exception
+{
+
+ public PluginDescriptorParsingException( Plugin plugin, String descriptorLocation, Throwable e )
+ {
+ super( createMessage( plugin, descriptorLocation, e ), e );
+ }
+
+ private static String createMessage( Plugin plugin, String descriptorLocation, Throwable e )
+ {
+ String message = "Failed to parse plugin descriptor";
+
+ if ( plugin != null )
+ {
+ message += " for " + plugin.getId();
+ }
+
+ if ( descriptorLocation != null )
+ {
+ message += " (" + descriptorLocation + ")";
+ }
+
+ if ( e != null )
+ {
+ message += ": " + e.getMessage();
+ }
+
+ return message;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginExecutionException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginExecutionException.java
new file mode 100644
index 00000000..602d2cb4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginExecutionException.java
@@ -0,0 +1,90 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.project.DuplicateArtifactAttachmentException;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.StringUtils;
+
+public class PluginExecutionException
+ extends PluginManagerException
+{
+
+ private final MojoExecution mojoExecution;
+
+ public PluginExecutionException( MojoExecution mojoExecution, MavenProject project, String message )
+ {
+ super( mojoExecution.getMojoDescriptor(), project, message );
+ this.mojoExecution = mojoExecution;
+ }
+
+ public PluginExecutionException( MojoExecution mojoExecution, MavenProject project, String message,
+ Throwable cause )
+ {
+ super( mojoExecution.getMojoDescriptor(), project, message, cause );
+ this.mojoExecution = mojoExecution;
+ }
+
+ public PluginExecutionException( MojoExecution mojoExecution, MavenProject project, Exception cause )
+ {
+ super( mojoExecution.getMojoDescriptor(), project, constructMessage( mojoExecution, cause ), cause );
+ this.mojoExecution = mojoExecution;
+ }
+
+ public PluginExecutionException( MojoExecution mojoExecution, MavenProject project,
+ DuplicateArtifactAttachmentException cause )
+ {
+ super( mojoExecution.getMojoDescriptor(), project, constructMessage( mojoExecution, cause ), cause );
+ this.mojoExecution = mojoExecution;
+ }
+
+ public MojoExecution getMojoExecution()
+ {
+ return mojoExecution;
+ }
+
+ private static String constructMessage( MojoExecution mojoExecution, Throwable cause )
+ {
+ String message;
+
+ if ( mojoExecution != null )
+ {
+ message =
+ "Execution " + mojoExecution.getExecutionId() + " of goal " + mojoExecution.getMojoDescriptor().getId()
+ + " failed";
+ }
+ else
+ {
+ message = "Mojo execution failed";
+ }
+
+ if ( cause != null && StringUtils.isNotEmpty( cause.getMessage() ) )
+ {
+ message += ": " + cause.getMessage();
+ }
+ else
+ {
+ message += ".";
+ }
+
+ return message;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginIncompatibleException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginIncompatibleException.java
new file mode 100644
index 00000000..f7b53ebd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginIncompatibleException.java
@@ -0,0 +1,36 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Plugin;
+
+/**
+ * Signals a plugin which is not compatible with the current Maven runtime.
+ */
+public class PluginIncompatibleException
+ extends PluginManagerException
+{
+
+ public PluginIncompatibleException( Plugin plugin, String message )
+ {
+ super( plugin, message, (Throwable) null );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginLoaderException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginLoaderException.java
new file mode 100644
index 00000000..161e1c4e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginLoaderException.java
@@ -0,0 +1,124 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.plugin.version.PluginVersionNotFoundException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+
+/**
+ * Signifies a failure to load a plugin. This is used to abstract the specific errors which may be
+ * encountered at lower levels, and provide a dependable interface to the plugin-loading framework.
+ *
+ * @author jdcasey
+ *
+ */
+public class PluginLoaderException
+ extends Exception
+{
+
+ private String pluginKey;
+
+ public PluginLoaderException( Plugin plugin, String message, ArtifactResolutionException cause )
+ {
+ super( message, cause );
+ pluginKey = plugin.getKey();
+ }
+
+ public PluginLoaderException( Plugin plugin, String message, ArtifactNotFoundException cause )
+ {
+ super( message, cause );
+ pluginKey = plugin.getKey();
+ }
+
+ public PluginLoaderException( Plugin plugin, String message, PluginNotFoundException cause )
+ {
+ super( message, cause );
+ pluginKey = plugin.getKey();
+ }
+
+ public PluginLoaderException( Plugin plugin, String message, PluginVersionResolutionException cause )
+ {
+ super( message, cause );
+ pluginKey = plugin.getKey();
+ }
+
+ public PluginLoaderException( Plugin plugin, String message, InvalidVersionSpecificationException cause )
+ {
+ super( message, cause );
+ pluginKey = plugin.getKey();
+ }
+
+ public PluginLoaderException( Plugin plugin, String message, InvalidPluginException cause )
+ {
+ super( message, cause );
+ pluginKey = plugin.getKey();
+ }
+
+ public PluginLoaderException( Plugin plugin, String message, PluginManagerException cause )
+ {
+ super( message, cause );
+ pluginKey = plugin.getKey();
+ }
+
+ public PluginLoaderException( Plugin plugin, String message, PluginVersionNotFoundException cause )
+ {
+ super( message, cause );
+ pluginKey = plugin.getKey();
+ }
+
+ public PluginLoaderException( Plugin plugin, String message )
+ {
+ super( message );
+ pluginKey = plugin.getKey();
+ }
+
+ public PluginLoaderException( String message )
+ {
+ super( message );
+ }
+
+ public PluginLoaderException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ public PluginLoaderException( ReportPlugin plugin, String message, Throwable cause )
+ {
+ super( message, cause );
+ pluginKey = plugin.getKey();
+ }
+
+ public PluginLoaderException( ReportPlugin plugin, String message )
+ {
+ super( message );
+ pluginKey = plugin.getKey();
+ }
+
+ public String getPluginKey()
+ {
+ return pluginKey;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java
new file mode 100644
index 00000000..1a3100e9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java
@@ -0,0 +1,82 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.plugin.version.PluginVersionNotFoundException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
+import org.apache.maven.settings.Settings;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
+ */
+@Deprecated
+public interface PluginManager
+{
+ String ROLE = PluginManager.class.getName();
+
+ void executeMojo( MavenProject project, MojoExecution execution, MavenSession session )
+ throws MojoExecutionException, ArtifactResolutionException, MojoFailureException, ArtifactNotFoundException,
+ InvalidDependencyVersionException, PluginManagerException, PluginConfigurationException;
+
+ PluginDescriptor getPluginDescriptorForPrefix( String prefix );
+
+ Plugin getPluginDefinitionForPrefix( String prefix, MavenSession session, MavenProject project );
+
+ PluginDescriptor verifyPlugin( Plugin plugin, MavenProject project, Settings settings,
+ ArtifactRepository localRepository )
+ throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException,
+ InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException,
+ PluginVersionNotFoundException;
+
+ Object getPluginComponent( Plugin plugin, String role, String roleHint )
+ throws PluginManagerException, ComponentLookupException;
+
+ Map getPluginComponents( Plugin plugin, String role )
+ throws ComponentLookupException, PluginManagerException;
+
+ /**
+ * @since 2.2.1
+ */
+ PluginDescriptor loadPluginDescriptor( Plugin plugin, MavenProject project, MavenSession session )
+ throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException,
+ InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException,
+ PluginVersionNotFoundException;
+
+ /**
+ * @since 2.2.1
+ */
+ PluginDescriptor loadPluginFully( Plugin plugin, MavenProject project, MavenSession session )
+ throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException,
+ InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException,
+ PluginVersionNotFoundException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginManagerException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginManagerException.java
new file mode 100644
index 00000000..dc8f9a20
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginManagerException.java
@@ -0,0 +1,197 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.PlexusContainerException;
+import org.codehaus.plexus.classworlds.realm.NoSuchRealmException;
+import org.codehaus.plexus.component.repository.exception.ComponentRepositoryException;
+import org.codehaus.plexus.configuration.PlexusConfigurationException;
+
+/**
+ * Exception in the plugin manager.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class PluginManagerException
+ extends Exception
+{
+
+ private final String pluginGroupId;
+
+ private final String pluginArtifactId;
+
+ private final String pluginVersion;
+
+ private String goal;
+
+ private MavenProject project;
+
+ protected PluginManagerException( Plugin plugin, String message, MavenProject project, Throwable cause )
+ {
+ super( message, cause );
+
+ this.project = project;
+ pluginGroupId = plugin.getGroupId();
+ pluginArtifactId = plugin.getArtifactId();
+ pluginVersion = plugin.getVersion();
+ }
+
+ public PluginManagerException( Plugin plugin, String message, Throwable cause )
+ {
+ super( message, cause );
+
+ pluginGroupId = plugin.getGroupId();
+ pluginArtifactId = plugin.getArtifactId();
+ pluginVersion = plugin.getVersion();
+ }
+
+ protected PluginManagerException( MojoDescriptor mojoDescriptor, String message, Throwable cause )
+ {
+ super( message, cause );
+ pluginGroupId = mojoDescriptor.getPluginDescriptor().getGroupId();
+ pluginArtifactId = mojoDescriptor.getPluginDescriptor().getArtifactId();
+ pluginVersion = mojoDescriptor.getPluginDescriptor().getVersion();
+ goal = mojoDescriptor.getGoal();
+ }
+
+ protected PluginManagerException( MojoDescriptor mojoDescriptor, MavenProject project, String message )
+ {
+ super( message );
+ this.project = project;
+ pluginGroupId = mojoDescriptor.getPluginDescriptor().getGroupId();
+ pluginArtifactId = mojoDescriptor.getPluginDescriptor().getArtifactId();
+ pluginVersion = mojoDescriptor.getPluginDescriptor().getVersion();
+ goal = mojoDescriptor.getGoal();
+ }
+
+ protected PluginManagerException( MojoDescriptor mojoDescriptor, MavenProject project, String message,
+ Throwable cause )
+ {
+ super( message, cause );
+ this.project = project;
+ pluginGroupId = mojoDescriptor.getPluginDescriptor().getGroupId();
+ pluginArtifactId = mojoDescriptor.getPluginDescriptor().getArtifactId();
+ pluginVersion = mojoDescriptor.getPluginDescriptor().getVersion();
+ goal = mojoDescriptor.getGoal();
+ }
+
+ public PluginManagerException( Plugin plugin, InvalidVersionSpecificationException cause )
+ {
+ super( cause );
+
+ pluginGroupId = plugin.getGroupId();
+ pluginArtifactId = plugin.getArtifactId();
+ pluginVersion = plugin.getVersion();
+ }
+
+ public PluginManagerException( Plugin plugin, String message, PlexusConfigurationException cause )
+ {
+ super( message, cause );
+
+ pluginGroupId = plugin.getGroupId();
+ pluginArtifactId = plugin.getArtifactId();
+ pluginVersion = plugin.getVersion();
+ }
+
+ public PluginManagerException( Plugin plugin, String message, ComponentRepositoryException cause )
+ {
+ super( message, cause );
+
+ pluginGroupId = plugin.getGroupId();
+ pluginArtifactId = plugin.getArtifactId();
+ pluginVersion = plugin.getVersion();
+ }
+
+ public PluginManagerException( MojoDescriptor mojoDescriptor, MavenProject project, String message,
+ NoSuchRealmException cause )
+ {
+ super( message, cause );
+
+ this.project = project;
+ pluginGroupId = mojoDescriptor.getPluginDescriptor().getGroupId();
+ pluginArtifactId = mojoDescriptor.getPluginDescriptor().getArtifactId();
+ pluginVersion = mojoDescriptor.getPluginDescriptor().getVersion();
+ goal = mojoDescriptor.getGoal();
+ }
+
+ public PluginManagerException( MojoDescriptor mojoDescriptor, String message, MavenProject project,
+ PlexusContainerException cause )
+ {
+ super( message, cause );
+
+ this.project = project;
+
+ PluginDescriptor pd = mojoDescriptor.getPluginDescriptor();
+ pluginGroupId = pd.getGroupId();
+ pluginArtifactId = pd.getArtifactId();
+ pluginVersion = pd.getVersion();
+
+ goal = mojoDescriptor.getGoal();
+ }
+
+ public PluginManagerException( Plugin plugin, String message, PlexusContainerException cause )
+ {
+ super( message, cause );
+
+ pluginGroupId = plugin.getGroupId();
+ pluginArtifactId = plugin.getArtifactId();
+ pluginVersion = plugin.getVersion();
+ }
+
+ public PluginManagerException( Plugin plugin, String message, MavenProject project )
+ {
+ super( message );
+
+ pluginGroupId = plugin.getGroupId();
+ pluginArtifactId = plugin.getArtifactId();
+ pluginVersion = plugin.getVersion();
+ this.project = project;
+ }
+
+ public String getPluginGroupId()
+ {
+ return pluginGroupId;
+ }
+
+ public String getPluginArtifactId()
+ {
+ return pluginArtifactId;
+ }
+
+ public String getPluginVersion()
+ {
+ return pluginVersion;
+ }
+
+ public String getGoal()
+ {
+ return goal;
+ }
+
+ public MavenProject getProject()
+ {
+ return project;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginNotFoundException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginNotFoundException.java
new file mode 100644
index 00000000..ef54e2d7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginNotFoundException.java
@@ -0,0 +1,58 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.AbstractArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.model.Plugin;
+
+/**
+ * Exception occurring trying to resolve a plugin.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class PluginNotFoundException
+ extends AbstractArtifactResolutionException
+{
+ private Plugin plugin;
+
+ public PluginNotFoundException( Plugin plugin, ArtifactNotFoundException e )
+ {
+ super( "Plugin could not be found - check that the goal name is correct: " + e.getMessage(), e.getGroupId(),
+ e.getArtifactId(), e.getVersion(), "maven-plugin", null, e.getRemoteRepositories(), null, e.getCause() );
+ this.plugin = plugin;
+ }
+
+ public PluginNotFoundException( Plugin plugin, List<ArtifactRepository> remoteRepositories )
+ {
+ super( "Plugin could not be found, please check its coordinates for typos and ensure the required"
+ + " plugin repositories are defined in the POM", plugin.getGroupId(), plugin.getArtifactId(),
+ plugin.getVersion(), "maven-plugin", null, remoteRepositories, null );
+ this.plugin = plugin;
+ }
+
+ public Plugin getPlugin()
+ {
+ return plugin;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterException.java
new file mode 100644
index 00000000..dcf459e7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterException.java
@@ -0,0 +1,192 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.Parameter;
+import org.codehaus.plexus.util.StringUtils;
+
+public class PluginParameterException
+ extends PluginConfigurationException
+{
+
+ private final List<Parameter> parameters;
+
+ private final MojoDescriptor mojo;
+
+ public PluginParameterException( MojoDescriptor mojo, List<Parameter> parameters )
+ {
+ super( mojo.getPluginDescriptor(), "The parameters " + format( parameters ) + " for goal "
+ + mojo.getRoleHint() + " are missing or invalid" );
+
+ this.mojo = mojo;
+
+ this.parameters = parameters;
+ }
+
+ private static String format( List<Parameter> parameters )
+ {
+ StringBuilder buffer = new StringBuilder( 128 );
+ if ( parameters != null )
+ {
+ for ( Parameter parameter : parameters )
+ {
+ if ( buffer.length() > 0 )
+ {
+ buffer.append( ", " );
+ }
+ buffer.append( '\'' ).append( parameter.getName() ).append( '\'' );
+ }
+ }
+ return buffer.toString();
+ }
+
+ public MojoDescriptor getMojoDescriptor()
+ {
+ return mojo;
+ }
+
+ public List<Parameter> getParameters()
+ {
+ return parameters;
+ }
+
+ private static void decomposeParameterIntoUserInstructions( MojoDescriptor mojo, Parameter param,
+ StringBuilder messageBuffer )
+ {
+ String expression = param.getExpression();
+
+ if ( param.isEditable() )
+ {
+ boolean isArray = param.getType().endsWith( "[]" );
+ boolean isCollection = false;
+ boolean isMap = false;
+ boolean isProperties = false;
+ if ( !isArray )
+ {
+ try
+ {
+ //assuming Type is available in current ClassLoader
+ isCollection = Collection.class.isAssignableFrom( Class.forName( param.getType() ) );
+ isMap = Map.class.isAssignableFrom( Class.forName( param.getType() ) );
+ isProperties = Properties.class.isAssignableFrom( Class.forName( param.getType() ) );
+ }
+ catch ( ClassNotFoundException e )
+ {
+ // assume it is not assignable from Collection or Map
+ }
+ }
+
+ messageBuffer.append( "Inside the definition for plugin \'" );
+ messageBuffer.append( mojo.getPluginDescriptor().getArtifactId() );
+ messageBuffer.append( "\', specify the following:\n\n<configuration>\n ...\n" );
+ messageBuffer.append( " <" ).append( param.getName() ).append( '>' );
+ if ( isArray || isCollection )
+ {
+ messageBuffer.append( '\n' );
+ messageBuffer.append( " <item>" );
+ }
+ else if ( isProperties )
+ {
+ messageBuffer.append( '\n' );
+ messageBuffer.append( " <property>\n" );
+ messageBuffer.append( " <name>KEY</name>\n" );
+ messageBuffer.append( " <value>" );
+ }
+ else if ( isMap )
+ {
+ messageBuffer.append( '\n' );
+ messageBuffer.append( " <KEY>" );
+ }
+ messageBuffer.append( "VALUE" );
+ if ( isArray || isCollection )
+ {
+ messageBuffer.append( "</item>\n" );
+ messageBuffer.append( " " );
+ }
+ else if ( isProperties )
+ {
+ messageBuffer.append( "</value>\n" );
+ messageBuffer.append( " </property>\n" );
+ messageBuffer.append( " " );
+ }
+ else if ( isMap )
+ {
+ messageBuffer.append( "</KEY>\n" );
+ messageBuffer.append( " " );
+ }
+ messageBuffer.append( "</" ).append( param.getName() ).append( ">\n" );
+ messageBuffer.append( "</configuration>" );
+
+ String alias = param.getAlias();
+ if ( StringUtils.isNotEmpty( alias ) && !alias.equals( param.getName() ) )
+ {
+ messageBuffer.append( "\n\n-OR-\n\n<configuration>\n ...\n <" ).append( alias ).append(
+ ">VALUE</" ).append( alias ).append( ">\n</configuration>\n" );
+ }
+ }
+
+ if ( StringUtils.isEmpty( expression ) )
+ {
+ messageBuffer.append( "." );
+ }
+ else
+ {
+ if ( param.isEditable() )
+ {
+ messageBuffer.append( "\n\n-OR-\n\n" );
+ }
+
+ //addParameterUsageInfo( expression, messageBuffer );
+ }
+ }
+
+ public String buildDiagnosticMessage()
+ {
+ StringBuilder messageBuffer = new StringBuilder( 256 );
+
+ List<Parameter> params = getParameters();
+ MojoDescriptor mojo = getMojoDescriptor();
+
+ messageBuffer.append( "One or more required plugin parameters are invalid/missing for \'" )
+ .append( mojo.getPluginDescriptor().getGoalPrefix() ).append( ":" ).append( mojo.getGoal() )
+ .append( "\'\n" );
+
+ int idx = 0;
+ for ( Iterator<Parameter> it = params.iterator(); it.hasNext(); idx++ )
+ {
+ Parameter param = it.next();
+
+ messageBuffer.append( "\n[" ).append( idx ).append( "] " );
+
+ decomposeParameterIntoUserInstructions( mojo, param, messageBuffer );
+
+ messageBuffer.append( "\n" );
+ }
+
+ return messageBuffer.toString();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
new file mode 100644
index 00000000..9199ba5a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
@@ -0,0 +1,482 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Properties;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.path.PathTranslator;
+import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+import org.codehaus.plexus.component.configurator.expression.TypeAwareExpressionEvaluator;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
+
+/**
+ * Evaluator for plugin parameters expressions. Content surrounded by <code>${</code> and <code>}</code> is evaluated.
+ * Recognized values are:<table border="1">
+ * <tr><th>expression</th> <th></th> <th>evaluation result</th></tr>
+ * <tr><td><code>session</code></td> <td></td> <td>the actual {@link MavenSession}</td></tr>
+ * <tr><td><code>session.*</code></td> <td>(since Maven 3)</td><td></td></tr>
+ * <tr><td><code>localRepository</code></td> <td></td>
+ * <td>{@link MavenSession#getLocalRepository()}</td></tr>
+ * <tr><td><code>reactorProjects</code></td> <td></td> <td>{@link MavenSession#getProjects()}</td></tr>
+ * <tr><td><code>repositorySystemSession</code></td><td> (since Maven 3)</td>
+ * <td>{@link MavenSession#getRepositorySession()}</td></tr>
+ * <tr><td><code>project</code></td> <td></td>
+ * <td>{@link MavenSession#getCurrentProject()}</td></tr>
+ * <tr><td><code>project.*</code></td> <td></td> <td></td></tr>
+ * <tr><td><code>pom.*</code></td> <td>(since Maven 3)</td><td>same as <code>project.*</code></td></tr>
+ * <tr><td><code>executedProject</code></td> <td></td>
+ * <td>{@link MavenProject#getExecutionProject()}</td></tr>
+ * <tr><td><code>settings</code></td> <td></td> <td>{@link MavenSession#getSettings()}</td></tr>
+ * <tr><td><code>settings.*</code></td> <td></td> <td></td></tr>
+ * <tr><td><code>basedir</code></td> <td></td>
+ * <td>{@link MavenSession#getExecutionRootDirectory()} or
+ * <code>System.getProperty( "user.dir" )</code> if null</td></tr>
+ * <tr><td><code>mojoExecution</code></td> <td></td> <td>the actual {@link MojoExecution}</td></tr>
+ * <tr><td><code>mojo</code></td> <td>(since Maven 3)</td><td>same as <code>mojoExecution</code></td></tr>
+ * <tr><td><code>mojo.*</code></td> <td>(since Maven 3)</td><td></td></tr>
+ * <tr><td><code>plugin</code></td> <td>(since Maven 3)</td>
+ * <td>{@link MojoExecution#getMojoDescriptor()}.{@link MojoDescriptor#getPluginDescriptor()
+ * getPluginDescriptor()}</td></tr>
+ * <tr><td><code>plugin.*</code></td> <td></td> <td></td></tr>
+ * <tr><td><code>*</code></td> <td></td> <td>system properties</td></tr>
+ * <tr><td><code>*</code></td> <td></td> <td>project properties</td></tr>
+ * </table>
+ * <i>Notice:</i> <code>reports</code> was supported in Maven 2.x but was removed in Maven 3
+ *
+ * @author Jason van Zyl
+ * @see MavenSession
+ * @see MojoExecution
+ */
+public class PluginParameterExpressionEvaluator
+ implements TypeAwareExpressionEvaluator
+{
+ private MavenSession session;
+
+ private MojoExecution mojoExecution;
+
+ private MavenProject project;
+
+ private String basedir;
+
+ private Properties properties;
+
+ @Deprecated //TODO: used by the Enforcer plugin
+ public PluginParameterExpressionEvaluator( MavenSession session, MojoExecution mojoExecution,
+ PathTranslator pathTranslator, Logger logger, MavenProject project,
+ Properties properties )
+ {
+ this( session, mojoExecution );
+ }
+
+ public PluginParameterExpressionEvaluator( MavenSession session )
+ {
+ this( session, null );
+ }
+
+ public PluginParameterExpressionEvaluator( MavenSession session, MojoExecution mojoExecution )
+ {
+ this.session = session;
+ this.mojoExecution = mojoExecution;
+ this.properties = new Properties();
+ this.project = session.getCurrentProject();
+
+ //
+ // Maven4: We may want to evaluate how this is used but we add these separate as the
+ // getExecutionProperties is deprecated in MavenSession.
+ //
+ this.properties.putAll( session.getUserProperties() );
+ this.properties.putAll( session.getSystemProperties() );
+
+ String basedir = null;
+
+ if ( project != null )
+ {
+ File projectFile = project.getBasedir();
+
+ // this should always be the case for non-super POM instances...
+ if ( projectFile != null )
+ {
+ basedir = projectFile.getAbsolutePath();
+ }
+ }
+
+ if ( basedir == null )
+ {
+ basedir = session.getExecutionRootDirectory();
+ }
+
+ if ( basedir == null )
+ {
+ basedir = System.getProperty( "user.dir" );
+ }
+
+ this.basedir = basedir;
+ }
+
+ @Override
+ public Object evaluate( String expr )
+ throws ExpressionEvaluationException
+ {
+ return evaluate( expr, null );
+ }
+
+ @Override
+ public Object evaluate( String expr, Class<?> type )
+ throws ExpressionEvaluationException
+ {
+ Object value = null;
+
+ if ( expr == null )
+ {
+ return null;
+ }
+
+ String expression = stripTokens( expr );
+ if ( expression.equals( expr ) )
+ {
+ int index = expr.indexOf( "${" );
+ if ( index >= 0 )
+ {
+ int lastIndex = expr.indexOf( "}", index );
+ if ( lastIndex >= 0 )
+ {
+ String retVal = expr.substring( 0, index );
+
+ if ( ( index > 0 ) && ( expr.charAt( index - 1 ) == '$' ) )
+ {
+ retVal += expr.substring( index + 1, lastIndex + 1 );
+ }
+ else
+ {
+ Object subResult = evaluate( expr.substring( index, lastIndex + 1 ) );
+
+ if ( subResult != null )
+ {
+ retVal += subResult;
+ }
+ else
+ {
+ retVal += "$" + expr.substring( index + 1, lastIndex + 1 );
+ }
+ }
+
+ retVal += evaluate( expr.substring( lastIndex + 1 ) );
+ return retVal;
+ }
+ }
+
+ // Was not an expression
+ if ( expression.contains( "$$" ) )
+ {
+ return expression.replaceAll( "\\$\\$", "\\$" );
+ }
+ else
+ {
+ return expression;
+ }
+ }
+
+ MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+
+ if ( "localRepository".equals( expression ) )
+ {
+ value = session.getLocalRepository();
+ }
+ else if ( "session".equals( expression ) )
+ {
+ value = session;
+ }
+ else if ( expression.startsWith( "session" ) )
+ {
+ try
+ {
+ int pathSeparator = expression.indexOf( "/" );
+
+ if ( pathSeparator > 0 )
+ {
+ String pathExpression = expression.substring( 1, pathSeparator );
+ value = ReflectionValueExtractor.evaluate( pathExpression, session );
+ value = value + expression.substring( pathSeparator );
+ }
+ else
+ {
+ value = ReflectionValueExtractor.evaluate( expression.substring( 1 ), session );
+ }
+ }
+ catch ( Exception e )
+ {
+ // TODO: don't catch exception
+ throw new ExpressionEvaluationException( "Error evaluating plugin parameter expression: " + expression,
+ e );
+ }
+ }
+ else if ( "reactorProjects".equals( expression ) )
+ {
+ value = session.getProjects();
+ }
+ else if ( "mojoExecution".equals( expression ) )
+ {
+ value = mojoExecution;
+ }
+ else if ( "project".equals( expression ) )
+ {
+ value = project;
+ }
+ else if ( "executedProject".equals( expression ) )
+ {
+ value = project.getExecutionProject();
+ }
+ else if ( expression.startsWith( "project" ) || expression.startsWith( "pom" ) )
+ {
+ try
+ {
+ int pathSeparator = expression.indexOf( "/" );
+
+ if ( pathSeparator > 0 )
+ {
+ String pathExpression = expression.substring( 0, pathSeparator );
+ value = ReflectionValueExtractor.evaluate( pathExpression, project );
+ value = value + expression.substring( pathSeparator );
+ }
+ else
+ {
+ value = ReflectionValueExtractor.evaluate( expression.substring( 1 ), project );
+ }
+ }
+ catch ( Exception e )
+ {
+ // TODO: don't catch exception
+ throw new ExpressionEvaluationException( "Error evaluating plugin parameter expression: " + expression,
+ e );
+ }
+ }
+ else if ( expression.equals( "repositorySystemSession" ) )
+ {
+ value = session.getRepositorySession();
+ }
+ else if ( expression.equals( "mojo" ) )
+ {
+ value = mojoExecution;
+ }
+ else if ( expression.startsWith( "mojo" ) )
+ {
+ try
+ {
+ int pathSeparator = expression.indexOf( "/" );
+
+ if ( pathSeparator > 0 )
+ {
+ String pathExpression = expression.substring( 1, pathSeparator );
+ value = ReflectionValueExtractor.evaluate( pathExpression, mojoExecution );
+ value = value + expression.substring( pathSeparator );
+ }
+ else
+ {
+ value = ReflectionValueExtractor.evaluate( expression.substring( 1 ), mojoExecution );
+ }
+ }
+ catch ( Exception e )
+ {
+ // TODO: don't catch exception
+ throw new ExpressionEvaluationException( "Error evaluating plugin parameter expression: " + expression,
+ e );
+ }
+ }
+ else if ( expression.equals( "plugin" ) )
+ {
+ value = mojoDescriptor.getPluginDescriptor();
+ }
+ else if ( expression.startsWith( "plugin" ) )
+ {
+ try
+ {
+ int pathSeparator = expression.indexOf( "/" );
+
+ PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
+
+ if ( pathSeparator > 0 )
+ {
+ String pathExpression = expression.substring( 1, pathSeparator );
+ value = ReflectionValueExtractor.evaluate( pathExpression, pluginDescriptor );
+ value = value + expression.substring( pathSeparator );
+ }
+ else
+ {
+ value = ReflectionValueExtractor.evaluate( expression.substring( 1 ), pluginDescriptor );
+ }
+ }
+ catch ( Exception e )
+ {
+ throw new ExpressionEvaluationException( "Error evaluating plugin parameter expression: " + expression,
+ e );
+ }
+ }
+ else if ( "settings".equals( expression ) )
+ {
+ value = session.getSettings();
+ }
+ else if ( expression.startsWith( "settings" ) )
+ {
+ try
+ {
+ int pathSeparator = expression.indexOf( "/" );
+
+ if ( pathSeparator > 0 )
+ {
+ String pathExpression = expression.substring( 1, pathSeparator );
+ value = ReflectionValueExtractor.evaluate( pathExpression, session.getSettings() );
+ value = value + expression.substring( pathSeparator );
+ }
+ else
+ {
+ value = ReflectionValueExtractor.evaluate( expression.substring( 1 ), session.getSettings() );
+ }
+ }
+ catch ( Exception e )
+ {
+ // TODO: don't catch exception
+ throw new ExpressionEvaluationException( "Error evaluating plugin parameter expression: " + expression,
+ e );
+ }
+ }
+ else if ( "basedir".equals( expression ) )
+ {
+ value = basedir;
+ }
+ else if ( expression.startsWith( "basedir" ) )
+ {
+ int pathSeparator = expression.indexOf( "/" );
+
+ if ( pathSeparator > 0 )
+ {
+ value = basedir + expression.substring( pathSeparator );
+ }
+ }
+
+ /*
+ * MNG-4312: We neither have reserved all of the above magic expressions nor is their set fixed/well-known (it
+ * gets occasionally extended by newer Maven versions). This imposes the risk for existing plugins to
+ * unintentionally use such a magic expression for an ordinary system property. So here we check whether we
+ * ended up with a magic value that is not compatible with the type of the configured mojo parameter (a string
+ * could still be converted by the configurator so we leave those alone). If so, back off to evaluating the
+ * expression from properties only.
+ */
+ if ( value != null && type != null && !( value instanceof String ) && !isTypeCompatible( type, value ) )
+ {
+ value = null;
+ }
+
+ if ( value == null )
+ {
+ // The CLI should win for defining properties
+
+ if ( properties != null )
+ {
+ // We will attempt to get nab a system property as a way to specify a
+ // parameter to a plugins. My particular case here is allowing the surefire
+ // plugin to run a single test so I want to specify that class on the cli
+ // as a parameter.
+
+ value = properties.getProperty( expression );
+ }
+
+ if ( ( value == null ) && ( ( project != null ) && ( project.getProperties() != null ) ) )
+ {
+ value = project.getProperties().getProperty( expression );
+ }
+
+ }
+
+ if ( value instanceof String )
+ {
+ // TODO: without #, this could just be an evaluate call...
+
+ String val = (String) value;
+
+ int exprStartDelimiter = val.indexOf( "${" );
+
+ if ( exprStartDelimiter >= 0 )
+ {
+ if ( exprStartDelimiter > 0 )
+ {
+ value = val.substring( 0, exprStartDelimiter ) + evaluate( val.substring( exprStartDelimiter ) );
+ }
+ else
+ {
+ value = evaluate( val.substring( exprStartDelimiter ) );
+ }
+ }
+ }
+
+ return value;
+ }
+
+ private static boolean isTypeCompatible( Class<?> type, Object value )
+ {
+ if ( type.isInstance( value ) )
+ {
+ return true;
+ }
+ // likely Boolean -> boolean, Short -> int etc. conversions, it's not the problem case we try to avoid
+ return ( ( type.isPrimitive() || type.getName().startsWith( "java.lang." ) )
+ && value.getClass().getName().startsWith( "java.lang." ) );
+ }
+
+ private String stripTokens( String expr )
+ {
+ if ( expr.startsWith( "${" ) && ( expr.indexOf( "}" ) == expr.length() - 1 ) )
+ {
+ expr = expr.substring( 2, expr.length() - 1 );
+ }
+ return expr;
+ }
+
+ @Override
+ public File alignToBaseDirectory( File file )
+ {
+ // TODO: Copied from the DefaultInterpolator. We likely want to resurrect the PathTranslator or at least a
+ // similar component for re-usage
+ if ( file != null )
+ {
+ if ( file.isAbsolute() )
+ {
+ // path was already absolute, just normalize file separator and we're done
+ }
+ else if ( file.getPath().startsWith( File.separator ) )
+ {
+ // drive-relative Windows path, don't align with project directory but with drive root
+ file = file.getAbsoluteFile();
+ }
+ else
+ {
+ // an ordinary relative path, align with project directory
+ file = new File( new File( basedir, file.getPath() ).toURI().normalize() ).getAbsoluteFile();
+ }
+ }
+ return file;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginRealmCache.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginRealmCache.java
new file mode 100644
index 00000000..1ffa1575
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginRealmCache.java
@@ -0,0 +1,85 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * Caches plugin class realms. <strong>Warning:</strong> This is an internal utility interface that is only public for
+ * technical reasons, it is not part of the public API. In particular, this interface can be changed or deleted without
+ * prior notice.
+ *
+ * @author Igor Fedorenko
+ * @author Benjamin Bentmann
+ */
+public interface PluginRealmCache
+{
+
+ static class CacheRecord
+ {
+ public final ClassRealm realm;
+
+ public final List<Artifact> artifacts;
+
+ public CacheRecord( ClassRealm realm, List<Artifact> artifacts )
+ {
+ this.realm = realm;
+ this.artifacts = artifacts;
+ }
+ }
+
+ /**
+ * A cache key.
+ */
+ interface Key
+ {
+ // marker interface for cache keys
+ }
+
+ Key createKey( Plugin plugin, ClassLoader parentRealm, Map<String, ClassLoader> foreignImports,
+ DependencyFilter dependencyFilter, List<RemoteRepository> repositories,
+ RepositorySystemSession session );
+
+ CacheRecord get( Key key );
+
+ CacheRecord put( Key key, ClassRealm pluginRealm, List<Artifact> pluginArtifacts );
+
+ void flush();
+
+ /**
+ * Registers the specified cache record for usage with the given project. Integrators can use the information
+ * collected from this method in combination with a custom cache implementation to dispose unused records from the
+ * cache.
+ *
+ * @param project The project that employs the plugin realm, must not be {@code null}.
+ * @param record The cache record being used for the project, must not be {@code null}.
+ */
+ void register( MavenProject project, Key key, CacheRecord record );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginResolutionException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginResolutionException.java
new file mode 100644
index 00000000..ab280643
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginResolutionException.java
@@ -0,0 +1,47 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Plugin;
+
+/**
+ * Exception occurring trying to resolve a plugin.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class PluginResolutionException
+ extends Exception
+{
+
+ private final Plugin plugin;
+
+ public PluginResolutionException( Plugin plugin, Throwable cause )
+ {
+ super( "Plugin " + plugin.getId() + " or one of its dependencies could not be resolved: " + cause.getMessage(),
+ cause );
+ this.plugin = plugin;
+ }
+
+ public Plugin getPlugin()
+ {
+ return plugin;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java
new file mode 100644
index 00000000..f397c1e8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java
@@ -0,0 +1,74 @@
+package org.apache.maven.plugin.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.concurrent.atomic.AtomicReference;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.LegacySupport;
+import org.codehaus.plexus.component.annotations.Component;
+import org.eclipse.aether.RepositorySystemSession;
+
+/**
+ * Helps to provide backward-compatibility with plugins that use legacy components. <strong>Warning:</strong> This is an
+ * internal utility component that is only public for technical reasons, it is not part of the public API. In
+ * particular, this component can be changed or deleted without prior notice.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+@Component( role = LegacySupport.class )
+public class DefaultLegacySupport
+ implements LegacySupport
+{
+
+ private static final ThreadLocal<AtomicReference<MavenSession>> SESSION =
+ new InheritableThreadLocal<AtomicReference<MavenSession>>();
+
+ public void setSession( MavenSession session )
+ {
+ AtomicReference<MavenSession> reference = DefaultLegacySupport.SESSION.get();
+ if ( reference != null )
+ {
+ reference.set( null );
+ }
+
+ if ( session == null && reference != null )
+ {
+ DefaultLegacySupport.SESSION.remove();
+ }
+ else
+ {
+ DefaultLegacySupport.SESSION.set( new AtomicReference<MavenSession>( session ) );
+ }
+ }
+
+ public MavenSession getSession()
+ {
+ AtomicReference<MavenSession> currentSession = DefaultLegacySupport.SESSION.get();
+ return currentSession != null ? currentSession.get() : null;
+ }
+
+ public RepositorySystemSession getRepositorySession()
+ {
+ MavenSession session = getSession();
+ return ( session != null ) ? session.getRepositorySession() : null;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
new file mode 100644
index 00000000..d32e04c1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
@@ -0,0 +1,946 @@
+package org.apache.maven.plugin.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.classrealm.ClassRealmManager;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.scope.internal.MojoExecutionScopeModule;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.monitor.logging.DefaultLog;
+import org.apache.maven.plugin.ContextEnabled;
+import org.apache.maven.plugin.DebugConfigurationListener;
+import org.apache.maven.plugin.ExtensionRealmCache;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MavenPluginManager;
+import org.apache.maven.plugin.MavenPluginValidator;
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginArtifactsCache;
+import org.apache.maven.plugin.PluginConfigurationException;
+import org.apache.maven.plugin.PluginContainerException;
+import org.apache.maven.plugin.PluginDescriptorCache;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginIncompatibleException;
+import org.apache.maven.plugin.PluginManagerException;
+import org.apache.maven.plugin.PluginParameterException;
+import org.apache.maven.plugin.PluginParameterExpressionEvaluator;
+import org.apache.maven.plugin.PluginRealmCache;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.Parameter;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.plugin.descriptor.PluginDescriptorBuilder;
+import org.apache.maven.plugin.version.DefaultPluginVersionRequest;
+import org.apache.maven.plugin.version.PluginVersionRequest;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.plugin.version.PluginVersionResolver;
+import org.apache.maven.project.ExtensionDescriptor;
+import org.apache.maven.project.ExtensionDescriptorBuilder;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.rtinfo.RuntimeInformation;
+import org.apache.maven.session.scope.internal.SessionScopeModule;
+import org.codehaus.plexus.DefaultPlexusContainer;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.component.composition.CycleDetectedInComponentGraphException;
+import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
+import org.codehaus.plexus.component.configurator.ComponentConfigurator;
+import org.codehaus.plexus.component.configurator.ConfigurationListener;
+import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
+import org.codehaus.plexus.component.repository.ComponentDescriptor;
+import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.codehaus.plexus.configuration.PlexusConfigurationException;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.logging.LoggerManager;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.util.filter.AndDependencyFilter;
+import org.eclipse.aether.util.graph.visitor.PreorderNodeListGenerator;
+
+/**
+ * Provides basic services to manage Maven plugins and their mojos. This component is kept general in its design such
+ * that the plugins/mojos can be used in arbitrary contexts. In particular, the mojos can be used for ordinary build
+ * plugins as well as special purpose plugins like reports.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+@Component( role = MavenPluginManager.class )
+public class DefaultMavenPluginManager
+ implements MavenPluginManager
+{
+
+ /**
+ * PluginId=>ExtensionRealmCache.CacheRecord map MavenProject context value key. The map is used to ensure the same
+ * class realm is used to load build extensions and load mojos for extensions=true plugins.
+ *
+ * @noreference this is part of internal implementation and may be changed or removed without notice
+ * @since 3.3.0
+ */
+ public static final String KEY_EXTENSIONS_REALMS = DefaultMavenPluginManager.class.getName() + "/extensionsRealms";
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private LoggerManager loggerManager;
+
+ @Requirement
+ private PlexusContainer container;
+
+ @Requirement
+ private ClassRealmManager classRealmManager;
+
+ @Requirement
+ private PluginDescriptorCache pluginDescriptorCache;
+
+ @Requirement
+ private PluginRealmCache pluginRealmCache;
+
+ @Requirement
+ private PluginDependenciesResolver pluginDependenciesResolver;
+
+ @Requirement
+ private RuntimeInformation runtimeInformation;
+
+ @Requirement
+ private ExtensionRealmCache extensionRealmCache;
+
+ @Requirement
+ private PluginVersionResolver pluginVersionResolver;
+
+ @Requirement
+ private PluginArtifactsCache pluginArtifactsCache;
+
+ private ExtensionDescriptorBuilder extensionDescriptorBuilder = new ExtensionDescriptorBuilder();
+
+ private PluginDescriptorBuilder builder = new PluginDescriptorBuilder();
+
+ public synchronized PluginDescriptor getPluginDescriptor( Plugin plugin, List<RemoteRepository> repositories,
+ RepositorySystemSession session )
+ throws PluginResolutionException, PluginDescriptorParsingException, InvalidPluginDescriptorException
+ {
+ PluginDescriptorCache.Key cacheKey = pluginDescriptorCache.createKey( plugin, repositories, session );
+
+ PluginDescriptor pluginDescriptor = pluginDescriptorCache.get( cacheKey );
+
+ if ( pluginDescriptor == null )
+ {
+ org.eclipse.aether.artifact.Artifact artifact =
+ pluginDependenciesResolver.resolve( plugin, repositories, session );
+
+ Artifact pluginArtifact = RepositoryUtils.toArtifact( artifact );
+
+ pluginDescriptor = extractPluginDescriptor( pluginArtifact, plugin );
+
+ pluginDescriptor.setRequiredMavenVersion( artifact.getProperty( "requiredMavenVersion", null ) );
+
+ pluginDescriptorCache.put( cacheKey, pluginDescriptor );
+ }
+
+ pluginDescriptor.setPlugin( plugin );
+
+ return pluginDescriptor;
+ }
+
+ private PluginDescriptor extractPluginDescriptor( Artifact pluginArtifact, Plugin plugin )
+ throws PluginDescriptorParsingException, InvalidPluginDescriptorException
+ {
+ PluginDescriptor pluginDescriptor = null;
+
+ File pluginFile = pluginArtifact.getFile();
+
+ try
+ {
+ if ( pluginFile.isFile() )
+ {
+ JarFile pluginJar = new JarFile( pluginFile, false );
+ try
+ {
+ ZipEntry pluginDescriptorEntry = pluginJar.getEntry( getPluginDescriptorLocation() );
+
+ if ( pluginDescriptorEntry != null )
+ {
+ InputStream is = pluginJar.getInputStream( pluginDescriptorEntry );
+
+ pluginDescriptor = parsePluginDescriptor( is, plugin, pluginFile.getAbsolutePath() );
+ }
+ }
+ finally
+ {
+ pluginJar.close();
+ }
+ }
+ else
+ {
+ File pluginXml = new File( pluginFile, getPluginDescriptorLocation() );
+
+ if ( pluginXml.isFile() )
+ {
+ InputStream is = new BufferedInputStream( new FileInputStream( pluginXml ) );
+ try
+ {
+ pluginDescriptor = parsePluginDescriptor( is, plugin, pluginXml.getAbsolutePath() );
+ }
+ finally
+ {
+ IOUtil.close( is );
+ }
+ }
+ }
+
+ if ( pluginDescriptor == null )
+ {
+ throw new IOException( "No plugin descriptor found at " + getPluginDescriptorLocation() );
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new PluginDescriptorParsingException( plugin, pluginFile.getAbsolutePath(), e );
+ }
+
+ MavenPluginValidator validator = new MavenPluginValidator( pluginArtifact );
+
+ validator.validate( pluginDescriptor );
+
+ if ( validator.hasErrors() )
+ {
+ throw new InvalidPluginDescriptorException( "Invalid plugin descriptor for " + plugin.getId() + " ("
+ + pluginFile + ")", validator.getErrors() );
+ }
+
+ pluginDescriptor.setPluginArtifact( pluginArtifact );
+
+ return pluginDescriptor;
+ }
+
+ private String getPluginDescriptorLocation()
+ {
+ return "META-INF/maven/plugin.xml";
+ }
+
+ private PluginDescriptor parsePluginDescriptor( InputStream is, Plugin plugin, String descriptorLocation )
+ throws PluginDescriptorParsingException
+ {
+ try
+ {
+ Reader reader = ReaderFactory.newXmlReader( is );
+
+ PluginDescriptor pluginDescriptor = builder.build( reader, descriptorLocation );
+
+ return pluginDescriptor;
+ }
+ catch ( IOException e )
+ {
+ throw new PluginDescriptorParsingException( plugin, descriptorLocation, e );
+ }
+ catch ( PlexusConfigurationException e )
+ {
+ throw new PluginDescriptorParsingException( plugin, descriptorLocation, e );
+ }
+ }
+
+ public MojoDescriptor getMojoDescriptor( Plugin plugin, String goal, List<RemoteRepository> repositories,
+ RepositorySystemSession session )
+ throws MojoNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ InvalidPluginDescriptorException
+ {
+ PluginDescriptor pluginDescriptor = getPluginDescriptor( plugin, repositories, session );
+
+ MojoDescriptor mojoDescriptor = pluginDescriptor.getMojo( goal );
+
+ if ( mojoDescriptor == null )
+ {
+ throw new MojoNotFoundException( goal, pluginDescriptor );
+ }
+
+ return mojoDescriptor;
+ }
+
+ public void checkRequiredMavenVersion( PluginDescriptor pluginDescriptor )
+ throws PluginIncompatibleException
+ {
+ String requiredMavenVersion = pluginDescriptor.getRequiredMavenVersion();
+ if ( StringUtils.isNotBlank( requiredMavenVersion ) )
+ {
+ try
+ {
+ if ( !runtimeInformation.isMavenVersion( requiredMavenVersion ) )
+ {
+ throw new PluginIncompatibleException( pluginDescriptor.getPlugin(), "The plugin "
+ + pluginDescriptor.getId() + " requires Maven version " + requiredMavenVersion );
+ }
+ }
+ catch ( RuntimeException e )
+ {
+ logger.warn( "Could not verify plugin's Maven prerequisite: " + e.getMessage() );
+ }
+ }
+ }
+
+ public synchronized void setupPluginRealm( PluginDescriptor pluginDescriptor, MavenSession session,
+ ClassLoader parent, List<String> imports, DependencyFilter filter )
+ throws PluginResolutionException, PluginContainerException
+ {
+ Plugin plugin = pluginDescriptor.getPlugin();
+ MavenProject project = session.getCurrentProject();
+
+ if ( plugin.isExtensions() )
+ {
+ ExtensionRealmCache.CacheRecord extensionRecord;
+ try
+ {
+ RepositorySystemSession repositorySession = session.getRepositorySession();
+ extensionRecord = setupExtensionsRealm( project, plugin, repositorySession );
+ }
+ catch ( PluginManagerException e )
+ {
+ // extensions realm is expected to be fully setup at this point
+ // any exception means a problem in maven code, not a user error
+ throw new IllegalStateException( e );
+ }
+
+ ClassRealm pluginRealm = extensionRecord.realm;
+ List<Artifact> pluginArtifacts = extensionRecord.artifacts;
+
+ for ( ComponentDescriptor<?> componentDescriptor : pluginDescriptor.getComponents() )
+ {
+ componentDescriptor.setRealm( pluginRealm );
+ }
+
+ pluginDescriptor.setClassRealm( pluginRealm );
+ pluginDescriptor.setArtifacts( pluginArtifacts );
+ }
+ else
+ {
+ Map<String, ClassLoader> foreignImports = calcImports( project, parent, imports );
+
+ PluginRealmCache.Key cacheKey =
+ pluginRealmCache.createKey( plugin, parent, foreignImports, filter,
+ project.getRemotePluginRepositories(), session.getRepositorySession() );
+
+ PluginRealmCache.CacheRecord cacheRecord = pluginRealmCache.get( cacheKey );
+
+ if ( cacheRecord != null )
+ {
+ pluginDescriptor.setClassRealm( cacheRecord.realm );
+ pluginDescriptor.setArtifacts( new ArrayList<Artifact>( cacheRecord.artifacts ) );
+ for ( ComponentDescriptor<?> componentDescriptor : pluginDescriptor.getComponents() )
+ {
+ componentDescriptor.setRealm( cacheRecord.realm );
+ }
+ }
+ else
+ {
+ createPluginRealm( pluginDescriptor, session, parent, foreignImports, filter );
+
+ cacheRecord =
+ pluginRealmCache.put( cacheKey, pluginDescriptor.getClassRealm(), pluginDescriptor.getArtifacts() );
+ }
+
+ pluginRealmCache.register( project, cacheKey, cacheRecord );
+ }
+ }
+
+ private void createPluginRealm( PluginDescriptor pluginDescriptor, MavenSession session, ClassLoader parent,
+ Map<String, ClassLoader> foreignImports, DependencyFilter filter )
+ throws PluginResolutionException, PluginContainerException
+ {
+ Plugin plugin = pluginDescriptor.getPlugin();
+
+ if ( plugin == null )
+ {
+ throw new IllegalArgumentException( "incomplete plugin descriptor, plugin missing" );
+ }
+
+ Artifact pluginArtifact = pluginDescriptor.getPluginArtifact();
+
+ if ( pluginArtifact == null )
+ {
+ throw new IllegalArgumentException( "incomplete plugin descriptor, plugin artifact missing" );
+ }
+
+ MavenProject project = session.getCurrentProject();
+
+ final ClassRealm pluginRealm;
+ final List<Artifact> pluginArtifacts;
+
+ RepositorySystemSession repositorySession = session.getRepositorySession();
+ DependencyFilter dependencyFilter = project.getExtensionDependencyFilter();
+ dependencyFilter = AndDependencyFilter.newInstance( dependencyFilter, filter );
+
+ DependencyNode root =
+ pluginDependenciesResolver.resolve( plugin, RepositoryUtils.toArtifact( pluginArtifact ),
+ dependencyFilter, project.getRemotePluginRepositories(),
+ repositorySession );
+
+ PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
+ root.accept( nlg );
+
+ pluginArtifacts = toMavenArtifacts( root, nlg );
+
+ pluginRealm =
+ classRealmManager.createPluginRealm( plugin, parent, null, foreignImports,
+ toAetherArtifacts( pluginArtifacts ) );
+
+ discoverPluginComponents( pluginRealm, plugin, pluginDescriptor );
+
+ pluginDescriptor.setClassRealm( pluginRealm );
+ pluginDescriptor.setArtifacts( pluginArtifacts );
+ }
+
+ private void discoverPluginComponents( final ClassRealm pluginRealm, Plugin plugin,
+ PluginDescriptor pluginDescriptor )
+ throws PluginContainerException
+ {
+ try
+ {
+ if ( pluginDescriptor != null )
+ {
+ for ( ComponentDescriptor<?> componentDescriptor : pluginDescriptor.getComponents() )
+ {
+ componentDescriptor.setRealm( pluginRealm );
+ container.addComponentDescriptor( componentDescriptor );
+ }
+ }
+
+ ( (DefaultPlexusContainer) container ).discoverComponents( pluginRealm,
+ new SessionScopeModule( container ),
+ new MojoExecutionScopeModule( container ) );
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new PluginContainerException( plugin, pluginRealm, "Error in component graph of plugin "
+ + plugin.getId() + ": " + e.getMessage(), e );
+ }
+ catch ( CycleDetectedInComponentGraphException e )
+ {
+ throw new PluginContainerException( plugin, pluginRealm, "Error in component graph of plugin "
+ + plugin.getId() + ": " + e.getMessage(), e );
+ }
+ }
+
+ private List<org.eclipse.aether.artifact.Artifact> toAetherArtifacts( final List<Artifact> pluginArtifacts )
+ {
+ return new ArrayList<org.eclipse.aether.artifact.Artifact>( RepositoryUtils.toArtifacts( pluginArtifacts ) );
+ }
+
+ private List<Artifact> toMavenArtifacts( DependencyNode root, PreorderNodeListGenerator nlg )
+ {
+ List<Artifact> artifacts = new ArrayList<Artifact>( nlg.getNodes().size() );
+ RepositoryUtils.toArtifacts( artifacts, Collections.singleton( root ), Collections.<String>emptyList(), null );
+ for ( Iterator<Artifact> it = artifacts.iterator(); it.hasNext(); )
+ {
+ Artifact artifact = it.next();
+ if ( artifact.getFile() == null )
+ {
+ it.remove();
+ }
+ }
+ return artifacts;
+ }
+
+ private Map<String, ClassLoader> calcImports( MavenProject project, ClassLoader parent, List<String> imports )
+ {
+ Map<String, ClassLoader> foreignImports = new HashMap<String, ClassLoader>();
+
+ ClassLoader projectRealm = project.getClassRealm();
+ if ( projectRealm != null )
+ {
+ foreignImports.put( "", projectRealm );
+ }
+ else
+ {
+ foreignImports.put( "", classRealmManager.getMavenApiRealm() );
+ }
+
+ if ( parent != null && imports != null )
+ {
+ for ( String parentImport : imports )
+ {
+ foreignImports.put( parentImport, parent );
+ }
+ }
+
+ return foreignImports;
+ }
+
+ public <T> T getConfiguredMojo( Class<T> mojoInterface, MavenSession session, MojoExecution mojoExecution )
+ throws PluginConfigurationException, PluginContainerException
+ {
+ MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
+
+ PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
+
+ ClassRealm pluginRealm = pluginDescriptor.getClassRealm();
+
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Configuring mojo " + mojoDescriptor.getId() + " from plugin realm " + pluginRealm );
+ }
+
+ // We are forcing the use of the plugin realm for all lookups that might occur during
+ // the lifecycle that is part of the lookup. Here we are specifically trying to keep
+ // lookups that occur in contextualize calls in line with the right realm.
+ ClassRealm oldLookupRealm = container.setLookupRealm( pluginRealm );
+
+ ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader( pluginRealm );
+
+ try
+ {
+ T mojo;
+
+ try
+ {
+ mojo = container.lookup( mojoInterface, mojoDescriptor.getRoleHint() );
+ }
+ catch ( ComponentLookupException e )
+ {
+ Throwable cause = e.getCause();
+ while ( cause != null && !( cause instanceof LinkageError )
+ && !( cause instanceof ClassNotFoundException ) )
+ {
+ cause = cause.getCause();
+ }
+
+ if ( ( cause instanceof NoClassDefFoundError ) || ( cause instanceof ClassNotFoundException ) )
+ {
+ ByteArrayOutputStream os = new ByteArrayOutputStream( 1024 );
+ PrintStream ps = new PrintStream( os );
+ ps.println( "Unable to load the mojo '" + mojoDescriptor.getGoal() + "' in the plugin '"
+ + pluginDescriptor.getId() + "'. A required class is missing: " + cause.getMessage() );
+ pluginRealm.display( ps );
+
+ throw new PluginContainerException( mojoDescriptor, pluginRealm, os.toString(), cause );
+ }
+ else if ( cause instanceof LinkageError )
+ {
+ ByteArrayOutputStream os = new ByteArrayOutputStream( 1024 );
+ PrintStream ps = new PrintStream( os );
+ ps.println( "Unable to load the mojo '" + mojoDescriptor.getGoal() + "' in the plugin '"
+ + pluginDescriptor.getId() + "' due to an API incompatibility: " + e.getClass().getName()
+ + ": " + cause.getMessage() );
+ pluginRealm.display( ps );
+
+ throw new PluginContainerException( mojoDescriptor, pluginRealm, os.toString(), cause );
+ }
+
+ throw new PluginContainerException( mojoDescriptor, pluginRealm, "Unable to load the mojo '"
+ + mojoDescriptor.getGoal() + "' (or one of its required components) from the plugin '"
+ + pluginDescriptor.getId() + "'", e );
+ }
+
+ if ( mojo instanceof ContextEnabled )
+ {
+ MavenProject project = session.getCurrentProject();
+
+ Map<String, Object> pluginContext = session.getPluginContext( pluginDescriptor, project );
+
+ if ( pluginContext != null )
+ {
+ pluginContext.put( "project", project );
+
+ pluginContext.put( "pluginDescriptor", pluginDescriptor );
+
+ ( (ContextEnabled) mojo ).setPluginContext( pluginContext );
+ }
+ }
+
+ if ( mojo instanceof Mojo )
+ {
+ Logger mojoLogger = loggerManager.getLoggerForComponent( mojoDescriptor.getImplementation() );
+ ( (Mojo) mojo ).setLog( new DefaultLog( mojoLogger ) );
+ }
+
+ Xpp3Dom dom = mojoExecution.getConfiguration();
+
+ PlexusConfiguration pomConfiguration;
+
+ if ( dom == null )
+ {
+ pomConfiguration = new XmlPlexusConfiguration( "configuration" );
+ }
+ else
+ {
+ pomConfiguration = new XmlPlexusConfiguration( dom );
+ }
+
+ ExpressionEvaluator expressionEvaluator = new PluginParameterExpressionEvaluator( session, mojoExecution );
+
+ populatePluginFields( mojo, mojoDescriptor, pluginRealm, pomConfiguration, expressionEvaluator );
+
+ return mojo;
+ }
+ finally
+ {
+ Thread.currentThread().setContextClassLoader( oldClassLoader );
+ container.setLookupRealm( oldLookupRealm );
+ }
+ }
+
+ private void populatePluginFields( Object mojo, MojoDescriptor mojoDescriptor, ClassRealm pluginRealm,
+ PlexusConfiguration configuration, ExpressionEvaluator expressionEvaluator )
+ throws PluginConfigurationException
+ {
+ ComponentConfigurator configurator = null;
+
+ String configuratorId = mojoDescriptor.getComponentConfigurator();
+
+ if ( StringUtils.isEmpty( configuratorId ) )
+ {
+ configuratorId = "basic";
+ }
+
+ try
+ {
+ // TODO: could the configuration be passed to lookup and the configurator known to plexus via the descriptor
+ // so that this method could entirely be handled by a plexus lookup?
+ configurator = container.lookup( ComponentConfigurator.class, configuratorId );
+
+ ConfigurationListener listener = new DebugConfigurationListener( logger );
+
+ ValidatingConfigurationListener validator =
+ new ValidatingConfigurationListener( mojo, mojoDescriptor, listener );
+
+ logger.debug( "Configuring mojo '" + mojoDescriptor.getId() + "' with " + configuratorId
+ + " configurator -->" );
+
+ configurator.configureComponent( mojo, configuration, expressionEvaluator, pluginRealm, validator );
+
+ logger.debug( "-- end configuration --" );
+
+ Collection<Parameter> missingParameters = validator.getMissingParameters();
+ if ( !missingParameters.isEmpty() )
+ {
+ if ( "basic".equals( configuratorId ) )
+ {
+ throw new PluginParameterException( mojoDescriptor, new ArrayList<Parameter>( missingParameters ) );
+ }
+ else
+ {
+ /*
+ * NOTE: Other configurators like the map-oriented one don't call into the listener, so do it the
+ * hard way.
+ */
+ validateParameters( mojoDescriptor, configuration, expressionEvaluator );
+ }
+ }
+ }
+ catch ( ComponentConfigurationException e )
+ {
+ String message = "Unable to parse configuration of mojo " + mojoDescriptor.getId();
+ if ( e.getFailedConfiguration() != null )
+ {
+ message += " for parameter " + e.getFailedConfiguration().getName();
+ }
+ message += ": " + e.getMessage();
+
+ throw new PluginConfigurationException( mojoDescriptor.getPluginDescriptor(), message, e );
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new PluginConfigurationException( mojoDescriptor.getPluginDescriptor(),
+ "Unable to retrieve component configurator " + configuratorId
+ + " for configuration of mojo " + mojoDescriptor.getId(), e );
+ }
+ catch ( NoClassDefFoundError e )
+ {
+ ByteArrayOutputStream os = new ByteArrayOutputStream( 1024 );
+ PrintStream ps = new PrintStream( os );
+ ps.println( "A required class was missing during configuration of mojo " + mojoDescriptor.getId() + ": "
+ + e.getMessage() );
+ pluginRealm.display( ps );
+
+ throw new PluginConfigurationException( mojoDescriptor.getPluginDescriptor(), os.toString(), e );
+ }
+ catch ( LinkageError e )
+ {
+ ByteArrayOutputStream os = new ByteArrayOutputStream( 1024 );
+ PrintStream ps = new PrintStream( os );
+ ps.println( "An API incompatibility was encountered during configuration of mojo " + mojoDescriptor.getId()
+ + ": " + e.getClass().getName() + ": " + e.getMessage() );
+ pluginRealm.display( ps );
+
+ throw new PluginConfigurationException( mojoDescriptor.getPluginDescriptor(), os.toString(), e );
+ }
+ finally
+ {
+ if ( configurator != null )
+ {
+ try
+ {
+ container.release( configurator );
+ }
+ catch ( ComponentLifecycleException e )
+ {
+ logger.debug( "Failed to release mojo configurator - ignoring." );
+ }
+ }
+ }
+ }
+
+ private void validateParameters( MojoDescriptor mojoDescriptor, PlexusConfiguration configuration,
+ ExpressionEvaluator expressionEvaluator )
+ throws ComponentConfigurationException, PluginParameterException
+ {
+ if ( mojoDescriptor.getParameters() == null )
+ {
+ return;
+ }
+
+ List<Parameter> invalidParameters = new ArrayList<Parameter>();
+
+ for ( Parameter parameter : mojoDescriptor.getParameters() )
+ {
+ if ( !parameter.isRequired() )
+ {
+ continue;
+ }
+
+ Object value = null;
+
+ PlexusConfiguration config = configuration.getChild( parameter.getName(), false );
+ if ( config != null )
+ {
+ String expression = config.getValue( null );
+
+ try
+ {
+ value = expressionEvaluator.evaluate( expression );
+
+ if ( value == null )
+ {
+ value = config.getAttribute( "default-value", null );
+ }
+ }
+ catch ( ExpressionEvaluationException e )
+ {
+ String msg =
+ "Error evaluating the expression '" + expression + "' for configuration value '"
+ + configuration.getName() + "'";
+ throw new ComponentConfigurationException( configuration, msg, e );
+ }
+ }
+
+ if ( value == null && ( config == null || config.getChildCount() <= 0 ) )
+ {
+ invalidParameters.add( parameter );
+ }
+ }
+
+ if ( !invalidParameters.isEmpty() )
+ {
+ throw new PluginParameterException( mojoDescriptor, invalidParameters );
+ }
+ }
+
+ public void releaseMojo( Object mojo, MojoExecution mojoExecution )
+ {
+ if ( mojo != null )
+ {
+ try
+ {
+ container.release( mojo );
+ }
+ catch ( ComponentLifecycleException e )
+ {
+ String goalExecId = mojoExecution.getGoal();
+
+ if ( mojoExecution.getExecutionId() != null )
+ {
+ goalExecId += " {execution: " + mojoExecution.getExecutionId() + "}";
+ }
+
+ logger.debug( "Error releasing mojo for " + goalExecId, e );
+ }
+ }
+ }
+
+ public ExtensionRealmCache.CacheRecord setupExtensionsRealm( MavenProject project, Plugin plugin,
+ RepositorySystemSession session )
+ throws PluginManagerException
+ {
+ @SuppressWarnings( "unchecked" )
+ Map<String, ExtensionRealmCache.CacheRecord> pluginRealms =
+ (Map<String, ExtensionRealmCache.CacheRecord>) project.getContextValue( KEY_EXTENSIONS_REALMS );
+ if ( pluginRealms == null )
+ {
+ pluginRealms = new HashMap<String, ExtensionRealmCache.CacheRecord>();
+ project.setContextValue( KEY_EXTENSIONS_REALMS, pluginRealms );
+ }
+
+ final String pluginKey = plugin.getId();
+
+ ExtensionRealmCache.CacheRecord extensionRecord = pluginRealms.get( pluginKey );
+ if ( extensionRecord != null )
+ {
+ return extensionRecord;
+ }
+
+ final List<RemoteRepository> repositories = project.getRemotePluginRepositories();
+
+ // resolve plugin version as necessary
+ if ( plugin.getVersion() == null )
+ {
+ PluginVersionRequest versionRequest = new DefaultPluginVersionRequest( plugin, session, repositories );
+ try
+ {
+ plugin.setVersion( pluginVersionResolver.resolve( versionRequest ).getVersion() );
+ }
+ catch ( PluginVersionResolutionException e )
+ {
+ throw new PluginManagerException( plugin, e.getMessage(), e );
+ }
+ }
+
+ // resolve plugin artifacts
+ List<Artifact> artifacts;
+ PluginArtifactsCache.Key cacheKey = pluginArtifactsCache.createKey( plugin, null, repositories, session );
+ PluginArtifactsCache.CacheRecord recordArtifacts;
+ try
+ {
+ recordArtifacts = pluginArtifactsCache.get( cacheKey );
+ }
+ catch ( PluginResolutionException e )
+ {
+ throw new PluginManagerException( plugin, e.getMessage(), e );
+ }
+ if ( recordArtifacts != null )
+ {
+ artifacts = recordArtifacts.artifacts;
+ }
+ else
+ {
+ try
+ {
+ artifacts = resolveExtensionArtifacts( plugin, repositories, session );
+ recordArtifacts = pluginArtifactsCache.put( cacheKey, artifacts );
+ }
+ catch ( PluginResolutionException e )
+ {
+ pluginArtifactsCache.put( cacheKey, e );
+ pluginArtifactsCache.register( project, cacheKey, recordArtifacts );
+ throw new PluginManagerException( plugin, e.getMessage(), e );
+ }
+ }
+ pluginArtifactsCache.register( project, cacheKey, recordArtifacts );
+
+ // create and cache extensions realms
+ final ExtensionRealmCache.Key extensionKey = extensionRealmCache.createKey( artifacts );
+ extensionRecord = extensionRealmCache.get( extensionKey );
+ if ( extensionRecord == null )
+ {
+ ClassRealm extensionRealm = classRealmManager.createExtensionRealm( plugin,
+ toAetherArtifacts( artifacts ) );
+
+ // TODO figure out how to use the same PluginDescriptor when running mojos
+
+ PluginDescriptor pluginDescriptor = null;
+ if ( plugin.isExtensions() && !artifacts.isEmpty() )
+ {
+ // ignore plugin descriptor parsing errors at this point
+ // these errors will reported during calculation of project build execution plan
+ try
+ {
+ pluginDescriptor = extractPluginDescriptor( artifacts.get( 0 ), plugin );
+ }
+ catch ( PluginDescriptorParsingException e )
+ {
+ // ignore, see above
+ }
+ catch ( InvalidPluginDescriptorException e )
+ {
+ // ignore, see above
+ }
+ }
+
+ discoverPluginComponents( extensionRealm, plugin, pluginDescriptor );
+
+ ExtensionDescriptor extensionDescriptor = null;
+ Artifact extensionArtifact = artifacts.get( 0 );
+ try
+ {
+ extensionDescriptor = extensionDescriptorBuilder.build( extensionArtifact.getFile() );
+ }
+ catch ( IOException e )
+ {
+ String message = "Invalid extension descriptor for " + plugin.getId() + ": " + e.getMessage();
+ if ( logger.isDebugEnabled() )
+ {
+ logger.error( message, e );
+ }
+ else
+ {
+ logger.error( message );
+ }
+ }
+ extensionRecord = extensionRealmCache.put( extensionKey, extensionRealm, extensionDescriptor, artifacts );
+ }
+ extensionRealmCache.register( project, extensionKey, extensionRecord );
+ pluginRealms.put( pluginKey, extensionRecord );
+
+ return extensionRecord;
+ }
+
+ private List<Artifact> resolveExtensionArtifacts( Plugin extensionPlugin, List<RemoteRepository> repositories,
+ RepositorySystemSession session )
+ throws PluginResolutionException
+ {
+ DependencyNode root = pluginDependenciesResolver.resolve( extensionPlugin, null, null, repositories, session );
+ PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
+ root.accept( nlg );
+ return toMavenArtifacts( root, nlg );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java
new file mode 100644
index 00000000..5b0c2712
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java
@@ -0,0 +1,256 @@
+package org.apache.maven.plugin.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.RequestTrace;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.collection.DependencyCollectionException;
+import org.eclipse.aether.collection.DependencyGraphTransformer;
+import org.eclipse.aether.collection.DependencySelector;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.graph.DependencyVisitor;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.ArtifactDescriptorException;
+import org.eclipse.aether.resolution.ArtifactDescriptorRequest;
+import org.eclipse.aether.resolution.ArtifactDescriptorResult;
+import org.eclipse.aether.resolution.ArtifactRequest;
+import org.eclipse.aether.resolution.ArtifactResolutionException;
+import org.eclipse.aether.resolution.DependencyRequest;
+import org.eclipse.aether.resolution.DependencyResolutionException;
+import org.eclipse.aether.util.artifact.JavaScopes;
+import org.eclipse.aether.util.filter.AndDependencyFilter;
+import org.eclipse.aether.util.filter.ScopeDependencyFilter;
+import org.eclipse.aether.util.graph.selector.AndDependencySelector;
+import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
+import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy;
+
+/**
+ * Assists in resolving the dependencies of a plugin. <strong>Warning:</strong> This is an internal utility class that
+ * is only public for technical reasons, it is not part of the public API. In particular, this class can be changed or
+ * deleted without prior notice.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+@Component( role = PluginDependenciesResolver.class )
+public class DefaultPluginDependenciesResolver
+ implements PluginDependenciesResolver
+{
+
+ private static final String REPOSITORY_CONTEXT = "plugin";
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private RepositorySystem repoSystem;
+
+ private Artifact toArtifact( Plugin plugin, RepositorySystemSession session )
+ {
+ return new DefaultArtifact( plugin.getGroupId(), plugin.getArtifactId(), null, "jar", plugin.getVersion(),
+ session.getArtifactTypeRegistry().get( "maven-plugin" ) );
+ }
+
+ public Artifact resolve( Plugin plugin, List<RemoteRepository> repositories, RepositorySystemSession session )
+ throws PluginResolutionException
+ {
+ RequestTrace trace = RequestTrace.newChild( null, plugin );
+
+ Artifact pluginArtifact = toArtifact( plugin, session );
+
+ try
+ {
+ DefaultRepositorySystemSession pluginSession = new DefaultRepositorySystemSession( session );
+ pluginSession.setArtifactDescriptorPolicy( new SimpleArtifactDescriptorPolicy( true, false ) );
+
+ ArtifactDescriptorRequest request =
+ new ArtifactDescriptorRequest( pluginArtifact, repositories, REPOSITORY_CONTEXT );
+ request.setTrace( trace );
+ ArtifactDescriptorResult result = repoSystem.readArtifactDescriptor( pluginSession, request );
+
+ pluginArtifact = result.getArtifact();
+
+ String requiredMavenVersion = (String) result.getProperties().get( "prerequisites.maven" );
+ if ( requiredMavenVersion != null )
+ {
+ Map<String, String> props = new LinkedHashMap<String, String>( pluginArtifact.getProperties() );
+ props.put( "requiredMavenVersion", requiredMavenVersion );
+ pluginArtifact = pluginArtifact.setProperties( props );
+ }
+ }
+ catch ( ArtifactDescriptorException e )
+ {
+ throw new PluginResolutionException( plugin, e );
+ }
+
+ try
+ {
+ ArtifactRequest request = new ArtifactRequest( pluginArtifact, repositories, REPOSITORY_CONTEXT );
+ request.setTrace( trace );
+ pluginArtifact = repoSystem.resolveArtifact( session, request ).getArtifact();
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ throw new PluginResolutionException( plugin, e );
+ }
+
+ return pluginArtifact;
+ }
+
+ /**
+ * @since 3.3.0
+ */
+ public DependencyNode resolveCoreExtension( Plugin plugin, DependencyFilter dependencyFilter,
+ List<RemoteRepository> repositories, RepositorySystemSession session )
+ throws PluginResolutionException
+ {
+ return resolveInternal( plugin, null /* pluginArtifact */, dependencyFilter, null /* transformer */,
+ repositories, session );
+ }
+
+ public DependencyNode resolve( Plugin plugin, Artifact pluginArtifact, DependencyFilter dependencyFilter,
+ List<RemoteRepository> repositories, RepositorySystemSession session )
+ throws PluginResolutionException
+ {
+ return resolveInternal( plugin, pluginArtifact, dependencyFilter, new PlexusUtilsInjector(), repositories,
+ session );
+ }
+
+ private DependencyNode resolveInternal( Plugin plugin, Artifact pluginArtifact, DependencyFilter dependencyFilter,
+ DependencyGraphTransformer transformer,
+ List<RemoteRepository> repositories, RepositorySystemSession session )
+ throws PluginResolutionException
+ {
+ RequestTrace trace = RequestTrace.newChild( null, plugin );
+
+ if ( pluginArtifact == null )
+ {
+ pluginArtifact = toArtifact( plugin, session );
+ }
+
+ DependencyFilter collectionFilter = new ScopeDependencyFilter( "provided", "test" );
+ DependencyFilter resolutionFilter = AndDependencyFilter.newInstance( collectionFilter, dependencyFilter );
+
+ DependencyNode node;
+
+ try
+ {
+ DependencySelector selector =
+ AndDependencySelector.newInstance( session.getDependencySelector(), new WagonExcluder() );
+
+ transformer =
+ ChainedDependencyGraphTransformer.newInstance( session.getDependencyGraphTransformer(), transformer );
+
+ DefaultRepositorySystemSession pluginSession = new DefaultRepositorySystemSession( session );
+ pluginSession.setDependencySelector( selector );
+ pluginSession.setDependencyGraphTransformer( transformer );
+
+ CollectRequest request = new CollectRequest();
+ request.setRequestContext( REPOSITORY_CONTEXT );
+ request.setRepositories( repositories );
+ request.setRoot( new org.eclipse.aether.graph.Dependency( pluginArtifact, null ) );
+ for ( Dependency dependency : plugin.getDependencies() )
+ {
+ org.eclipse.aether.graph.Dependency pluginDep =
+ RepositoryUtils.toDependency( dependency, session.getArtifactTypeRegistry() );
+ if ( !JavaScopes.SYSTEM.equals( pluginDep.getScope() ) )
+ {
+ pluginDep = pluginDep.setScope( JavaScopes.RUNTIME );
+ }
+ request.addDependency( pluginDep );
+ }
+
+ DependencyRequest depRequest = new DependencyRequest( request, resolutionFilter );
+ depRequest.setTrace( trace );
+
+ request.setTrace( RequestTrace.newChild( trace, depRequest ) );
+
+ node = repoSystem.collectDependencies( pluginSession, request ).getRoot();
+
+ if ( logger.isDebugEnabled() )
+ {
+ node.accept( new GraphLogger() );
+ }
+
+ depRequest.setRoot( node );
+ repoSystem.resolveDependencies( session, depRequest );
+ }
+ catch ( DependencyCollectionException e )
+ {
+ throw new PluginResolutionException( plugin, e );
+ }
+ catch ( DependencyResolutionException e )
+ {
+ throw new PluginResolutionException( plugin, e.getCause() );
+ }
+
+ return node;
+ }
+
+ class GraphLogger
+ implements DependencyVisitor
+ {
+
+ private String indent = "";
+
+ public boolean visitEnter( DependencyNode node )
+ {
+ StringBuilder buffer = new StringBuilder( 128 );
+ buffer.append( indent );
+ org.eclipse.aether.graph.Dependency dep = node.getDependency();
+ if ( dep != null )
+ {
+ Artifact art = dep.getArtifact();
+
+ buffer.append( art );
+ buffer.append( ':' ).append( dep.getScope() );
+ }
+
+ logger.debug( buffer.toString() );
+ indent += " ";
+ return true;
+ }
+
+ public boolean visitLeave( DependencyNode node )
+ {
+ indent = indent.substring( 0, indent.length() - 3 );
+ return true;
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java
new file mode 100644
index 00000000..015060f6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java
@@ -0,0 +1,261 @@
+package org.apache.maven.plugin.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Map;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.InvalidPluginException;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.plugin.MavenPluginManager;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.PluginConfigurationException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginManager;
+import org.apache.maven.plugin.PluginManagerException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.plugin.prefix.DefaultPluginPrefixRequest;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.prefix.PluginPrefixRequest;
+import org.apache.maven.plugin.prefix.PluginPrefixResolver;
+import org.apache.maven.plugin.prefix.PluginPrefixResult;
+import org.apache.maven.plugin.version.DefaultPluginVersionRequest;
+import org.apache.maven.plugin.version.PluginVersionNotFoundException;
+import org.apache.maven.plugin.version.PluginVersionRequest;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.plugin.version.PluginVersionResolver;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
+import org.apache.maven.settings.Settings;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+
+/**
+ * @author Benjamin Bentmann
+ */
+@Component( role = PluginManager.class )
+public class DefaultPluginManager
+ implements PluginManager
+{
+
+ @Requirement
+ private PlexusContainer container;
+
+ @Requirement
+ private MavenPluginManager pluginManager;
+
+ @Requirement
+ private PluginVersionResolver pluginVersionResolver;
+
+ @Requirement
+ private PluginPrefixResolver pluginPrefixResolver;
+
+ @Requirement
+ private LegacySupport legacySupport;
+
+ public void executeMojo( MavenProject project, MojoExecution execution, MavenSession session )
+ throws MojoExecutionException, ArtifactResolutionException, MojoFailureException, ArtifactNotFoundException,
+ InvalidDependencyVersionException, PluginManagerException, PluginConfigurationException
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public Object getPluginComponent( Plugin plugin, String role, String roleHint )
+ throws PluginManagerException, ComponentLookupException
+ {
+ MavenSession session = legacySupport.getSession();
+
+ PluginDescriptor pluginDescriptor;
+ try
+ {
+ pluginDescriptor =
+ pluginManager.getPluginDescriptor( plugin, session.getCurrentProject().getRemotePluginRepositories(),
+ session.getRepositorySession() );
+
+ pluginManager.setupPluginRealm( pluginDescriptor, session, null, null, null );
+ }
+ catch ( Exception e )
+ {
+ throw new PluginManagerException( plugin, e.getMessage(), e );
+ }
+
+ ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
+ try
+ {
+ Thread.currentThread().setContextClassLoader( pluginDescriptor.getClassRealm() );
+
+ return container.lookup( role, roleHint );
+ }
+ finally
+ {
+ Thread.currentThread().setContextClassLoader( oldClassLoader );
+ }
+ }
+
+ public Map getPluginComponents( Plugin plugin, String role )
+ throws ComponentLookupException, PluginManagerException
+ {
+ MavenSession session = legacySupport.getSession();
+
+ PluginDescriptor pluginDescriptor;
+ try
+ {
+ pluginDescriptor =
+ pluginManager.getPluginDescriptor( plugin, session.getCurrentProject().getRemotePluginRepositories(),
+ session.getRepositorySession() );
+
+ pluginManager.setupPluginRealm( pluginDescriptor, session, null, null, null );
+ }
+ catch ( Exception e )
+ {
+ throw new PluginManagerException( plugin, e.getMessage(), e );
+ }
+
+ ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
+ try
+ {
+ Thread.currentThread().setContextClassLoader( pluginDescriptor.getClassRealm() );
+
+ return container.lookupMap( role );
+ }
+ finally
+ {
+ Thread.currentThread().setContextClassLoader( oldClassLoader );
+ }
+ }
+
+ public Plugin getPluginDefinitionForPrefix( String prefix, MavenSession session, MavenProject project )
+ {
+ PluginPrefixRequest request = new DefaultPluginPrefixRequest( prefix, session );
+ request.setPom( project.getModel() );
+
+ try
+ {
+ PluginPrefixResult result = pluginPrefixResolver.resolve( request );
+
+ Plugin plugin = new Plugin();
+ plugin.setGroupId( result.getGroupId() );
+ plugin.setArtifactId( result.getArtifactId() );
+
+ return plugin;
+ }
+ catch ( NoPluginFoundForPrefixException e )
+ {
+ return null;
+ }
+ }
+
+ public PluginDescriptor getPluginDescriptorForPrefix( String prefix )
+ {
+ MavenSession session = legacySupport.getSession();
+
+ PluginPrefixRequest request = new DefaultPluginPrefixRequest( prefix, session );
+
+ try
+ {
+ PluginPrefixResult result = pluginPrefixResolver.resolve( request );
+
+ Plugin plugin = new Plugin();
+ plugin.setGroupId( result.getGroupId() );
+ plugin.setArtifactId( result.getArtifactId() );
+
+ return loadPluginDescriptor( plugin, session.getCurrentProject(), session );
+ }
+ catch ( Exception e )
+ {
+ return null;
+ }
+ }
+
+ public PluginDescriptor loadPluginDescriptor( Plugin plugin, MavenProject project, MavenSession session )
+ throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException,
+ InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException,
+ PluginVersionNotFoundException
+ {
+ return verifyPlugin( plugin, project, session.getSettings(), session.getLocalRepository() );
+ }
+
+ public PluginDescriptor loadPluginFully( Plugin plugin, MavenProject project, MavenSession session )
+ throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException,
+ InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException,
+ PluginVersionNotFoundException
+ {
+ PluginDescriptor pluginDescriptor = loadPluginDescriptor( plugin, project, session );
+
+ try
+ {
+ pluginManager.setupPluginRealm( pluginDescriptor, session, null, null, null );
+ }
+ catch ( PluginResolutionException e )
+ {
+ throw new PluginManagerException( plugin, e.getMessage(), e );
+ }
+
+ return pluginDescriptor;
+ }
+
+ public PluginDescriptor verifyPlugin( Plugin plugin, MavenProject project, Settings settings,
+ ArtifactRepository localRepository )
+ throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException,
+ InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException,
+ PluginVersionNotFoundException
+ {
+ MavenSession session = legacySupport.getSession();
+
+ if ( plugin.getVersion() == null )
+ {
+ PluginVersionRequest versionRequest =
+ new DefaultPluginVersionRequest( plugin, session.getRepositorySession(),
+ project.getRemotePluginRepositories() );
+ plugin.setVersion( pluginVersionResolver.resolve( versionRequest ).getVersion() );
+ }
+
+ try
+ {
+ return pluginManager.getPluginDescriptor( plugin, project.getRemotePluginRepositories(),
+ session.getRepositorySession() );
+ }
+ catch ( PluginResolutionException e )
+ {
+ throw new PluginNotFoundException( plugin, project.getPluginArtifactRepositories() );
+ }
+ catch ( PluginDescriptorParsingException e )
+ {
+ throw new PluginManagerException( plugin, e.getMessage(), e );
+ }
+ catch ( InvalidPluginDescriptorException e )
+ {
+ throw new PluginManagerException( plugin, e.getMessage(), e );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/PlexusUtilsInjector.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/PlexusUtilsInjector.java
new file mode 100644
index 00000000..16a0b63c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/PlexusUtilsInjector.java
@@ -0,0 +1,87 @@
+package org.apache.maven.plugin.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.eclipse.aether.RepositoryException;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.collection.DependencyGraphTransformationContext;
+import org.eclipse.aether.collection.DependencyGraphTransformer;
+import org.eclipse.aether.graph.DefaultDependencyNode;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.util.artifact.JavaScopes;
+
+/**
+ * Injects plexus-utils:1.1 into a plugin's class path if it doesn't already declare a dependency on plexus-utils. This
+ * is another legacy bit to provide backward-compat with Maven 2.x.
+ *
+ * @author Benjamin Bentmann
+ */
+class PlexusUtilsInjector
+ implements DependencyGraphTransformer
+{
+
+ private static final String GID = "org.codehaus.plexus";
+
+ private static final String AID = "plexus-utils";
+
+ private static final String VER = "1.1";
+
+ private static final String EXT = "jar";
+
+ public DependencyNode transformGraph( DependencyNode node, DependencyGraphTransformationContext context )
+ throws RepositoryException
+ {
+ if ( findPlexusUtils( node ) == null )
+ {
+ Artifact pu = new DefaultArtifact( GID, AID, null, EXT, VER );
+ DefaultDependencyNode child = new DefaultDependencyNode( new Dependency( pu, JavaScopes.RUNTIME ) );
+ child.setRepositories( node.getRepositories() );
+ child.setRequestContext( node.getRequestContext() );
+ node.getChildren().add( child );
+ }
+
+ return node;
+ }
+
+ private DependencyNode findPlexusUtils( DependencyNode node )
+ {
+ Artifact artifact = node.getDependency().getArtifact();
+
+ if ( AID.equals( artifact.getArtifactId() ) && GID.equals( artifact.getGroupId() )
+ && EXT.equals( artifact.getExtension() ) && "".equals( artifact.getClassifier() ) )
+ {
+ return node;
+ }
+
+ for ( DependencyNode child : node.getChildren() )
+ {
+ DependencyNode result = findPlexusUtils( child );
+ if ( result != null )
+ {
+ return result;
+ }
+ }
+
+ return null;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/PluginDependenciesResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/PluginDependenciesResolver.java
new file mode 100644
index 00000000..41942978
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/PluginDependenciesResolver.java
@@ -0,0 +1,71 @@
+package org.apache.maven.plugin.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * Assists in resolving the dependencies of a plugin. <strong>Warning:</strong> This is an internal utility interface
+ * that is only public for technical reasons, it is not part of the public API. In particular, this interface can be
+ * changed or deleted without prior notice.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+public interface PluginDependenciesResolver
+{
+
+ /**
+ * Resolves the main artifact of the specified plugin.
+ *
+ * @param plugin The plugin for which to resolve the main artifact, must not be {@code null}.
+ * @param repositories The plugin repositories to use for resolving the plugin's main artifact, must not be {@code
+ * null}.
+ * @param session The repository session to use for resolving the plugin's main artifact, must not be {@code null}.
+ * @return The resolved plugin artifact, never {@code null}.
+ * @throws PluginResolutionException If the plugin artifact could not be resolved.
+ */
+ Artifact resolve( Plugin plugin, List<RemoteRepository> repositories, RepositorySystemSession session )
+ throws PluginResolutionException;
+
+ /**
+ * Resolves the runtime dependencies of the specified plugin.
+ *
+ * @param plugin The plugin for which to resolve the dependencies, must not be {@code null}.
+ * @param pluginArtifact The plugin's main artifact, may be {@code null}.
+ * @param dependencyFilter A filter to exclude artifacts from resolution (but not collection), may be {@code null}.
+ * @param repositories The plugin repositories to use for resolving the plugin artifacts, must not be {@code null}.
+ * @param session The repository session to use for resolving the plugin artifacts, must not be {@code null}.
+ * @return The dependency tree denoting the resolved plugin class path, never {@code null}.
+ * @throws PluginResolutionException If any dependency could not be resolved.
+ */
+ DependencyNode resolve( Plugin plugin, Artifact pluginArtifact, DependencyFilter dependencyFilter,
+ List<RemoteRepository> repositories, RepositorySystemSession session )
+ throws PluginResolutionException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/PluginDependencyResolutionListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/PluginDependencyResolutionListener.java
new file mode 100644
index 00000000..533920a8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/PluginDependencyResolutionListener.java
@@ -0,0 +1,158 @@
+package org.apache.maven.plugin.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Map;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.resolver.ResolutionListener;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.versioning.VersionRange;
+
+/**
+ * Assists in detecting wagon providers brought into the plugin class path via legacy Maven core artifacts (e.g.
+ * maven-core:2.0.6) and excluding them. A plugin should be able to explicitly declare dependencies on specific wagons
+ * for its use. However, the (old) wagons pulled in transitively via legacy Maven core artifacts are usually not
+ * intended as dependencies and more importantly screw up artifact resolution because they would get preferred over the
+ * core wagon versions. This is a hack to provide backward-compat with Maven 2 (MNG-4528, MNG-4561).
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+class PluginDependencyResolutionListener
+ implements ResolutionListener
+{
+
+ private ArtifactFilter coreFilter;
+
+ private LinkedList<Artifact> coreArtifacts = new LinkedList<Artifact>();
+
+ private Artifact wagonProvider;
+
+ private Map<Artifact, Object> bannedArtifacts = new IdentityHashMap<Artifact, Object>();
+
+ public PluginDependencyResolutionListener( ArtifactFilter coreFilter )
+ {
+ this.coreFilter = coreFilter;
+ }
+
+ public void removeBannedDependencies( Collection<Artifact> artifacts )
+ {
+ if ( !bannedArtifacts.isEmpty() && artifacts != null )
+ {
+ for ( Iterator<Artifact> it = artifacts.iterator(); it.hasNext(); )
+ {
+ Artifact artifact = it.next();
+ if ( bannedArtifacts.containsKey( artifact ) )
+ {
+ it.remove();
+ }
+ }
+ }
+ }
+
+ public void startProcessChildren( Artifact artifact )
+ {
+ if ( wagonProvider == null )
+ {
+ if ( isLegacyCoreArtifact( artifact ) )
+ {
+ coreArtifacts.addFirst( artifact );
+ }
+ else if ( !coreArtifacts.isEmpty() && isWagonProvider( artifact ) )
+ {
+ wagonProvider = artifact;
+ bannedArtifacts.put( artifact, null );
+ }
+ }
+ }
+
+ private boolean isLegacyCoreArtifact( Artifact artifact )
+ {
+ String version = artifact.getVersion();
+ return version != null && version.startsWith( "2." ) && !coreFilter.include( artifact );
+ }
+
+ public void endProcessChildren( Artifact artifact )
+ {
+ if ( wagonProvider == artifact )
+ {
+ wagonProvider = null;
+ }
+ else if ( coreArtifacts.peek() == artifact )
+ {
+ coreArtifacts.removeFirst();
+ }
+ }
+
+ public void includeArtifact( Artifact artifact )
+ {
+ if ( wagonProvider != null )
+ {
+ bannedArtifacts.put( artifact, null );
+ }
+ }
+
+ private boolean isWagonProvider( Artifact artifact )
+ {
+ if ( "org.apache.maven.wagon".equals( artifact.getGroupId() ) )
+ {
+ return artifact.getArtifactId().startsWith( "wagon-" );
+ }
+ return false;
+ }
+
+ public void manageArtifact( Artifact artifact, Artifact replacement )
+ {
+ }
+
+ public void omitForCycle( Artifact artifact )
+ {
+ }
+
+ public void omitForNearer( Artifact omitted, Artifact kept )
+ {
+ }
+
+ public void restrictRange( Artifact artifact, Artifact replacement, VersionRange newRange )
+ {
+ }
+
+ public void selectVersionFromRange( Artifact artifact )
+ {
+ }
+
+ public void testArtifact( Artifact node )
+ {
+ }
+
+ public void updateScope( Artifact artifact, String scope )
+ {
+ }
+
+ public void updateScopeCurrentPom( Artifact artifact, String ignoredScope )
+ {
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/ValidatingConfigurationListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/ValidatingConfigurationListener.java
new file mode 100644
index 00000000..706694b8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/ValidatingConfigurationListener.java
@@ -0,0 +1,97 @@
+package org.apache.maven.plugin.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.Parameter;
+import org.codehaus.plexus.component.configurator.ConfigurationListener;
+
+/**
+ * A configuration listener to help validate the plugin configuration. For instance, check for required but missing
+ * parameters.
+ *
+ * @author Benjamin Bentmann
+ */
+class ValidatingConfigurationListener
+ implements ConfigurationListener
+{
+
+ private final Object mojo;
+
+ private final ConfigurationListener delegate;
+
+ private final Map<String, Parameter> missingParameters;
+
+ public ValidatingConfigurationListener( Object mojo, MojoDescriptor mojoDescriptor, ConfigurationListener delegate )
+ {
+ this.mojo = mojo;
+ this.delegate = delegate;
+ this.missingParameters = new HashMap<String, Parameter>();
+
+ if ( mojoDescriptor.getParameters() != null )
+ {
+ for ( Parameter param : mojoDescriptor.getParameters() )
+ {
+ if ( param.isRequired() )
+ {
+ missingParameters.put( param.getName(), param );
+ }
+ }
+ }
+ }
+
+ public Collection<Parameter> getMissingParameters()
+ {
+ return missingParameters.values();
+ }
+
+ public void notifyFieldChangeUsingSetter( String fieldName, Object value, Object target )
+ {
+ delegate.notifyFieldChangeUsingSetter( fieldName, value, target );
+
+ if ( mojo == target )
+ {
+ notify( fieldName, value );
+ }
+ }
+
+ public void notifyFieldChangeUsingReflection( String fieldName, Object value, Object target )
+ {
+ delegate.notifyFieldChangeUsingReflection( fieldName, value, target );
+
+ if ( mojo == target )
+ {
+ notify( fieldName, value );
+ }
+ }
+
+ private void notify( String fieldName, Object value )
+ {
+ if ( value != null )
+ {
+ missingParameters.remove( fieldName );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/WagonExcluder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/WagonExcluder.java
new file mode 100644
index 00000000..43e8cfc4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/WagonExcluder.java
@@ -0,0 +1,109 @@
+package org.apache.maven.plugin.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.collection.DependencyCollectionContext;
+import org.eclipse.aether.collection.DependencySelector;
+import org.eclipse.aether.graph.Dependency;
+
+/**
+ * Assists in detecting wagon providers brought into the plugin class path via legacy Maven core artifacts (e.g.
+ * maven-core:2.0.6) and excluding them. A plugin should be able to explicitly declare dependencies on specific wagons
+ * for its use. However, the (old) wagons pulled in transitively via legacy Maven core artifacts are usually not
+ * intended as dependencies and more importantly screw up artifact resolution because they would get preferred over the
+ * core wagon versions. This is a hack to provide backward-compat with Maven 2 (MNG-4528, MNG-4561).
+ *
+ * @author Benjamin Bentmann
+ */
+class WagonExcluder
+ implements DependencySelector
+{
+
+ private final boolean coreArtifact;
+
+ public WagonExcluder()
+ {
+ this( false );
+ }
+
+ private WagonExcluder( boolean coreArtifact )
+ {
+ this.coreArtifact = coreArtifact;
+ }
+
+ public boolean selectDependency( Dependency dependency )
+ {
+ return !coreArtifact || !isWagonProvider( dependency.getArtifact() );
+ }
+
+ public DependencySelector deriveChildSelector( DependencyCollectionContext context )
+ {
+ if ( coreArtifact || !isLegacyCoreArtifact( context.getDependency().getArtifact() ) )
+ {
+ return this;
+ }
+ else
+ {
+ return new WagonExcluder( true );
+ }
+ }
+
+ private boolean isLegacyCoreArtifact( Artifact artifact )
+ {
+ String version = artifact.getVersion();
+ return version != null && version.startsWith( "2." ) && artifact.getArtifactId().startsWith( "maven-" )
+ && artifact.getGroupId().equals( "org.apache.maven" );
+ }
+
+ private boolean isWagonProvider( Artifact artifact )
+ {
+ if ( "org.apache.maven.wagon".equals( artifact.getGroupId() ) )
+ {
+ return artifact.getArtifactId().startsWith( "wagon-" );
+ }
+ return false;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( obj == this )
+ {
+ return true;
+ }
+ else if ( obj == null || !getClass().equals( obj.getClass() ) )
+ {
+ return false;
+ }
+
+ WagonExcluder that = (WagonExcluder) obj;
+ return coreArtifact == that.coreArtifact;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int hash = getClass().hashCode();
+ hash = hash * 31 + ( coreArtifact ? 1 : 0 );
+ return hash;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/DefaultPluginPrefixRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/DefaultPluginPrefixRequest.java
new file mode 100644
index 00000000..7ab86cfd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/DefaultPluginPrefixRequest.java
@@ -0,0 +1,156 @@
+package org.apache.maven.plugin.prefix;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Model;
+import org.apache.maven.project.MavenProject;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * Collects settings required to resolve a plugin prefix.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+public class DefaultPluginPrefixRequest
+ implements PluginPrefixRequest
+{
+
+ private String prefix;
+
+ private List<String> pluginGroups = Collections.emptyList();
+
+ private Model pom;
+
+ private List<RemoteRepository> repositories = Collections.emptyList();
+
+ private RepositorySystemSession session;
+
+ /**
+ * Creates an empty request.
+ */
+ public DefaultPluginPrefixRequest()
+ {
+ }
+
+ /**
+ * Creates a request for the specified plugin prefix and build session. The provided build session will be used to
+ * configure repository settings. If the session has a current project, its plugin repositories and model will be
+ * used as well.
+ *
+ * @param prefix The plugin prefix to resolve, must not be {@code null}.
+ * @param session The build session from which to derive further settings, must not be {@code null}.
+ */
+ public DefaultPluginPrefixRequest( String prefix, MavenSession session )
+ {
+ setPrefix( prefix );
+
+ setRepositorySession( session.getRepositorySession() );
+
+ MavenProject project = session.getCurrentProject();
+ if ( project != null )
+ {
+ setRepositories( project.getRemotePluginRepositories() );
+ setPom( project.getModel() );
+ }
+
+ setPluginGroups( session.getPluginGroups() );
+ }
+
+ public String getPrefix()
+ {
+ return prefix;
+ }
+
+ public DefaultPluginPrefixRequest setPrefix( String prefix )
+ {
+ this.prefix = prefix;
+
+ return this;
+ }
+
+ public List<String> getPluginGroups()
+ {
+ return pluginGroups;
+ }
+
+ public DefaultPluginPrefixRequest setPluginGroups( List<String> pluginGroups )
+ {
+ if ( pluginGroups != null )
+ {
+ this.pluginGroups = pluginGroups;
+ }
+ else
+ {
+ this.pluginGroups = Collections.emptyList();
+ }
+
+ return this;
+ }
+
+ public Model getPom()
+ {
+ return pom;
+ }
+
+ public DefaultPluginPrefixRequest setPom( Model pom )
+ {
+ this.pom = pom;
+
+ return this;
+ }
+
+ public List<RemoteRepository> getRepositories()
+ {
+ return repositories;
+ }
+
+ public DefaultPluginPrefixRequest setRepositories( List<RemoteRepository> repositories )
+ {
+ if ( repositories != null )
+ {
+ this.repositories = repositories;
+ }
+ else
+ {
+ this.repositories = Collections.emptyList();
+ }
+
+ return this;
+ }
+
+ public RepositorySystemSession getRepositorySession()
+ {
+ return session;
+ }
+
+ public DefaultPluginPrefixRequest setRepositorySession( RepositorySystemSession session )
+ {
+ this.session = session;
+
+ return this;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/NoPluginFoundForPrefixException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/NoPluginFoundForPrefixException.java
new file mode 100644
index 00000000..32870217
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/NoPluginFoundForPrefixException.java
@@ -0,0 +1,65 @@
+package org.apache.maven.plugin.prefix;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.RemoteRepository;
+
+public class NoPluginFoundForPrefixException
+ extends Exception
+{
+
+ public NoPluginFoundForPrefixException( String prefix, List<String> pluginGroups, LocalRepository localRepository,
+ List<RemoteRepository> remoteRepositories )
+ {
+ super( "No plugin found for prefix '" + prefix + "' in the current project and in the plugin groups "
+ + pluginGroups + " available from the repositories " + format( localRepository, remoteRepositories ) );
+ }
+
+ private static String format( LocalRepository localRepository, List<RemoteRepository> remoteRepositories )
+ {
+ String repos = "[";
+
+ if ( localRepository != null )
+ {
+ repos += localRepository.getId() + " (" + localRepository.getBasedir() + ")";
+ }
+
+ if ( remoteRepositories != null && !remoteRepositories.isEmpty() )
+ {
+ for ( RemoteRepository repository : remoteRepositories )
+ {
+ repos += ", ";
+
+ if ( repository != null )
+ {
+ repos += repository.getId() + " (" + repository.getUrl() + ")";
+ }
+ }
+ }
+
+ repos += "]";
+
+ return repos;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixRequest.java
new file mode 100644
index 00000000..23df66ee
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixRequest.java
@@ -0,0 +1,115 @@
+package org.apache.maven.plugin.prefix;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.model.Model;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * Collects settings required to resolve a plugin prefix.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+public interface PluginPrefixRequest
+{
+
+ /**
+ * Gets the prefix of the plugin.
+ *
+ * @return The prefix of the plugin.
+ */
+ String getPrefix();
+
+ /**
+ * Sets the prefix of the plugin.
+ *
+ * @param prefix The prefix of the plugin.
+ * @return This request, never {@code null}.
+ */
+ PluginPrefixRequest setPrefix( String prefix );
+
+ /**
+ * Gets the list of group ids to scan for the plugin prefix.
+ *
+ * @return The list of group ids to scan for the plugin prefix, never {@code null}.
+ */
+ List<String> getPluginGroups();
+
+ /**
+ * Sets the list of group ids to scan for the plugin prefix.
+ *
+ * @param pluginGroups The list of group ids to scan for the plugin prefix, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ PluginPrefixRequest setPluginGroups( List<String> pluginGroups );
+
+ /**
+ * Gets the POM whose build plugins are to be scanned for the prefix.
+ *
+ * @return The POM whose build plugins are to be scanned for the prefix or {@code null} to only search the plugin
+ * repositories.
+ */
+ Model getPom();
+
+ /**
+ * Sets the POM whose build plugins are to be scanned for the prefix.
+ *
+ * @param pom The POM whose build plugins are to be scanned for the prefix, may be {@code null} to only search the
+ * plugin repositories.
+ * @return This request, never {@code null}.
+ */
+ PluginPrefixRequest setPom( Model pom );
+
+ /**
+ * Gets the remote repositories to use.
+ *
+ * @return The remote repositories to use, never {@code null}.
+ */
+ List<RemoteRepository> getRepositories();
+
+ /**
+ * Sets the remote repositories to use. <em>Note:</em> When creating a request from a project, be sure to use the
+ * plugin repositories and not the regular project repositories.
+ *
+ * @param repositories The remote repositories to use.
+ * @return This request, never {@code null}.
+ */
+ PluginPrefixRequest setRepositories( List<RemoteRepository> repositories );
+
+ /**
+ * Gets the session to use for repository access.
+ *
+ * @return The repository session or {@code null} if not set.
+ */
+ RepositorySystemSession getRepositorySession();
+
+ /**
+ * Sets the session to use for repository access.
+ *
+ * @param repositorySession The repository session to use.
+ * @return This request, never {@code null}.
+ */
+ PluginPrefixRequest setRepositorySession( RepositorySystemSession repositorySession );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixResolver.java
new file mode 100644
index 00000000..943e6833
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixResolver.java
@@ -0,0 +1,42 @@
+package org.apache.maven.plugin.prefix;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Resolves a plugin prefix.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+public interface PluginPrefixResolver
+{
+
+ /**
+ * Resolves the plugin prefix for the specified request.
+ *
+ * @param request The request that holds the details about the plugin and the repositories to consult, must not be
+ * {@code null}.
+ * @return The result of the prefix resolution, never {@code null}.
+ * @throws NoPluginFoundForPrefixException If the plugin prefix could not be resolved.
+ */
+ PluginPrefixResult resolve( PluginPrefixRequest request )
+ throws NoPluginFoundForPrefixException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixResult.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixResult.java
new file mode 100644
index 00000000..8fe1a71a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixResult.java
@@ -0,0 +1,55 @@
+package org.apache.maven.plugin.prefix;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.eclipse.aether.repository.ArtifactRepository;
+
+/**
+ * Describes the result of a plugin prefix resolution request.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+public interface PluginPrefixResult
+{
+
+ /**
+ * The resolved group id for the plugin.
+ *
+ * @return The resolved group id for the plugin, never {@code null}.
+ */
+ String getGroupId();
+
+ /**
+ * The resolved artifact id for the plugin.
+ *
+ * @return The resolved artifact id for the plugin, never {@code null}.
+ */
+ String getArtifactId();
+
+ /**
+ * The repository from which the plugin prefix was resolved.
+ *
+ * @return The repository from which the plugin prefix was resolved or {@code null} if the prefix was resolved from
+ * the supplied POM.
+ */
+ ArtifactRepository getRepository();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java
new file mode 100644
index 00000000..8d2ad0f7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java
@@ -0,0 +1,294 @@
+package org.apache.maven.plugin.prefix.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.repository.metadata.io.MetadataReader;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.BuildPluginManager;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.prefix.PluginPrefixRequest;
+import org.apache.maven.plugin.prefix.PluginPrefixResolver;
+import org.apache.maven.plugin.prefix.PluginPrefixResult;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.eclipse.aether.RepositoryEvent.EventType;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositoryEvent;
+import org.eclipse.aether.RepositoryListener;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.RequestTrace;
+import org.eclipse.aether.metadata.DefaultMetadata;
+import org.eclipse.aether.repository.ArtifactRepository;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.repository.RepositoryPolicy;
+import org.eclipse.aether.resolution.MetadataRequest;
+import org.eclipse.aether.resolution.MetadataResult;
+
+/**
+ * Resolves a plugin prefix.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+@Component( role = PluginPrefixResolver.class )
+public class DefaultPluginPrefixResolver
+ implements PluginPrefixResolver
+{
+
+ private static final String REPOSITORY_CONTEXT = "plugin";
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private BuildPluginManager pluginManager;
+
+ @Requirement
+ private RepositorySystem repositorySystem;
+
+ @Requirement
+ private MetadataReader metadataReader;
+
+ public PluginPrefixResult resolve( PluginPrefixRequest request )
+ throws NoPluginFoundForPrefixException
+ {
+ logger.debug( "Resolving plugin prefix " + request.getPrefix() + " from " + request.getPluginGroups() );
+
+ PluginPrefixResult result = resolveFromProject( request );
+
+ if ( result == null )
+ {
+ result = resolveFromRepository( request );
+
+ if ( result == null )
+ {
+ throw new NoPluginFoundForPrefixException( request.getPrefix(), request.getPluginGroups(),
+ request.getRepositorySession().getLocalRepository(),
+ request.getRepositories() );
+ }
+ else if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Resolved plugin prefix " + request.getPrefix() + " to " + result.getGroupId() + ":"
+ + result.getArtifactId() + " from repository "
+ + ( result.getRepository() != null ? result.getRepository().getId() : "null" ) );
+ }
+ }
+ else if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Resolved plugin prefix " + request.getPrefix() + " to " + result.getGroupId() + ":"
+ + result.getArtifactId() + " from POM " + request.getPom() );
+ }
+
+ return result;
+ }
+
+ private PluginPrefixResult resolveFromProject( PluginPrefixRequest request )
+ {
+ PluginPrefixResult result = null;
+
+ if ( request.getPom() != null && request.getPom().getBuild() != null )
+ {
+ Build build = request.getPom().getBuild();
+
+ result = resolveFromProject( request, build.getPlugins() );
+
+ if ( result == null && build.getPluginManagement() != null )
+ {
+ result = resolveFromProject( request, build.getPluginManagement().getPlugins() );
+ }
+ }
+
+ return result;
+ }
+
+ private PluginPrefixResult resolveFromProject( PluginPrefixRequest request, List<Plugin> plugins )
+ {
+ for ( Plugin plugin : plugins )
+ {
+ try
+ {
+ PluginDescriptor pluginDescriptor =
+ pluginManager.loadPlugin( plugin, request.getRepositories(), request.getRepositorySession() );
+
+ if ( request.getPrefix().equals( pluginDescriptor.getGoalPrefix() ) )
+ {
+ return new DefaultPluginPrefixResult( plugin );
+ }
+ }
+ catch ( Exception e )
+ {
+ if ( logger.isDebugEnabled() )
+ {
+ logger.warn( "Failed to retrieve plugin descriptor for " + plugin.getId() + ": " + e.getMessage(),
+ e );
+ }
+ else
+ {
+ logger.warn( "Failed to retrieve plugin descriptor for " + plugin.getId() + ": " + e.getMessage() );
+ }
+ }
+ }
+
+ return null;
+ }
+
+ private PluginPrefixResult resolveFromRepository( PluginPrefixRequest request )
+ {
+ RequestTrace trace = RequestTrace.newChild( null, request );
+
+ List<MetadataRequest> requests = new ArrayList<MetadataRequest>();
+
+ for ( String pluginGroup : request.getPluginGroups() )
+ {
+ org.eclipse.aether.metadata.Metadata metadata =
+ new DefaultMetadata( pluginGroup, "maven-metadata.xml", DefaultMetadata.Nature.RELEASE_OR_SNAPSHOT );
+
+ requests.add( new MetadataRequest( metadata, null, REPOSITORY_CONTEXT ).setTrace( trace ) );
+
+ for ( RemoteRepository repository : request.getRepositories() )
+ {
+ requests.add( new MetadataRequest( metadata, repository, REPOSITORY_CONTEXT ).setTrace( trace ) );
+ }
+ }
+
+ // initial try, use locally cached metadata
+
+ List<MetadataResult> results = repositorySystem.resolveMetadata( request.getRepositorySession(), requests );
+ requests.clear();
+
+ PluginPrefixResult result = processResults( request, trace, results, requests );
+
+ if ( result != null )
+ {
+ return result;
+ }
+
+ // second try, refetch all (possibly outdated) metadata that wasn't updated in the first attempt
+
+ if ( !request.getRepositorySession().isOffline() && !requests.isEmpty() )
+ {
+ DefaultRepositorySystemSession session =
+ new DefaultRepositorySystemSession( request.getRepositorySession() );
+ session.setUpdatePolicy( RepositoryPolicy.UPDATE_POLICY_ALWAYS );
+
+ results = repositorySystem.resolveMetadata( session, requests );
+
+ return processResults( request, trace, results, null );
+ }
+
+ return null;
+ }
+
+ private PluginPrefixResult processResults( PluginPrefixRequest request, RequestTrace trace,
+ List<MetadataResult> results, List<MetadataRequest> requests )
+ {
+ for ( MetadataResult res : results )
+ {
+ org.eclipse.aether.metadata.Metadata metadata = res.getMetadata();
+
+ if ( metadata != null )
+ {
+ ArtifactRepository repository = res.getRequest().getRepository();
+ if ( repository == null )
+ {
+ repository = request.getRepositorySession().getLocalRepository();
+ }
+
+ PluginPrefixResult result =
+ resolveFromRepository( request, trace, metadata.getGroupId(), metadata, repository );
+
+ if ( result != null )
+ {
+ return result;
+ }
+ }
+
+ if ( requests != null && !res.isUpdated() )
+ {
+ requests.add( res.getRequest() );
+ }
+ }
+
+ return null;
+ }
+
+ private PluginPrefixResult resolveFromRepository( PluginPrefixRequest request, RequestTrace trace,
+ String pluginGroup,
+ org.eclipse.aether.metadata.Metadata metadata,
+ ArtifactRepository repository )
+ {
+ if ( metadata != null && metadata.getFile() != null && metadata.getFile().isFile() )
+ {
+ try
+ {
+ Map<String, ?> options = Collections.singletonMap( MetadataReader.IS_STRICT, Boolean.FALSE );
+
+ Metadata pluginGroupMetadata = metadataReader.read( metadata.getFile(), options );
+
+ List<org.apache.maven.artifact.repository.metadata.Plugin> plugins = pluginGroupMetadata.getPlugins();
+
+ if ( plugins != null )
+ {
+ for ( org.apache.maven.artifact.repository.metadata.Plugin plugin : plugins )
+ {
+ if ( request.getPrefix().equals( plugin.getPrefix() ) )
+ {
+ return new DefaultPluginPrefixResult( pluginGroup, plugin.getArtifactId(), repository );
+ }
+ }
+ }
+ }
+ catch ( IOException e )
+ {
+ invalidMetadata( request.getRepositorySession(), trace, metadata, repository, e );
+ }
+ }
+
+ return null;
+ }
+
+ private void invalidMetadata( RepositorySystemSession session, RequestTrace trace,
+ org.eclipse.aether.metadata.Metadata metadata, ArtifactRepository repository,
+ Exception exception )
+ {
+ RepositoryListener listener = session.getRepositoryListener();
+ if ( listener != null )
+ {
+ RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.METADATA_INVALID );
+ event.setTrace( trace );
+ event.setMetadata( metadata );
+ event.setException( exception );
+ event.setRepository( repository );
+ listener.metadataInvalid( event.build() );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResult.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResult.java
new file mode 100644
index 00000000..6a248bff
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResult.java
@@ -0,0 +1,90 @@
+package org.apache.maven.plugin.prefix.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.prefix.PluginPrefixResult;
+import org.eclipse.aether.repository.ArtifactRepository;
+
+/**
+ * Describes the result of a plugin prefix resolution request.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+class DefaultPluginPrefixResult
+ implements PluginPrefixResult
+{
+
+ private String groupId;
+
+ private String artifactId;
+
+ private ArtifactRepository repository;
+
+ public DefaultPluginPrefixResult()
+ {
+ // does nothing
+ }
+
+ public DefaultPluginPrefixResult( Plugin plugin )
+ {
+ groupId = plugin.getGroupId();
+ artifactId = plugin.getArtifactId();
+ }
+
+ public DefaultPluginPrefixResult( String groupId, String artifactId, ArtifactRepository repository )
+ {
+ this.groupId = groupId;
+ this.artifactId = artifactId;
+ this.repository = repository;
+ }
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public void setGroupId( String groupId )
+ {
+ this.groupId = groupId;
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ public void setArtifactId( String artifactId )
+ {
+ this.artifactId = artifactId;
+ }
+
+ public ArtifactRepository getRepository()
+ {
+ return repository;
+ }
+
+ public void setRepository( ArtifactRepository repository )
+ {
+ this.repository = repository;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionRequest.java
new file mode 100644
index 00000000..9907066b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionRequest.java
@@ -0,0 +1,165 @@
+package org.apache.maven.plugin.version;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.project.MavenProject;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * Collects settings required to resolve the version for a plugin.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+public class DefaultPluginVersionRequest
+ implements PluginVersionRequest
+{
+
+ private String groupId;
+
+ private String artifactId;
+
+ private Model pom;
+
+ private List<RemoteRepository> repositories = Collections.emptyList();
+
+ private RepositorySystemSession session;
+
+ /**
+ * Creates an empty request.
+ */
+ public DefaultPluginVersionRequest()
+ {
+ }
+
+ /**
+ * Creates a request for the specified plugin by copying settings from the specified build session. If the session
+ * has a current project, its plugin repositories will be used as well.
+ *
+ * @param plugin The plugin for which to resolve a version, must not be {@code null}.
+ * @param session The Maven session to use, must not be {@code null}.
+ */
+ public DefaultPluginVersionRequest( Plugin plugin, MavenSession session )
+ {
+ setGroupId( plugin.getGroupId() );
+ setArtifactId( plugin.getArtifactId() );
+
+ setRepositorySession( session.getRepositorySession() );
+
+ MavenProject project = session.getCurrentProject();
+ if ( project != null )
+ {
+ setRepositories( project.getRemotePluginRepositories() );
+ }
+ }
+
+ /**
+ * Creates a request for the specified plugin using the given repository session and plugin repositories.
+ *
+ * @param plugin The plugin for which to resolve a version, must not be {@code null}.
+ * @param session The repository session to use, must not be {@code null}.
+ * @param repositories The plugin repositories to query, may be {@code null}.
+ */
+ public DefaultPluginVersionRequest( Plugin plugin, RepositorySystemSession session,
+ List<RemoteRepository> repositories )
+ {
+ setGroupId( plugin.getGroupId() );
+ setArtifactId( plugin.getArtifactId() );
+
+ setRepositorySession( session );
+
+ setRepositories( repositories );
+ }
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public DefaultPluginVersionRequest setGroupId( String groupId )
+ {
+ this.groupId = groupId;
+
+ return this;
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ public DefaultPluginVersionRequest setArtifactId( String artifactId )
+ {
+ this.artifactId = artifactId;
+
+ return this;
+ }
+
+ public Model getPom()
+ {
+ return pom;
+ }
+
+ public DefaultPluginVersionRequest setPom( Model pom )
+ {
+ this.pom = pom;
+
+ return this;
+ }
+
+ public List<RemoteRepository> getRepositories()
+ {
+ return repositories;
+ }
+
+ public DefaultPluginVersionRequest setRepositories( List<RemoteRepository> repositories )
+ {
+ if ( repositories != null )
+ {
+ this.repositories = repositories;
+ }
+ else
+ {
+ this.repositories = Collections.emptyList();
+ }
+
+ return this;
+ }
+
+ public RepositorySystemSession getRepositorySession()
+ {
+ return session;
+ }
+
+ public DefaultPluginVersionRequest setRepositorySession( RepositorySystemSession session )
+ {
+ this.session = session;
+
+ return this;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionNotFoundException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionNotFoundException.java
new file mode 100644
index 00000000..b5539be0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionNotFoundException.java
@@ -0,0 +1,47 @@
+package org.apache.maven.plugin.version;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public class PluginVersionNotFoundException
+ extends Exception
+{
+ private final String groupId;
+
+ private final String artifactId;
+
+ public PluginVersionNotFoundException( String groupId, String artifactId )
+ {
+ super( "The plugin \'" + groupId + ":" + artifactId + "\' does not exist or no valid version could be found" );
+
+ this.groupId = groupId;
+ this.artifactId = artifactId;
+ }
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionRequest.java
new file mode 100644
index 00000000..b22f9e1d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionRequest.java
@@ -0,0 +1,115 @@
+package org.apache.maven.plugin.version;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.model.Model;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * Collects settings required to resolve the version for a plugin.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+public interface PluginVersionRequest
+{
+
+ /**
+ * Gets the group id of the plugin.
+ *
+ * @return The group id of the plugin.
+ */
+ String getGroupId();
+
+ /**
+ * Sets the group id of the plugin.
+ *
+ * @param groupId The group id of the plugin.
+ * @return This request, never {@code null}.
+ */
+ PluginVersionRequest setGroupId( String groupId );
+
+ /**
+ * Gets the artifact id of the plugin.
+ *
+ * @return The artifact id of the plugin.
+ */
+ String getArtifactId();
+
+ /**
+ * Sets the artifact id of the plugin.
+ *
+ * @param artifactId The artifact id of the plugin.
+ * @return This request, never {@code null}.
+ */
+ PluginVersionRequest setArtifactId( String artifactId );
+
+ /**
+ * Gets the POM whose build plugins are to be scanned for the version.
+ *
+ * @return The POM whose build plugins are to be scanned for the verion or {@code null} to only search the plugin
+ * repositories.
+ */
+ Model getPom();
+
+ /**
+ * Sets the POM whose build plugins are to be scanned for the version.
+ *
+ * @param pom The POM whose build plugins are to be scanned for the version, may be {@code null} to only search the
+ * plugin repositories.
+ * @return This request, never {@code null}.
+ */
+ PluginVersionRequest setPom( Model pom );
+
+ /**
+ * Gets the remote repositories to use.
+ *
+ * @return The remote repositories to use, never {@code null}.
+ */
+ List<RemoteRepository> getRepositories();
+
+ /**
+ * Sets the remote repositories to use. <em>Note:</em> When creating a request from a project, be sure to use the
+ * plugin repositories and not the regular project repositories.
+ *
+ * @param repositories The remote repositories to use.
+ * @return This request, never {@code null}.
+ */
+ PluginVersionRequest setRepositories( List<RemoteRepository> repositories );
+
+ /**
+ * Gets the session to use for repository access.
+ *
+ * @return The repository session or {@code null} if not set.
+ */
+ RepositorySystemSession getRepositorySession();
+
+ /**
+ * Sets the session to use for repository access.
+ *
+ * @param repositorySession The repository session to use.
+ * @return This request, never {@code null}.
+ */
+ PluginVersionRequest setRepositorySession( RepositorySystemSession repositorySession );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolutionException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolutionException.java
new file mode 100644
index 00000000..84ec0967
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolutionException.java
@@ -0,0 +1,107 @@
+package org.apache.maven.plugin.version;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.RemoteRepository;
+
+public class PluginVersionResolutionException
+ extends Exception
+{
+ private final String groupId;
+
+ private final String artifactId;
+
+ private final String baseMessage;
+
+ public PluginVersionResolutionException( String groupId, String artifactId, String baseMessage, Throwable cause )
+ {
+ super( "Error resolving version for plugin \'" + groupId + ":" + artifactId + "\': " + baseMessage, cause );
+
+ this.groupId = groupId;
+ this.artifactId = artifactId;
+ this.baseMessage = baseMessage;
+ }
+
+ public PluginVersionResolutionException( String groupId, String artifactId, String baseMessage )
+ {
+ super( "Error resolving version for plugin \'" + groupId + ":" + artifactId + "\': " + baseMessage );
+
+ this.groupId = groupId;
+ this.artifactId = artifactId;
+ this.baseMessage = baseMessage;
+ }
+
+ public PluginVersionResolutionException( String groupId, String artifactId, LocalRepository localRepository,
+ List<RemoteRepository> remoteRepositories, String baseMessage )
+ {
+ super( "Error resolving version for plugin \'" + groupId + ":" + artifactId + "\' from the repositories "
+ + format( localRepository, remoteRepositories ) + ": " + baseMessage );
+
+ this.groupId = groupId;
+ this.artifactId = artifactId;
+ this.baseMessage = baseMessage;
+ }
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ public String getBaseMessage()
+ {
+ return baseMessage;
+ }
+
+ private static String format( LocalRepository localRepository, List<RemoteRepository> remoteRepositories )
+ {
+ String repos = "[";
+
+ if ( localRepository != null )
+ {
+ repos += localRepository.getId() + " (" + localRepository.getBasedir() + ")";
+ }
+
+ if ( remoteRepositories != null && !remoteRepositories.isEmpty() )
+ {
+ for ( RemoteRepository repository : remoteRepositories )
+ {
+ repos += ", ";
+
+ if ( repository != null )
+ {
+ repos += repository.getId() + " (" + repository.getUrl() + ")";
+ }
+ }
+ }
+
+ repos += "]";
+
+ return repos;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolver.java
new file mode 100644
index 00000000..935fdfc5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolver.java
@@ -0,0 +1,42 @@
+package org.apache.maven.plugin.version;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Resolves a version for a plugin.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+public interface PluginVersionResolver
+{
+
+ /**
+ * Resolves the version for the specified request.
+ *
+ * @param request The request that holds the details about the plugin and the repositories to consult, must not be
+ * {@code null}.
+ * @return The result of the version resolution, never {@code null}.
+ * @throws PluginVersionResolutionException If the plugin version could not be resolved.
+ */
+ PluginVersionResult resolve( PluginVersionRequest request )
+ throws PluginVersionResolutionException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResult.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResult.java
new file mode 100644
index 00000000..09a69e96
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResult.java
@@ -0,0 +1,47 @@
+package org.apache.maven.plugin.version;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.eclipse.aether.repository.ArtifactRepository;
+
+/**
+ * Describes the result of a plugin version resolution request.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+public interface PluginVersionResult
+{
+
+ /**
+ * The resolved plugin version.
+ *
+ * @return The resolved plugin version, never {@code null}.
+ */
+ String getVersion();
+
+ /**
+ * The repository from which the plugin version was resolved.
+ *
+ * @return The repository from which the plugin version was resolved, never {@code null}.
+ */
+ ArtifactRepository getRepository();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
new file mode 100644
index 00000000..76b6bfd6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
@@ -0,0 +1,408 @@
+package org.apache.maven.plugin.version.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeSet;
+
+import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.repository.metadata.Versioning;
+import org.apache.maven.artifact.repository.metadata.io.MetadataReader;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.MavenPluginManager;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.plugin.version.PluginVersionRequest;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.plugin.version.PluginVersionResolver;
+import org.apache.maven.plugin.version.PluginVersionResult;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.StringUtils;
+import org.eclipse.aether.RepositoryEvent.EventType;
+import org.eclipse.aether.RepositoryEvent;
+import org.eclipse.aether.RepositoryListener;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.RequestTrace;
+import org.eclipse.aether.metadata.DefaultMetadata;
+import org.eclipse.aether.repository.ArtifactRepository;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.MetadataRequest;
+import org.eclipse.aether.resolution.MetadataResult;
+import org.eclipse.aether.util.version.GenericVersionScheme;
+import org.eclipse.aether.version.InvalidVersionSpecificationException;
+import org.eclipse.aether.version.Version;
+import org.eclipse.aether.version.VersionScheme;
+
+/**
+ * Resolves a version for a plugin.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+@Component( role = PluginVersionResolver.class )
+public class DefaultPluginVersionResolver
+ implements PluginVersionResolver
+{
+
+ private static final String REPOSITORY_CONTEXT = "plugin";
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private RepositorySystem repositorySystem;
+
+ @Requirement
+ private MetadataReader metadataReader;
+
+ @Requirement
+ private MavenPluginManager pluginManager;
+
+ public PluginVersionResult resolve( PluginVersionRequest request )
+ throws PluginVersionResolutionException
+ {
+ logger.debug( "Resolving plugin version for " + request.getGroupId() + ":" + request.getArtifactId() );
+
+ PluginVersionResult result = resolveFromProject( request );
+
+ if ( result == null )
+ {
+ result = resolveFromRepository( request );
+
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Resolved plugin version for " + request.getGroupId() + ":" + request.getArtifactId()
+ + " to " + result.getVersion() + " from repository " + result.getRepository() );
+ }
+ }
+ else if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Resolved plugin version for " + request.getGroupId() + ":" + request.getArtifactId()
+ + " to " + result.getVersion() + " from POM " + request.getPom() );
+ }
+
+ return result;
+ }
+
+ private PluginVersionResult resolveFromRepository( PluginVersionRequest request )
+ throws PluginVersionResolutionException
+ {
+ RequestTrace trace = RequestTrace.newChild( null, request );
+
+ DefaultPluginVersionResult result = new DefaultPluginVersionResult();
+
+ org.eclipse.aether.metadata.Metadata metadata =
+ new DefaultMetadata( request.getGroupId(), request.getArtifactId(), "maven-metadata.xml",
+ DefaultMetadata.Nature.RELEASE_OR_SNAPSHOT );
+
+ List<MetadataRequest> requests = new ArrayList<MetadataRequest>();
+
+ requests.add( new MetadataRequest( metadata, null, REPOSITORY_CONTEXT ).setTrace( trace ) );
+
+ for ( RemoteRepository repository : request.getRepositories() )
+ {
+ requests.add( new MetadataRequest( metadata, repository, REPOSITORY_CONTEXT ).setTrace( trace ) );
+ }
+
+ List<MetadataResult> results = repositorySystem.resolveMetadata( request.getRepositorySession(), requests );
+
+ Versions versions = new Versions();
+
+ for ( MetadataResult res : results )
+ {
+ ArtifactRepository repository = res.getRequest().getRepository();
+ if ( repository == null )
+ {
+ repository = request.getRepositorySession().getLocalRepository();
+ }
+
+ mergeMetadata( request.getRepositorySession(), trace, versions, res.getMetadata(), repository );
+ }
+
+ selectVersion( result, request, versions );
+
+ return result;
+ }
+
+ private void selectVersion( DefaultPluginVersionResult result, PluginVersionRequest request, Versions versions )
+ throws PluginVersionResolutionException
+ {
+ String version = null;
+ ArtifactRepository repo = null;
+
+ if ( StringUtils.isNotEmpty( versions.releaseVersion ) )
+ {
+ version = versions.releaseVersion;
+ repo = versions.releaseRepository;
+ }
+ else if ( StringUtils.isNotEmpty( versions.latestVersion ) )
+ {
+ version = versions.latestVersion;
+ repo = versions.latestRepository;
+ }
+ if ( version != null && !isCompatible( request, version ) )
+ {
+ versions.versions.remove( version );
+ version = null;
+ }
+
+ if ( version == null )
+ {
+ VersionScheme versionScheme = new GenericVersionScheme();
+
+ TreeSet<Version> releases = new TreeSet<Version>( Collections.reverseOrder() );
+ TreeSet<Version> snapshots = new TreeSet<Version>( Collections.reverseOrder() );
+
+ for ( String ver : versions.versions.keySet() )
+ {
+ try
+ {
+ Version v = versionScheme.parseVersion( ver );
+
+ if ( ver.endsWith( "-SNAPSHOT" ) )
+ {
+ snapshots.add( v );
+ }
+ else
+ {
+ releases.add( v );
+ }
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ // ignore
+ }
+ }
+
+ for ( Version v : releases )
+ {
+ String ver = v.toString();
+ if ( isCompatible( request, ver ) )
+ {
+ version = ver;
+ repo = versions.versions.get( version );
+ break;
+ }
+ }
+
+ if ( version == null )
+ {
+ for ( Version v : snapshots )
+ {
+ String ver = v.toString();
+ if ( isCompatible( request, ver ) )
+ {
+ version = ver;
+ repo = versions.versions.get( version );
+ break;
+ }
+ }
+ }
+ }
+
+ if ( version != null )
+ {
+ result.setVersion( version );
+ result.setRepository( repo );
+ }
+ else
+ {
+ throw new PluginVersionResolutionException( request.getGroupId(), request.getArtifactId(),
+ request.getRepositorySession().getLocalRepository(),
+ request.getRepositories(),
+ "Plugin not found in any plugin repository" );
+ }
+ }
+
+ private boolean isCompatible( PluginVersionRequest request, String version )
+ {
+ Plugin plugin = new Plugin();
+ plugin.setGroupId( request.getGroupId() );
+ plugin.setArtifactId( request.getArtifactId() );
+ plugin.setVersion( version );
+
+ PluginDescriptor pluginDescriptor;
+
+ try
+ {
+ pluginDescriptor =
+ pluginManager.getPluginDescriptor( plugin, request.getRepositories(), request.getRepositorySession() );
+ }
+ catch ( PluginResolutionException e )
+ {
+ logger.debug( "Ignoring unresolvable plugin version " + version, e );
+ return false;
+ }
+ catch ( Exception e )
+ {
+ // ignore for now and delay failure to higher level processing
+ return true;
+ }
+
+ try
+ {
+ pluginManager.checkRequiredMavenVersion( pluginDescriptor );
+ }
+ catch ( Exception e )
+ {
+ logger.debug( "Ignoring incompatible plugin version " + version + ": " + e.getMessage() );
+ return false;
+ }
+
+ return true;
+ }
+
+ private void mergeMetadata( RepositorySystemSession session, RequestTrace trace, Versions versions,
+ org.eclipse.aether.metadata.Metadata metadata, ArtifactRepository repository )
+ {
+ if ( metadata != null && metadata.getFile() != null && metadata.getFile().isFile() )
+ {
+ try
+ {
+ Map<String, ?> options = Collections.singletonMap( MetadataReader.IS_STRICT, Boolean.FALSE );
+
+ Metadata repoMetadata = metadataReader.read( metadata.getFile(), options );
+
+ mergeMetadata( versions, repoMetadata, repository );
+ }
+ catch ( IOException e )
+ {
+ invalidMetadata( session, trace, metadata, repository, e );
+ }
+ }
+ }
+
+ private void invalidMetadata( RepositorySystemSession session, RequestTrace trace,
+ org.eclipse.aether.metadata.Metadata metadata, ArtifactRepository repository,
+ Exception exception )
+ {
+ RepositoryListener listener = session.getRepositoryListener();
+ if ( listener != null )
+ {
+ RepositoryEvent.Builder event = new RepositoryEvent.Builder( session, EventType.METADATA_INVALID );
+ event.setTrace( trace );
+ event.setMetadata( metadata );
+ event.setException( exception );
+ event.setRepository( repository );
+ listener.metadataInvalid( event.build() );
+ }
+ }
+
+ private void mergeMetadata( Versions versions, Metadata source, ArtifactRepository repository )
+ {
+ Versioning versioning = source.getVersioning();
+ if ( versioning != null )
+ {
+ String timestamp = StringUtils.clean( versioning.getLastUpdated() );
+
+ if ( StringUtils.isNotEmpty( versioning.getRelease() )
+ && timestamp.compareTo( versions.releaseTimestamp ) > 0 )
+ {
+ versions.releaseVersion = versioning.getRelease();
+ versions.releaseTimestamp = timestamp;
+ versions.releaseRepository = repository;
+ }
+
+ if ( StringUtils.isNotEmpty( versioning.getLatest() )
+ && timestamp.compareTo( versions.latestTimestamp ) > 0 )
+ {
+ versions.latestVersion = versioning.getLatest();
+ versions.latestTimestamp = timestamp;
+ versions.latestRepository = repository;
+ }
+
+ for ( String version : versioning.getVersions() )
+ {
+ if ( !versions.versions.containsKey( version ) )
+ {
+ versions.versions.put( version, repository );
+ }
+ }
+ }
+ }
+
+ private PluginVersionResult resolveFromProject( PluginVersionRequest request )
+ {
+ PluginVersionResult result = null;
+
+ if ( request.getPom() != null && request.getPom().getBuild() != null )
+ {
+ Build build = request.getPom().getBuild();
+
+ result = resolveFromProject( request, build.getPlugins() );
+
+ if ( result == null && build.getPluginManagement() != null )
+ {
+ result = resolveFromProject( request, build.getPluginManagement().getPlugins() );
+ }
+ }
+
+ return result;
+ }
+
+ private PluginVersionResult resolveFromProject( PluginVersionRequest request, List<Plugin> plugins )
+ {
+ for ( Plugin plugin : plugins )
+ {
+ if ( request.getGroupId().equals( plugin.getGroupId() )
+ && request.getArtifactId().equals( plugin.getArtifactId() ) )
+ {
+ if ( plugin.getVersion() != null )
+ {
+ return new DefaultPluginVersionResult( plugin.getVersion() );
+ }
+ else
+ {
+ return null;
+ }
+ }
+ }
+ return null;
+ }
+
+ static class Versions
+ {
+
+ String releaseVersion = "";
+
+ String releaseTimestamp = "";
+
+ ArtifactRepository releaseRepository;
+
+ String latestVersion = "";
+
+ String latestTimestamp = "";
+
+ ArtifactRepository latestRepository;
+
+ Map<String, ArtifactRepository> versions = new LinkedHashMap<String, ArtifactRepository>();
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResult.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResult.java
new file mode 100644
index 00000000..9027a532
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResult.java
@@ -0,0 +1,69 @@
+package org.apache.maven.plugin.version.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugin.version.PluginVersionResult;
+import org.eclipse.aether.repository.ArtifactRepository;
+
+/**
+ * Describes the result of a plugin version resolution request.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+class DefaultPluginVersionResult
+ implements PluginVersionResult
+{
+
+ private String version;
+
+ private ArtifactRepository repository;
+
+ public DefaultPluginVersionResult()
+ {
+ // does nothing
+ }
+
+ public DefaultPluginVersionResult( String version )
+ {
+ this.version = version;
+ }
+
+ public String getVersion()
+ {
+ return version;
+ }
+
+ public void setVersion( String version )
+ {
+ this.version = version;
+ }
+
+ public ArtifactRepository getRepository()
+ {
+ return repository;
+ }
+
+ public void setRepository( ArtifactRepository repository )
+ {
+ this.repository = repository;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionRequest.java
new file mode 100644
index 00000000..cf5b0d70
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionRequest.java
@@ -0,0 +1,82 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.graph.DependencyFilter;
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class DefaultDependencyResolutionRequest
+ implements DependencyResolutionRequest
+{
+
+ private MavenProject project;
+
+ private DependencyFilter filter;
+
+ private RepositorySystemSession session;
+
+ public DefaultDependencyResolutionRequest()
+ {
+ // enables default constructor
+ }
+
+ public DefaultDependencyResolutionRequest( MavenProject project, RepositorySystemSession session )
+ {
+ setMavenProject( project );
+ setRepositorySession( session );
+ }
+
+ public DependencyFilter getResolutionFilter()
+ {
+ return filter;
+ }
+
+ public MavenProject getMavenProject()
+ {
+ return project;
+ }
+
+ public RepositorySystemSession getRepositorySession()
+ {
+ return session;
+ }
+
+ public DependencyResolutionRequest setResolutionFilter( DependencyFilter filter )
+ {
+ this.filter = filter;
+ return this;
+ }
+
+ public DependencyResolutionRequest setMavenProject( MavenProject project )
+ {
+ this.project = project;
+ return this;
+ }
+
+ public DependencyResolutionRequest setRepositorySession( RepositorySystemSession repositorySession )
+ {
+ this.session = repositorySession;
+ return this;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionResult.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionResult.java
new file mode 100644
index 00000000..07c6a2f9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionResult.java
@@ -0,0 +1,111 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.IdentityHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.DependencyNode;
+
+/**
+ * @author Benjamin Bentmann
+ */
+class DefaultDependencyResolutionResult
+ implements DependencyResolutionResult
+{
+
+ private DependencyNode root;
+
+ private List<Dependency> dependencies = new ArrayList<Dependency>();
+
+ private List<Dependency> resolvedDependencies = new ArrayList<Dependency>();
+
+ private List<Dependency> unresolvedDependencies = new ArrayList<Dependency>();
+
+ private List<Exception> collectionErrors = new ArrayList<Exception>();
+
+ private Map<Dependency, List<Exception>> resolutionErrors = new IdentityHashMap<Dependency, List<Exception>>();
+
+ public DependencyNode getDependencyGraph()
+ {
+ return root;
+ }
+
+ public void setDependencyGraph( DependencyNode root )
+ {
+ this.root = root;
+ }
+
+ public List<Dependency> getDependencies()
+ {
+ return dependencies;
+ }
+
+ public List<Dependency> getResolvedDependencies()
+ {
+ return resolvedDependencies;
+ }
+
+ public void addResolvedDependency( Dependency dependency )
+ {
+ dependencies.add( dependency );
+ resolvedDependencies.add( dependency );
+ }
+
+ public List<Dependency> getUnresolvedDependencies()
+ {
+ return unresolvedDependencies;
+ }
+
+ public List<Exception> getCollectionErrors()
+ {
+ return collectionErrors;
+ }
+
+ public void setCollectionErrors( List<Exception> exceptions )
+ {
+ if ( exceptions != null )
+ {
+ this.collectionErrors = exceptions;
+ }
+ else
+ {
+ this.collectionErrors = new ArrayList<Exception>();
+ }
+ }
+
+ public List<Exception> getResolutionErrors( Dependency dependency )
+ {
+ List<Exception> errors = resolutionErrors.get( dependency );
+ return ( errors != null ) ? errors : Collections.<Exception>emptyList();
+ }
+
+ public void setResolutionErrors( Dependency dependency, List<Exception> errors )
+ {
+ dependencies.add( dependency );
+ unresolvedDependencies.add( dependency );
+ resolutionErrors.put( dependency, errors );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectHelper.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectHelper.java
new file mode 100644
index 00000000..2cce9f6a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectHelper.java
@@ -0,0 +1,128 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.model.Resource;
+import org.apache.maven.project.artifact.AttachedArtifact;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+
+@SuppressWarnings( "deprecation" )
+@Component( role = MavenProjectHelper.class )
+public class DefaultMavenProjectHelper
+ extends AbstractLogEnabled
+ implements MavenProjectHelper
+{
+ @Requirement
+ private ArtifactHandlerManager artifactHandlerManager;
+
+ public void attachArtifact( MavenProject project, String artifactType, String artifactClassifier,
+ File artifactFile )
+ {
+ String type = artifactType;
+
+ ArtifactHandler handler = null;
+
+ if ( type != null )
+ {
+ handler = artifactHandlerManager.getArtifactHandler( artifactType );
+ }
+
+ if ( handler == null )
+ {
+ handler = artifactHandlerManager.getArtifactHandler( "jar" );
+ }
+
+ Artifact artifact = new AttachedArtifact( project.getArtifact(), artifactType, artifactClassifier, handler );
+
+ artifact.setFile( artifactFile );
+ artifact.setResolved( true );
+
+ attachArtifact( project, artifact );
+ }
+
+ public void attachArtifact( MavenProject project, String artifactType, File artifactFile )
+ {
+ ArtifactHandler handler = artifactHandlerManager.getArtifactHandler( artifactType );
+
+ Artifact artifact = new AttachedArtifact( project.getArtifact(), artifactType, handler );
+
+ artifact.setFile( artifactFile );
+ artifact.setResolved( true );
+
+ attachArtifact( project, artifact );
+ }
+
+ public void attachArtifact( MavenProject project, File artifactFile, String artifactClassifier )
+ {
+ Artifact projectArtifact = project.getArtifact();
+
+ Artifact artifact =
+ new AttachedArtifact( projectArtifact, projectArtifact.getType(), artifactClassifier,
+ projectArtifact.getArtifactHandler() );
+
+ artifact.setFile( artifactFile );
+ artifact.setResolved( true );
+
+ attachArtifact( project, artifact );
+ }
+
+ /**
+ * Add an attached artifact or replace the file for an existing artifact.
+ *
+ * @see MavenProject#addAttachedArtifact(org.apache.maven.artifact.Artifact)
+ * @param project project reference.
+ * @param artifact artifact to add or replace.
+ */
+ public void attachArtifact( MavenProject project, Artifact artifact )
+ {
+ project.addAttachedArtifact( artifact );
+ }
+
+ public void addResource( MavenProject project, String resourceDirectory, List<String> includes,
+ List<String> excludes )
+ {
+ Resource resource = new Resource();
+ resource.setDirectory( resourceDirectory );
+ resource.setIncludes( includes );
+ resource.setExcludes( excludes );
+
+ project.addResource( resource );
+ }
+
+ public void addTestResource( MavenProject project, String resourceDirectory, List<String> includes,
+ List<String> excludes )
+ {
+ Resource resource = new Resource();
+ resource.setDirectory( resourceDirectory );
+ resource.setIncludes( includes );
+ resource.setExcludes( excludes );
+
+ project.addTestResource( resource );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java
new file mode 100644
index 00000000..a5365621
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java
@@ -0,0 +1,155 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.AbstractModelBuildingListener;
+import org.apache.maven.model.building.ModelBuildingEvent;
+import org.apache.maven.model.building.ModelProblem.Severity;
+import org.apache.maven.model.building.ModelProblem.Version;
+import org.apache.maven.model.building.ModelProblemCollectorRequest;
+import org.apache.maven.plugin.PluginManagerException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+
+/**
+ * Processes events from the model builder while building the effective model for a {@link MavenProject} instance.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DefaultModelBuildingListener
+ extends AbstractModelBuildingListener
+{
+
+ private MavenProject project;
+
+ private ProjectBuildingHelper projectBuildingHelper;
+
+ private ProjectBuildingRequest projectBuildingRequest;
+
+ private List<ArtifactRepository> remoteRepositories;
+
+ private List<ArtifactRepository> pluginRepositories;
+
+ public DefaultModelBuildingListener( MavenProject project, ProjectBuildingHelper projectBuildingHelper,
+ ProjectBuildingRequest projectBuildingRequest )
+ {
+ if ( project == null )
+ {
+ throw new IllegalArgumentException( "project missing" );
+ }
+ this.project = project;
+
+ if ( projectBuildingHelper == null )
+ {
+ throw new IllegalArgumentException( "project building helper missing" );
+ }
+ this.projectBuildingHelper = projectBuildingHelper;
+
+ if ( projectBuildingRequest == null )
+ {
+ throw new IllegalArgumentException( "project building request missing" );
+ }
+ this.projectBuildingRequest = projectBuildingRequest;
+ this.remoteRepositories = projectBuildingRequest.getRemoteRepositories();
+ this.pluginRepositories = projectBuildingRequest.getPluginArtifactRepositories();
+ }
+
+ /**
+ * Gets the project whose model is being built.
+ *
+ * @return The project, never {@code null}.
+ */
+ public MavenProject getProject()
+ {
+ return project;
+ }
+
+ @Override
+ public void buildExtensionsAssembled( ModelBuildingEvent event )
+ {
+ Model model = event.getModel();
+
+ try
+ {
+ pluginRepositories =
+ projectBuildingHelper.createArtifactRepositories( model.getPluginRepositories(), pluginRepositories,
+ projectBuildingRequest );
+ }
+ catch ( Exception e )
+ {
+ event.getProblems().add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( "Invalid plugin repository: " + e.getMessage() )
+ .setException( e ) );
+ }
+ project.setPluginArtifactRepositories( pluginRepositories );
+
+ if ( event.getRequest().isProcessPlugins() )
+ {
+ try
+ {
+ ProjectRealmCache.CacheRecord record =
+ projectBuildingHelper.createProjectRealm( project, model, projectBuildingRequest );
+
+ project.setClassRealm( record.realm );
+ project.setExtensionDependencyFilter( record.extensionArtifactFilter );
+ }
+ catch ( PluginResolutionException e )
+ {
+ event.getProblems().add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( "Unresolveable build extension: " + e.getMessage() )
+ .setException( e ) );
+ }
+ catch ( PluginVersionResolutionException e )
+ {
+ event.getProblems().add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( "Unresolveable build extension: " + e.getMessage() )
+ .setException( e ) );
+ }
+ catch ( PluginManagerException e )
+ {
+ event.getProblems().add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( "Unresolveable build extension: " + e.getMessage() )
+ .setException( e ) );
+ }
+
+ projectBuildingHelper.selectProjectRealm( project );
+ }
+
+ // build the regular repos after extensions are loaded to allow for custom layouts
+ try
+ {
+ remoteRepositories =
+ projectBuildingHelper.createArtifactRepositories( model.getRepositories(), remoteRepositories,
+ projectBuildingRequest );
+ }
+ catch ( Exception e )
+ {
+ event.getProblems().add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( "Invalid artifact repository: " + e.getMessage() )
+ .setException( e ) );
+ }
+ project.setRemoteArtifactRepositories( remoteRepositories );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
new file mode 100644
index 00000000..99edc802
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
@@ -0,0 +1,929 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.LegacyLocalRepositoryManager;
+import org.apache.maven.bridge.MavenRepositorySystem;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.DeploymentRepository;
+import org.apache.maven.model.Extension;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.building.DefaultModelBuildingRequest;
+import org.apache.maven.model.building.DefaultModelProblem;
+import org.apache.maven.model.building.FileModelSource;
+import org.apache.maven.model.building.ModelBuilder;
+import org.apache.maven.model.building.ModelBuildingException;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelBuildingResult;
+import org.apache.maven.model.building.ModelProblem;
+import org.apache.maven.model.building.ModelProcessor;
+import org.apache.maven.model.building.ModelSource;
+import org.apache.maven.model.building.StringModelSource;
+import org.apache.maven.model.resolution.ModelResolver;
+import org.apache.maven.repository.internal.ArtifactDescriptorUtils;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.Os;
+import org.codehaus.plexus.util.StringUtils;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.RequestTrace;
+import org.eclipse.aether.impl.RemoteRepositoryManager;
+import org.eclipse.aether.repository.LocalRepositoryManager;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.repository.WorkspaceRepository;
+import org.eclipse.aether.resolution.ArtifactRequest;
+import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.resolution.VersionRangeRequest;
+import org.eclipse.aether.resolution.VersionRangeResolutionException;
+import org.eclipse.aether.resolution.VersionRangeResult;
+
+/**
+ */
+@Component( role = ProjectBuilder.class )
+public class DefaultProjectBuilder
+ implements ProjectBuilder
+{
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private ModelBuilder modelBuilder;
+
+ @Requirement
+ private ModelProcessor modelProcessor;
+
+ @Requirement
+ private ProjectBuildingHelper projectBuildingHelper;
+
+ @Requirement
+ private MavenRepositorySystem repositorySystem;
+
+ @Requirement
+ private org.eclipse.aether.RepositorySystem repoSystem;
+
+ @Requirement
+ private RemoteRepositoryManager repositoryManager;
+
+ @Requirement
+ private ProjectDependenciesResolver dependencyResolver;
+
+ // ----------------------------------------------------------------------
+ // MavenProjectBuilder Implementation
+ // ----------------------------------------------------------------------
+
+ @Override
+ public ProjectBuildingResult build( File pomFile, ProjectBuildingRequest request )
+ throws ProjectBuildingException
+ {
+ return build( pomFile, new FileModelSource( pomFile ), new InternalConfig( request, null ) );
+ }
+
+ @Override
+ public ProjectBuildingResult build( ModelSource modelSource, ProjectBuildingRequest request )
+ throws ProjectBuildingException
+ {
+ return build( null, modelSource, new InternalConfig( request, null ) );
+ }
+
+ private ProjectBuildingResult build( File pomFile, ModelSource modelSource, InternalConfig config )
+ throws ProjectBuildingException
+ {
+ ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
+
+ try
+ {
+ ProjectBuildingRequest projectBuildingRequest = config.request;
+
+ MavenProject project = projectBuildingRequest.getProject();
+
+ List<ModelProblem> modelProblems = null;
+ Throwable error = null;
+
+ if ( project == null )
+ {
+ ModelBuildingRequest request = getModelBuildingRequest( config );
+
+ project = new MavenProject();
+ project.setFile( pomFile );
+
+ DefaultModelBuildingListener listener =
+ new DefaultModelBuildingListener( project, projectBuildingHelper, projectBuildingRequest );
+ request.setModelBuildingListener( listener );
+
+ request.setPomFile( pomFile );
+ request.setModelSource( modelSource );
+ request.setLocationTracking( true );
+
+ ModelBuildingResult result;
+ try
+ {
+ result = modelBuilder.build( request );
+ }
+ catch ( ModelBuildingException e )
+ {
+ result = e.getResult();
+ if ( result == null || result.getEffectiveModel() == null )
+ {
+ throw new ProjectBuildingException( e.getModelId(), e.getMessage(), pomFile, e );
+ }
+ // validation error, continue project building and delay failing to help IDEs
+ error = e;
+ }
+
+ modelProblems = result.getProblems();
+
+ initProject( project, Collections.<String, MavenProject>emptyMap(), result,
+ new HashMap<File, Boolean>(), projectBuildingRequest );
+ }
+ else if ( projectBuildingRequest.isResolveDependencies() )
+ {
+ projectBuildingHelper.selectProjectRealm( project );
+ }
+
+ DependencyResolutionResult resolutionResult = null;
+
+ if ( projectBuildingRequest.isResolveDependencies() )
+ {
+ resolutionResult = resolveDependencies( project, config.session );
+ }
+
+ ProjectBuildingResult result = new DefaultProjectBuildingResult( project, modelProblems, resolutionResult );
+
+ if ( error != null )
+ {
+ ProjectBuildingException e = new ProjectBuildingException( Arrays.asList( result ) );
+ e.initCause( error );
+ throw e;
+ }
+
+ return result;
+ }
+ finally
+ {
+ Thread.currentThread().setContextClassLoader( oldContextClassLoader );
+ }
+ }
+
+ private DependencyResolutionResult resolveDependencies( MavenProject project, RepositorySystemSession session )
+ {
+ DependencyResolutionResult resolutionResult;
+
+ try
+ {
+ DefaultDependencyResolutionRequest resolution = new DefaultDependencyResolutionRequest( project, session );
+ resolutionResult = dependencyResolver.resolve( resolution );
+ }
+ catch ( DependencyResolutionException e )
+ {
+ resolutionResult = e.getResult();
+ }
+
+ Set<Artifact> artifacts = new LinkedHashSet<Artifact>();
+ if ( resolutionResult.getDependencyGraph() != null )
+ {
+ RepositoryUtils.toArtifacts( artifacts, resolutionResult.getDependencyGraph().getChildren(),
+ Collections.singletonList( project.getArtifact().getId() ), null );
+
+ // Maven 2.x quirk: an artifact always points at the local repo, regardless whether resolved or not
+ LocalRepositoryManager lrm = session.getLocalRepositoryManager();
+ for ( Artifact artifact : artifacts )
+ {
+ if ( !artifact.isResolved() )
+ {
+ String path = lrm.getPathForLocalArtifact( RepositoryUtils.toArtifact( artifact ) );
+ artifact.setFile( new File( lrm.getRepository().getBasedir(), path ) );
+ }
+ }
+ }
+ project.setResolvedArtifacts( artifacts );
+ project.setArtifacts( artifacts );
+
+ return resolutionResult;
+ }
+
+ private List<String> getProfileIds( List<Profile> profiles )
+ {
+ List<String> ids = new ArrayList<String>( profiles.size() );
+
+ for ( Profile profile : profiles )
+ {
+ ids.add( profile.getId() );
+ }
+
+ return ids;
+ }
+
+ private ModelBuildingRequest getModelBuildingRequest( InternalConfig config )
+ {
+ ProjectBuildingRequest configuration = config.request;
+
+ ModelBuildingRequest request = new DefaultModelBuildingRequest();
+
+ RequestTrace trace = RequestTrace.newChild( null, configuration ).newChild( request );
+
+ ModelResolver resolver =
+ new ProjectModelResolver( config.session, trace, repoSystem, repositoryManager, config.repositories,
+ configuration.getRepositoryMerging(), config.modelPool );
+
+ request.setValidationLevel( configuration.getValidationLevel() );
+ request.setProcessPlugins( configuration.isProcessPlugins() );
+ request.setProfiles( configuration.getProfiles() );
+ request.setActiveProfileIds( configuration.getActiveProfileIds() );
+ request.setInactiveProfileIds( configuration.getInactiveProfileIds() );
+ request.setSystemProperties( configuration.getSystemProperties() );
+ request.setUserProperties( configuration.getUserProperties() );
+ request.setBuildStartTime( configuration.getBuildStartTime() );
+ request.setModelResolver( resolver );
+ request.setModelCache( new ReactorModelCache() );
+
+ return request;
+ }
+
+ @Override
+ public ProjectBuildingResult build( Artifact artifact, ProjectBuildingRequest request )
+ throws ProjectBuildingException
+ {
+ return build( artifact, false, request );
+ }
+
+ @Override
+ public ProjectBuildingResult build( Artifact artifact, boolean allowStubModel, ProjectBuildingRequest request )
+ throws ProjectBuildingException
+ {
+ org.eclipse.aether.artifact.Artifact pomArtifact = RepositoryUtils.toArtifact( artifact );
+ pomArtifact = ArtifactDescriptorUtils.toPomArtifact( pomArtifact );
+
+ InternalConfig config = new InternalConfig( request, null );
+
+ boolean localProject;
+
+ if ( request.isResolveVersionRanges() )
+ {
+ VersionRangeRequest versionRangeRequest = new VersionRangeRequest( pomArtifact, config.repositories, null );
+
+ try
+ {
+ VersionRangeResult versionRangeResult =
+ repoSystem.resolveVersionRange( config.session, versionRangeRequest );
+
+ if ( versionRangeResult.getHighestVersion() == null )
+ {
+ throw new ProjectBuildingException(
+ artifact.getId(), "Error resolving project artifact: No versions matched the requested range",
+ (Throwable) null );
+
+ }
+
+ if ( versionRangeResult.getVersionConstraint() != null
+ && versionRangeResult.getVersionConstraint().getRange() != null
+ && versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null )
+ {
+ throw new ProjectBuildingException(
+ artifact.getId(),
+ "Error resolving project artifact: The requested version range does not specify an upper bound",
+ (Throwable) null );
+
+ }
+
+ pomArtifact = pomArtifact.setVersion( versionRangeResult.getHighestVersion().toString() );
+ }
+ catch ( VersionRangeResolutionException e )
+ {
+ throw new ProjectBuildingException(
+ artifact.getId(), "Error resolving project artifact: " + e.getMessage(), e );
+
+ }
+ }
+
+ try
+ {
+ ArtifactRequest pomRequest = new ArtifactRequest();
+ pomRequest.setArtifact( pomArtifact );
+ pomRequest.setRepositories( config.repositories );
+ ArtifactResult pomResult = repoSystem.resolveArtifact( config.session, pomRequest );
+
+ pomArtifact = pomResult.getArtifact();
+ localProject = pomResult.getRepository() instanceof WorkspaceRepository;
+ }
+ catch ( org.eclipse.aether.resolution.ArtifactResolutionException e )
+ {
+ if ( e.getResults().get( 0 ).isMissing() && allowStubModel )
+ {
+ return build( null, createStubModelSource( artifact ), config );
+ }
+ throw new ProjectBuildingException( artifact.getId(),
+ "Error resolving project artifact: " + e.getMessage(), e );
+ }
+
+ File pomFile = pomArtifact.getFile();
+
+ if ( "pom".equals( artifact.getType() ) )
+ {
+ artifact.selectVersion( pomArtifact.getVersion() );
+ artifact.setFile( pomFile );
+ artifact.setResolved( true );
+ }
+
+ return build( localProject ? pomFile : null, new FileModelSource( pomFile ), config );
+ }
+
+ private ModelSource createStubModelSource( Artifact artifact )
+ {
+ StringBuilder buffer = new StringBuilder( 1024 );
+
+ buffer.append( "<?xml version='1.0'?>" );
+ buffer.append( "<project>" );
+ buffer.append( "<modelVersion>4.0.0</modelVersion>" );
+ buffer.append( "<groupId>" ).append( artifact.getGroupId() ).append( "</groupId>" );
+ buffer.append( "<artifactId>" ).append( artifact.getArtifactId() ).append( "</artifactId>" );
+ buffer.append( "<version>" ).append( artifact.getBaseVersion() ).append( "</version>" );
+ buffer.append( "<packaging>" ).append( artifact.getType() ).append( "</packaging>" );
+ buffer.append( "</project>" );
+
+ return new StringModelSource( buffer, artifact.getId() );
+ }
+
+ @Override
+ public List<ProjectBuildingResult> build( List<File> pomFiles, boolean recursive, ProjectBuildingRequest request )
+ throws ProjectBuildingException
+ {
+ List<ProjectBuildingResult> results = new ArrayList<ProjectBuildingResult>();
+
+ List<InterimResult> interimResults = new ArrayList<InterimResult>();
+
+ ReactorModelPool modelPool = new ReactorModelPool();
+
+ InternalConfig config = new InternalConfig( request, modelPool );
+
+ Map<String, MavenProject> projectIndex = new HashMap<String, MavenProject>( 256 );
+
+ boolean noErrors =
+ build( results, interimResults, projectIndex, pomFiles, new LinkedHashSet<File>(), true, recursive,
+ config );
+
+ populateReactorModelPool( modelPool, interimResults );
+
+ ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
+
+ try
+ {
+ noErrors =
+ build( results, new ArrayList<MavenProject>(), projectIndex, interimResults, request,
+ new HashMap<File, Boolean>() ) && noErrors;
+ }
+ finally
+ {
+ Thread.currentThread().setContextClassLoader( oldContextClassLoader );
+ }
+
+ if ( !noErrors )
+ {
+ throw new ProjectBuildingException( results );
+ }
+
+ return results;
+ }
+
+ private boolean build( List<ProjectBuildingResult> results, List<InterimResult> interimResults,
+ Map<String, MavenProject> projectIndex, List<File> pomFiles, Set<File> aggregatorFiles,
+ boolean isRoot, boolean recursive, InternalConfig config )
+ {
+ boolean noErrors = true;
+
+ for ( File pomFile : pomFiles )
+ {
+ aggregatorFiles.add( pomFile );
+
+ if ( !build( results, interimResults, projectIndex, pomFile, aggregatorFiles, isRoot, recursive, config ) )
+ {
+ noErrors = false;
+ }
+
+ aggregatorFiles.remove( pomFile );
+ }
+
+ return noErrors;
+ }
+
+ private boolean build( List<ProjectBuildingResult> results, List<InterimResult> interimResults,
+ Map<String, MavenProject> projectIndex, File pomFile, Set<File> aggregatorFiles,
+ boolean isRoot, boolean recursive, InternalConfig config )
+ {
+ boolean noErrors = true;
+
+ ModelBuildingRequest request = getModelBuildingRequest( config );
+
+ MavenProject project = new MavenProject();
+
+ request.setPomFile( pomFile );
+ request.setTwoPhaseBuilding( true );
+ request.setLocationTracking( true );
+
+ DefaultModelBuildingListener listener =
+ new DefaultModelBuildingListener( project, projectBuildingHelper, config.request );
+ request.setModelBuildingListener( listener );
+
+ try
+ {
+ ModelBuildingResult result = modelBuilder.build( request );
+
+ Model model = result.getEffectiveModel();
+
+ projectIndex.put( result.getModelIds().get( 0 ), project );
+
+ InterimResult interimResult = new InterimResult( pomFile, request, result, listener, isRoot );
+ interimResults.add( interimResult );
+
+ if ( recursive && !model.getModules().isEmpty() )
+ {
+ File basedir = pomFile.getParentFile();
+
+ List<File> moduleFiles = new ArrayList<File>();
+
+ for ( String module : model.getModules() )
+ {
+ if ( StringUtils.isEmpty( module ) )
+ {
+ continue;
+ }
+
+ module = module.replace( '\\', File.separatorChar ).replace( '/', File.separatorChar );
+
+ File moduleFile = new File( basedir, module );
+
+ if ( moduleFile.isDirectory() )
+ {
+ moduleFile = modelProcessor.locatePom( moduleFile );
+ }
+
+ if ( !moduleFile.isFile() )
+ {
+ ModelProblem problem =
+ new DefaultModelProblem( "Child module " + moduleFile + " of " + pomFile
+ + " does not exist", ModelProblem.Severity.ERROR, ModelProblem.Version.BASE, model, -1,
+ -1, null );
+ result.getProblems().add( problem );
+
+ noErrors = false;
+
+ continue;
+ }
+
+ if ( Os.isFamily( Os.FAMILY_WINDOWS ) )
+ {
+ // we don't canonicalize on unix to avoid interfering with symlinks
+ try
+ {
+ moduleFile = moduleFile.getCanonicalFile();
+ }
+ catch ( IOException e )
+ {
+ moduleFile = moduleFile.getAbsoluteFile();
+ }
+ }
+ else
+ {
+ moduleFile = new File( moduleFile.toURI().normalize() );
+ }
+
+ if ( aggregatorFiles.contains( moduleFile ) )
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+ for ( File aggregatorFile : aggregatorFiles )
+ {
+ buffer.append( aggregatorFile ).append( " -> " );
+ }
+ buffer.append( moduleFile );
+
+ ModelProblem problem =
+ new DefaultModelProblem( "Child module " + moduleFile + " of " + pomFile
+ + " forms aggregation cycle " + buffer, ModelProblem.Severity.ERROR,
+ ModelProblem.Version.BASE, model, -1, -1, null );
+ result.getProblems().add( problem );
+
+ noErrors = false;
+
+ continue;
+ }
+
+ moduleFiles.add( moduleFile );
+ }
+
+ interimResult.modules = new ArrayList<InterimResult>();
+
+ if ( !build( results, interimResult.modules, projectIndex, moduleFiles, aggregatorFiles, false,
+ recursive, config ) )
+ {
+ noErrors = false;
+ }
+ }
+ }
+ catch ( ModelBuildingException e )
+ {
+ results.add( new DefaultProjectBuildingResult( e.getModelId(), pomFile, e.getProblems() ) );
+
+ noErrors = false;
+ }
+
+ return noErrors;
+ }
+
+ static class InterimResult
+ {
+
+ File pomFile;
+
+ ModelBuildingRequest request;
+
+ ModelBuildingResult result;
+
+ DefaultModelBuildingListener listener;
+
+ boolean root;
+
+ List<InterimResult> modules = Collections.emptyList();
+
+ InterimResult( File pomFile, ModelBuildingRequest request, ModelBuildingResult result,
+ DefaultModelBuildingListener listener, boolean root )
+ {
+ this.pomFile = pomFile;
+ this.request = request;
+ this.result = result;
+ this.listener = listener;
+ this.root = root;
+ }
+
+ }
+
+ private void populateReactorModelPool( ReactorModelPool reactorModelPool, List<InterimResult> interimResults )
+ {
+ for ( InterimResult interimResult : interimResults )
+ {
+ Model model = interimResult.result.getEffectiveModel();
+ reactorModelPool.put( model.getGroupId(), model.getArtifactId(), model.getVersion(), model.getPomFile() );
+
+ populateReactorModelPool( reactorModelPool, interimResult.modules );
+ }
+ }
+
+ private boolean build( List<ProjectBuildingResult> results, List<MavenProject> projects,
+ Map<String, MavenProject> projectIndex, List<InterimResult> interimResults,
+ ProjectBuildingRequest request, Map<File, Boolean> profilesXmls )
+ {
+ boolean noErrors = true;
+
+ for ( InterimResult interimResult : interimResults )
+ {
+ try
+ {
+ ModelBuildingResult result = modelBuilder.build( interimResult.request, interimResult.result );
+
+ MavenProject project = interimResult.listener.getProject();
+ initProject( project, projectIndex, result, profilesXmls, request );
+
+ List<MavenProject> modules = new ArrayList<MavenProject>();
+ noErrors =
+ build( results, modules, projectIndex, interimResult.modules, request, profilesXmls ) && noErrors;
+
+ projects.addAll( modules );
+ projects.add( project );
+
+ project.setExecutionRoot( interimResult.root );
+ project.setCollectedProjects( modules );
+
+ results.add( new DefaultProjectBuildingResult( project, result.getProblems(), null ) );
+ }
+ catch ( ModelBuildingException e )
+ {
+ results.add( new DefaultProjectBuildingResult( e.getModelId(), interimResult.pomFile,
+ e.getProblems() ) );
+
+ noErrors = false;
+ }
+ }
+
+ return noErrors;
+ }
+
+ private void initProject( MavenProject project, Map<String, MavenProject> projects, ModelBuildingResult result,
+ Map<File, Boolean> profilesXmls, ProjectBuildingRequest projectBuildingRequest )
+ {
+ Model model = result.getEffectiveModel();
+
+ project.setModel( model );
+ project.setOriginalModel( result.getRawModel() );
+ project.setFile( model.getPomFile() );
+ Parent p = model.getParent();
+ if ( p != null )
+ {
+ project.setParentArtifact( repositorySystem.createProjectArtifact( p.getGroupId(), p.getArtifactId(),
+ p.getVersion() ) );
+ // org.apache.maven.its.mng4834:parent:0.1
+ String parentModelId = result.getModelIds().get( 1 );
+ File parentPomFile = result.getRawModel( parentModelId ).getPomFile();
+ MavenProject parent = projects.get( parentModelId );
+ if ( parent == null )
+ {
+ //
+ // At this point the DefaultModelBuildingListener has fired and it populates the
+ // remote repositories with those found in the pom.xml, along with the existing externally
+ // defined repositories.
+ //
+ projectBuildingRequest.setRemoteRepositories( project.getRemoteArtifactRepositories() );
+ if ( parentPomFile != null )
+ {
+ project.setParentFile( parentPomFile );
+ try
+ {
+ parent = build( parentPomFile, projectBuildingRequest ).getProject();
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // MNG-4488 where let invalid parents slide on by
+ logger.warn( "Failed to build parent project for " + project.getId() );
+ }
+ }
+ else
+ {
+ Artifact parentArtifact = project.getParentArtifact();
+ try
+ {
+ parent = build( parentArtifact, projectBuildingRequest ).getProject();
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // MNG-4488 where let invalid parents slide on by
+ logger.warn( "Failed to build parent project for " + project.getId() );
+ }
+ }
+ }
+ project.setParent( parent );
+ }
+
+ Artifact projectArtifact =
+ repositorySystem.createArtifact( project.getGroupId(), project.getArtifactId(), project.getVersion(), null,
+ project.getPackaging() );
+ project.setArtifact( projectArtifact );
+
+ if ( project.getFile() != null )
+ {
+ Build build = project.getBuild();
+ project.addScriptSourceRoot( build.getScriptSourceDirectory() );
+ project.addCompileSourceRoot( build.getSourceDirectory() );
+ project.addTestCompileSourceRoot( build.getTestSourceDirectory() );
+ }
+
+ List<Profile> activeProfiles = new ArrayList<Profile>();
+ activeProfiles.addAll( result.getActivePomProfiles( result.getModelIds().get( 0 ) ) );
+ activeProfiles.addAll( result.getActiveExternalProfiles() );
+ project.setActiveProfiles( activeProfiles );
+
+ project.setInjectedProfileIds( "external", getProfileIds( result.getActiveExternalProfiles() ) );
+ for ( String modelId : result.getModelIds() )
+ {
+ project.setInjectedProfileIds( modelId, getProfileIds( result.getActivePomProfiles( modelId ) ) );
+ }
+
+ String modelId = findProfilesXml( result, profilesXmls );
+ if ( modelId != null )
+ {
+ ModelProblem problem =
+ new DefaultModelProblem( "Detected profiles.xml alongside " + modelId
+ + ", this file is no longer supported and was ignored" + ", please use the settings.xml instead",
+ ModelProblem.Severity.WARNING, ModelProblem.Version.V30, model, -1, -1, null );
+ result.getProblems().add( problem );
+ }
+
+ //
+ // All the parts that were taken out of MavenProject for Maven 4.0.0
+ //
+
+ project.setProjectBuildingRequest( projectBuildingRequest );
+
+ // pluginArtifacts
+ Set<Artifact> pluginArtifacts = new HashSet<Artifact>();
+ for ( Plugin plugin : project.getBuildPlugins() )
+ {
+ Artifact artifact = repositorySystem.createPluginArtifact( plugin );
+
+ if ( artifact != null )
+ {
+ pluginArtifacts.add( artifact );
+ }
+ }
+ project.setPluginArtifacts( pluginArtifacts );
+
+ // reportArtifacts
+ Set<Artifact> reportArtifacts = new HashSet<Artifact>();
+ for ( ReportPlugin report : project.getReportPlugins() )
+ {
+ Plugin pp = new Plugin();
+ pp.setGroupId( report.getGroupId() );
+ pp.setArtifactId( report.getArtifactId() );
+ pp.setVersion( report.getVersion() );
+
+ Artifact artifact = repositorySystem.createPluginArtifact( pp );
+
+ if ( artifact != null )
+ {
+ reportArtifacts.add( artifact );
+ }
+ }
+ project.setReportArtifacts( reportArtifacts );
+
+ // extensionArtifacts
+ Set<Artifact> extensionArtifacts = new HashSet<Artifact>();
+ List<Extension> extensions = project.getBuildExtensions();
+ if ( extensions != null )
+ {
+ for ( Extension ext : extensions )
+ {
+ String version;
+ if ( StringUtils.isEmpty( ext.getVersion() ) )
+ {
+ version = "RELEASE";
+ }
+ else
+ {
+ version = ext.getVersion();
+ }
+
+ Artifact artifact =
+ repositorySystem.createArtifact( ext.getGroupId(), ext.getArtifactId(), version, null, "jar" );
+
+ if ( artifact != null )
+ {
+ extensionArtifacts.add( artifact );
+ }
+ }
+ }
+ project.setExtensionArtifacts( extensionArtifacts );
+
+ // managedVersionMap
+ Map<String, Artifact> map = null;
+ if ( repositorySystem != null )
+ {
+ List<Dependency> deps;
+ DependencyManagement dependencyManagement = project.getDependencyManagement();
+ if ( ( dependencyManagement != null ) && ( ( deps = dependencyManagement.getDependencies() ) != null )
+ && ( deps.size() > 0 ) )
+ {
+ map = new HashMap<String, Artifact>();
+ for ( Dependency d : dependencyManagement.getDependencies() )
+ {
+ Artifact artifact = repositorySystem.createDependencyArtifact( d );
+
+ if ( artifact != null )
+ {
+ map.put( d.getManagementKey(), artifact );
+ }
+ }
+ }
+ else
+ {
+ map = Collections.emptyMap();
+ }
+ }
+ project.setManagedVersionMap( map );
+
+ // release artifact repository
+ if ( project.getDistributionManagement() != null
+ && project.getDistributionManagement().getRepository() != null )
+ {
+ try
+ {
+ DeploymentRepository r = project.getDistributionManagement().getRepository();
+ if ( !StringUtils.isEmpty( r.getId() ) && !StringUtils.isEmpty( r.getUrl() ) )
+ {
+ ArtifactRepository repo = repositorySystem.buildArtifactRepository( r );
+ repositorySystem.injectProxy( projectBuildingRequest.getRepositorySession(),
+ Arrays.asList( repo ) );
+ repositorySystem.injectAuthentication( projectBuildingRequest.getRepositorySession(),
+ Arrays.asList( repo ) );
+ project.setReleaseArtifactRepository( repo );
+ }
+ }
+ catch ( InvalidRepositoryException e )
+ {
+ throw new IllegalStateException( "Failed to create release distribution repository for "
+ + project.getId(), e );
+ }
+ }
+
+ // snapshot artifact repository
+ if ( project.getDistributionManagement() != null
+ && project.getDistributionManagement().getSnapshotRepository() != null )
+ {
+ try
+ {
+ DeploymentRepository r = project.getDistributionManagement().getSnapshotRepository();
+ if ( !StringUtils.isEmpty( r.getId() ) && !StringUtils.isEmpty( r.getUrl() ) )
+ {
+ ArtifactRepository repo = repositorySystem.buildArtifactRepository( r );
+ repositorySystem.injectProxy( projectBuildingRequest.getRepositorySession(),
+ Arrays.asList( repo ) );
+ repositorySystem.injectAuthentication( projectBuildingRequest.getRepositorySession(),
+ Arrays.asList( repo ) );
+ project.setSnapshotArtifactRepository( repo );
+ }
+ }
+ catch ( InvalidRepositoryException e )
+ {
+ throw new IllegalStateException( "Failed to create snapshot distribution repository for "
+ + project.getId(), e );
+ }
+ }
+ }
+
+ private String findProfilesXml( ModelBuildingResult result, Map<File, Boolean> profilesXmls )
+ {
+ for ( String modelId : result.getModelIds() )
+ {
+ Model model = result.getRawModel( modelId );
+
+ File basedir = model.getProjectDirectory();
+ if ( basedir == null )
+ {
+ break;
+ }
+
+ Boolean profilesXml = profilesXmls.get( basedir );
+ if ( profilesXml == null )
+ {
+ profilesXml = new File( basedir, "profiles.xml" ).exists();
+ profilesXmls.put( basedir, profilesXml );
+ }
+ if ( profilesXml )
+ {
+ return modelId;
+ }
+ }
+
+ return null;
+ }
+
+ class InternalConfig
+ {
+
+ public final ProjectBuildingRequest request;
+
+ public final RepositorySystemSession session;
+
+ public final List<RemoteRepository> repositories;
+
+ public final ReactorModelPool modelPool;
+
+ InternalConfig( ProjectBuildingRequest request, ReactorModelPool modelPool )
+ {
+ this.request = request;
+ this.modelPool = modelPool;
+ session =
+ LegacyLocalRepositoryManager.overlay( request.getLocalRepository(), request.getRepositorySession(),
+ repoSystem );
+ repositories = RepositoryUtils.toRepos( request.getRemoteRepositories() );
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
new file mode 100644
index 00000000..aea8fdbe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
@@ -0,0 +1,295 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.classrealm.ClassRealmManager;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Extension;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.Repository;
+import org.apache.maven.plugin.ExtensionRealmCache;
+import org.apache.maven.plugin.MavenPluginManager;
+import org.apache.maven.plugin.PluginManagerException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.repository.RepositorySystem;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.util.filter.ExclusionsDependencyFilter;
+
+/**
+ * Assists the project builder. <strong>Warning:</strong> This is an internal utility class that is only public for
+ * technical reasons, it is not part of the public API. In particular, this class can be changed or deleted without
+ * prior notice.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = ProjectBuildingHelper.class )
+public class DefaultProjectBuildingHelper
+ implements ProjectBuildingHelper
+{
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private PlexusContainer container;
+
+ @Requirement
+ private ClassRealmManager classRealmManager;
+
+ @Requirement
+ private ProjectRealmCache projectRealmCache;
+
+ @Requirement
+ private RepositorySystem repositorySystem;
+
+ @Requirement
+ private MavenPluginManager pluginManager;
+
+ public List<ArtifactRepository> createArtifactRepositories( List<Repository> pomRepositories,
+ List<ArtifactRepository> externalRepositories,
+ ProjectBuildingRequest request )
+ throws InvalidRepositoryException
+ {
+ List<ArtifactRepository> internalRepositories = new ArrayList<ArtifactRepository>();
+
+ for ( Repository repository : pomRepositories )
+ {
+ internalRepositories.add( repositorySystem.buildArtifactRepository( repository ) );
+ }
+
+ repositorySystem.injectMirror( request.getRepositorySession(), internalRepositories );
+
+ repositorySystem.injectProxy( request.getRepositorySession(), internalRepositories );
+
+ repositorySystem.injectAuthentication( request.getRepositorySession(), internalRepositories );
+
+ List<ArtifactRepository> dominantRepositories;
+ List<ArtifactRepository> recessiveRepositories;
+
+ if ( ProjectBuildingRequest.RepositoryMerging.REQUEST_DOMINANT.equals( request.getRepositoryMerging() ) )
+ {
+ dominantRepositories = externalRepositories;
+ recessiveRepositories = internalRepositories;
+ }
+ else
+ {
+ dominantRepositories = internalRepositories;
+ recessiveRepositories = externalRepositories;
+ }
+
+ List<ArtifactRepository> artifactRepositories = new ArrayList<ArtifactRepository>();
+ Collection<String> repoIds = new HashSet<String>();
+
+ if ( dominantRepositories != null )
+ {
+ for ( ArtifactRepository repository : dominantRepositories )
+ {
+ repoIds.add( repository.getId() );
+ artifactRepositories.add( repository );
+ }
+ }
+
+ if ( recessiveRepositories != null )
+ {
+ for ( ArtifactRepository repository : recessiveRepositories )
+ {
+ if ( repoIds.add( repository.getId() ) )
+ {
+ artifactRepositories.add( repository );
+ }
+ }
+ }
+
+ artifactRepositories = repositorySystem.getEffectiveRepositories( artifactRepositories );
+
+ return artifactRepositories;
+ }
+
+ public synchronized ProjectRealmCache.CacheRecord createProjectRealm( MavenProject project, Model model,
+ ProjectBuildingRequest request )
+ throws PluginResolutionException, PluginVersionResolutionException, PluginManagerException
+ {
+ ClassRealm projectRealm;
+
+ List<Plugin> extensionPlugins = new ArrayList<Plugin>();
+
+ Build build = model.getBuild();
+
+ if ( build != null )
+ {
+ for ( Extension extension : build.getExtensions() )
+ {
+ Plugin plugin = new Plugin();
+ plugin.setGroupId( extension.getGroupId() );
+ plugin.setArtifactId( extension.getArtifactId() );
+ plugin.setVersion( extension.getVersion() );
+ extensionPlugins.add( plugin );
+ }
+
+ for ( Plugin plugin : build.getPlugins() )
+ {
+ if ( plugin.isExtensions() )
+ {
+ extensionPlugins.add( plugin );
+ }
+ }
+ }
+
+ if ( extensionPlugins.isEmpty() )
+ {
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Extension realms for project " + model.getId() + ": (none)" );
+ }
+
+ return new ProjectRealmCache.CacheRecord( null, null );
+ }
+
+ List<ClassRealm> extensionRealms = new ArrayList<ClassRealm>();
+
+ Map<ClassRealm, List<String>> exportedPackages = new HashMap<ClassRealm, List<String>>();
+
+ Map<ClassRealm, List<String>> exportedArtifacts = new HashMap<ClassRealm, List<String>>();
+
+ List<Artifact> publicArtifacts = new ArrayList<Artifact>();
+
+ for ( Plugin plugin : extensionPlugins )
+ {
+ ExtensionRealmCache.CacheRecord recordRealm =
+ pluginManager.setupExtensionsRealm( project, plugin, request.getRepositorySession() );
+
+ final ClassRealm extensionRealm = recordRealm.realm;
+ final ExtensionDescriptor extensionDescriptor = recordRealm.desciptor;
+ final List<Artifact> artifacts = recordRealm.artifacts;
+
+ extensionRealms.add( extensionRealm );
+ if ( extensionDescriptor != null )
+ {
+ exportedPackages.put( extensionRealm, extensionDescriptor.getExportedPackages() );
+ exportedArtifacts.put( extensionRealm, extensionDescriptor.getExportedArtifacts() );
+ }
+
+ if ( !plugin.isExtensions() && artifacts.size() == 2 && artifacts.get( 0 ).getFile() != null
+ && "plexus-utils".equals( artifacts.get( 1 ).getArtifactId() ) )
+ {
+ /*
+ * This is purely for backward-compat with 2.x where <extensions> consisting of a single artifact where
+ * loaded into the core and hence available to plugins, in contrast to bigger extensions that were
+ * loaded into a dedicated realm which is invisible to plugins (MNG-2749).
+ */
+ publicArtifacts.add( artifacts.get( 0 ) );
+ }
+ }
+
+ if ( logger.isDebugEnabled() )
+ {
+ logger.debug( "Extension realms for project " + model.getId() + ": " + extensionRealms );
+ }
+
+ ProjectRealmCache.Key projectRealmKey = projectRealmCache.createKey( extensionRealms );
+
+ ProjectRealmCache.CacheRecord record = projectRealmCache.get( projectRealmKey );
+
+ if ( record == null )
+ {
+ projectRealm = classRealmManager.createProjectRealm( model, toAetherArtifacts( publicArtifacts ) );
+
+ Set<String> exclusions = new LinkedHashSet<String>();
+
+ for ( ClassRealm extensionRealm : extensionRealms )
+ {
+ List<String> excludes = exportedArtifacts.get( extensionRealm );
+
+ if ( excludes != null )
+ {
+ exclusions.addAll( excludes );
+ }
+
+ List<String> exports = exportedPackages.get( extensionRealm );
+
+ if ( exports == null || exports.isEmpty() )
+ {
+ /*
+ * Most existing extensions don't define exported packages, i.e. no classes are to be exposed to
+ * plugins, yet the components provided by the extension (e.g. artifact handlers) must be
+ * accessible, i.e. we still must import the extension realm into the project realm.
+ */
+ exports = Arrays.asList( extensionRealm.getId() );
+ }
+
+ for ( String export : exports )
+ {
+ projectRealm.importFrom( extensionRealm, export );
+ }
+ }
+
+ DependencyFilter extensionArtifactFilter = null;
+ if ( !exclusions.isEmpty() )
+ {
+ extensionArtifactFilter = new ExclusionsDependencyFilter( exclusions );
+ }
+
+ record = projectRealmCache.put( projectRealmKey, projectRealm, extensionArtifactFilter );
+ }
+
+ projectRealmCache.register( project, projectRealmKey, record );
+
+ return record;
+ }
+
+ public void selectProjectRealm( MavenProject project )
+ {
+ ClassLoader projectRealm = project.getClassRealm();
+
+ if ( projectRealm == null )
+ {
+ projectRealm = classRealmManager.getCoreRealm();
+ }
+
+ Thread.currentThread().setContextClassLoader( projectRealm );
+ }
+
+ private List<org.eclipse.aether.artifact.Artifact> toAetherArtifacts( final List<Artifact> pluginArtifacts )
+ {
+ return new ArrayList<org.eclipse.aether.artifact.Artifact>( RepositoryUtils.toArtifacts( pluginArtifacts ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java
new file mode 100644
index 00000000..185e4ca7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java
@@ -0,0 +1,339 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.eclipse.aether.RepositorySystemSession;
+
+public class DefaultProjectBuildingRequest
+ implements ProjectBuildingRequest
+{
+
+ private RepositorySystemSession repositorySession;
+
+ private ArtifactRepository localRepository;
+
+ private List<ArtifactRepository> remoteRepositories;
+
+ private List<ArtifactRepository> pluginArtifactRepositories;
+
+ private MavenProject project;
+
+ private int validationLevel = ModelBuildingRequest.VALIDATION_LEVEL_STRICT;
+
+ private boolean processPlugins;
+
+ private List<Profile> profiles;
+
+ private List<String> activeProfileIds;
+
+ private List<String> inactiveProfileIds;
+
+ private Properties systemProperties;
+
+ private Properties userProperties;
+
+ private Date buildStartTime;
+
+ private boolean resolveDependencies;
+
+ private boolean resolveVersionRanges;
+
+ private RepositoryMerging repositoryMerging = RepositoryMerging.POM_DOMINANT;
+
+ public DefaultProjectBuildingRequest()
+ {
+ processPlugins = true;
+ profiles = new ArrayList<Profile>();
+ activeProfileIds = new ArrayList<String>();
+ inactiveProfileIds = new ArrayList<String>();
+ systemProperties = new Properties();
+ userProperties = new Properties();
+ remoteRepositories = new ArrayList<ArtifactRepository>();
+ pluginArtifactRepositories = new ArrayList<ArtifactRepository>();
+ }
+
+ public DefaultProjectBuildingRequest( ProjectBuildingRequest request )
+ {
+ this();
+ setProcessPlugins( request.isProcessPlugins() );
+ setProfiles( request.getProfiles() );
+ setActiveProfileIds( request.getActiveProfileIds() );
+ setInactiveProfileIds( request.getInactiveProfileIds() );
+ setSystemProperties( request.getSystemProperties() );
+ setUserProperties( request.getUserProperties() );
+ setRemoteRepositories( request.getRemoteRepositories() );
+ setPluginArtifactRepositories( request.getPluginArtifactRepositories() );
+ setRepositorySession( request.getRepositorySession() );
+ setLocalRepository( request.getLocalRepository() );
+ setBuildStartTime( request.getBuildStartTime() );
+ setProject( request.getProject() );
+ setResolveDependencies( request.isResolveDependencies() );
+ setValidationLevel( request.getValidationLevel() );
+ }
+
+ public MavenProject getProject()
+ {
+ return project;
+ }
+
+ public void setProject( MavenProject mavenProject )
+ {
+ this.project = mavenProject;
+ }
+
+ public ProjectBuildingRequest setLocalRepository( ArtifactRepository localRepository )
+ {
+ this.localRepository = localRepository;
+ return this;
+ }
+
+ public ArtifactRepository getLocalRepository()
+ {
+ return localRepository;
+ }
+
+ public List<ArtifactRepository> getRemoteRepositories()
+ {
+ return remoteRepositories;
+ }
+
+ public ProjectBuildingRequest setRemoteRepositories( List<ArtifactRepository> remoteRepositories )
+ {
+ if ( remoteRepositories != null )
+ {
+ this.remoteRepositories = new ArrayList<ArtifactRepository>( remoteRepositories );
+ }
+ else
+ {
+ this.remoteRepositories.clear();
+ }
+
+ return this;
+ }
+
+ public List<ArtifactRepository> getPluginArtifactRepositories()
+ {
+ return pluginArtifactRepositories;
+ }
+
+ public ProjectBuildingRequest setPluginArtifactRepositories( List<ArtifactRepository> pluginArtifactRepositories )
+ {
+ if ( pluginArtifactRepositories != null )
+ {
+ this.pluginArtifactRepositories = new ArrayList<ArtifactRepository>( pluginArtifactRepositories );
+ }
+ else
+ {
+ this.pluginArtifactRepositories.clear();
+ }
+
+ return this;
+ }
+
+ public Properties getSystemProperties()
+ {
+ return systemProperties;
+ }
+
+ public ProjectBuildingRequest setSystemProperties( Properties systemProperties )
+ {
+ if ( systemProperties != null )
+ {
+ this.systemProperties = new Properties();
+ synchronized ( systemProperties )
+ { // avoid concurrentmodification if someone else sets/removes an unrelated system property
+ this.systemProperties.putAll( systemProperties );
+ }
+ }
+ else
+ {
+ this.systemProperties.clear();
+ }
+
+ return this;
+ }
+
+ public Properties getUserProperties()
+ {
+ return userProperties;
+ }
+
+ public ProjectBuildingRequest setUserProperties( Properties userProperties )
+ {
+ if ( userProperties != null )
+ {
+ this.userProperties = new Properties();
+ this.userProperties.putAll( userProperties );
+ }
+ else
+ {
+ this.userProperties.clear();
+ }
+
+ return this;
+ }
+
+ public boolean isProcessPlugins()
+ {
+ return processPlugins;
+ }
+
+ public ProjectBuildingRequest setProcessPlugins( boolean processPlugins )
+ {
+ this.processPlugins = processPlugins;
+ return this;
+ }
+
+ public ProjectBuildingRequest setResolveDependencies( boolean resolveDependencies )
+ {
+ this.resolveDependencies = resolveDependencies;
+ return this;
+ }
+
+ public boolean isResolveDependencies()
+ {
+ return resolveDependencies;
+ }
+
+ /** @since 3.2.2 */
+ public ProjectBuildingRequest setResolveVersionRanges( boolean value )
+ {
+ this.resolveVersionRanges = value;
+ return this;
+ }
+
+ /** @since 3.2.2 */
+ public boolean isResolveVersionRanges()
+ {
+ return this.resolveVersionRanges;
+ }
+
+ public ProjectBuildingRequest setValidationLevel( int validationLevel )
+ {
+ this.validationLevel = validationLevel;
+ return this;
+ }
+
+ public int getValidationLevel()
+ {
+ return validationLevel;
+ }
+
+ public List<String> getActiveProfileIds()
+ {
+ return activeProfileIds;
+ }
+
+ public void setActiveProfileIds( List<String> activeProfileIds )
+ {
+ if ( activeProfileIds != null )
+ {
+ this.activeProfileIds = new ArrayList<String>( activeProfileIds );
+ }
+ else
+ {
+ this.activeProfileIds.clear();
+ }
+ }
+
+ public List<String> getInactiveProfileIds()
+ {
+ return inactiveProfileIds;
+ }
+
+ public void setInactiveProfileIds( List<String> inactiveProfileIds )
+ {
+ if ( inactiveProfileIds != null )
+ {
+ this.inactiveProfileIds = new ArrayList<String>( inactiveProfileIds );
+ }
+ else
+ {
+ this.inactiveProfileIds.clear();
+ }
+ }
+
+ public void setProfiles( List<Profile> profiles )
+ {
+ if ( profiles != null )
+ {
+ this.profiles = new ArrayList<Profile>( profiles );
+ }
+ else
+ {
+ this.profiles.clear();
+ }
+ }
+
+ public void addProfile( Profile profile )
+ {
+ profiles.add( profile );
+ }
+
+ public List<Profile> getProfiles()
+ {
+ return profiles;
+ }
+
+ public Date getBuildStartTime()
+ {
+ return buildStartTime;
+ }
+
+ public void setBuildStartTime( Date buildStartTime )
+ {
+ this.buildStartTime = buildStartTime;
+ }
+
+ public RepositorySystemSession getRepositorySession()
+ {
+ return repositorySession;
+ }
+
+ public DefaultProjectBuildingRequest setRepositorySession( RepositorySystemSession repositorySession )
+ {
+ this.repositorySession = repositorySession;
+ return this;
+ }
+
+ public DefaultProjectBuildingRequest setRepositoryMerging( RepositoryMerging repositoryMerging )
+ {
+ if ( repositoryMerging == null )
+ {
+ throw new IllegalArgumentException( "repository merge mode not specified" );
+ }
+ this.repositoryMerging = repositoryMerging;
+ return this;
+ }
+
+ public RepositoryMerging getRepositoryMerging()
+ {
+ return repositoryMerging;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java
new file mode 100644
index 00000000..b64a395d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java
@@ -0,0 +1,110 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.model.building.ModelProblem;
+
+/**
+ * Collects the output of the project builder.
+ *
+ * @author Benjamin Bentmann
+ */
+class DefaultProjectBuildingResult
+ implements ProjectBuildingResult
+{
+
+ private String projectId;
+
+ private File pomFile;
+
+ private MavenProject project;
+
+ private List<ModelProblem> problems;
+
+ private DependencyResolutionResult dependencyResolutionResult;
+
+ /**
+ * Creates a new result with the specified contents.
+ *
+ * @param project The project that was built, may be {@code null}.
+ * @param problems The problems that were encouterned, may be {@code null}.
+ * @param dependencyResolutionResult The result of the resolution for the project dependencies, may be {@code null}.
+ */
+ public DefaultProjectBuildingResult( MavenProject project, List<ModelProblem> problems,
+ DependencyResolutionResult dependencyResolutionResult )
+ {
+ this.projectId =
+ ( project != null ) ? project.getGroupId() + ':' + project.getArtifactId() + ':' + project.getVersion()
+ : "";
+ this.pomFile = ( project != null ) ? project.getFile() : null;
+ this.project = project;
+ this.problems = problems;
+ this.dependencyResolutionResult = dependencyResolutionResult;
+ }
+
+ /**
+ * Creates a new result with the specified contents.
+ *
+ * @param projectId The identifier of the project, may be {@code null}.
+ * @param pomFile The POM file from which the project was built, may be {@code null}.
+ * @param problems The problems that were encouterned, may be {@code null}.
+ */
+ public DefaultProjectBuildingResult( String projectId, File pomFile, List<ModelProblem> problems )
+ {
+ this.projectId = ( projectId != null ) ? projectId : "";
+ this.pomFile = pomFile;
+ this.problems = problems;
+ }
+
+ public String getProjectId()
+ {
+ return projectId;
+ }
+
+ public File getPomFile()
+ {
+ return pomFile;
+ }
+
+ public MavenProject getProject()
+ {
+ return project;
+ }
+
+ public List<ModelProblem> getProblems()
+ {
+ if ( problems == null )
+ {
+ problems = new ArrayList<ModelProblem>();
+ }
+
+ return problems;
+ }
+
+ public DependencyResolutionResult getDependencyResolutionResult()
+ {
+ return dependencyResolutionResult;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java
new file mode 100644
index 00000000..1287eb14
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java
@@ -0,0 +1,333 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.Exclusion;
+import org.apache.maven.model.InputLocation;
+import org.apache.maven.model.InputSource;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.StringUtils;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.RequestTrace;
+import org.eclipse.aether.artifact.ArtifactProperties;
+import org.eclipse.aether.artifact.ArtifactType;
+import org.eclipse.aether.artifact.ArtifactTypeRegistry;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.collection.DependencyCollectionException;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.graph.DependencyVisitor;
+import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.resolution.DependencyRequest;
+import org.eclipse.aether.util.artifact.ArtifactIdUtils;
+import org.eclipse.aether.util.artifact.JavaScopes;
+import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
+
+/**
+ * @author Benjamin Bentmann
+ */
+@Component( role = ProjectDependenciesResolver.class )
+public class DefaultProjectDependenciesResolver
+ implements ProjectDependenciesResolver
+{
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private RepositorySystem repoSystem;
+
+ @Requirement
+ private List<RepositorySessionDecorator> decorators;
+
+ public DependencyResolutionResult resolve( DependencyResolutionRequest request )
+ throws DependencyResolutionException
+ {
+ final RequestTrace trace = RequestTrace.newChild( null, request );
+
+ final DefaultDependencyResolutionResult result = new DefaultDependencyResolutionResult();
+
+ final MavenProject project = request.getMavenProject();
+ final DependencyFilter filter = request.getResolutionFilter();
+ RepositorySystemSession session = request.getRepositorySession();
+ ArtifactTypeRegistry stereotypes = session.getArtifactTypeRegistry();
+
+ if ( logger.isDebugEnabled()
+ && session.getConfigProperties().get( DependencyManagerUtils.CONFIG_PROP_VERBOSE ) == null )
+ {
+ DefaultRepositorySystemSession verbose = new DefaultRepositorySystemSession( session );
+ verbose.setConfigProperty( DependencyManagerUtils.CONFIG_PROP_VERBOSE, Boolean.TRUE );
+ session = verbose;
+ }
+
+ for ( RepositorySessionDecorator decorator : decorators )
+ {
+ RepositorySystemSession decorated = decorator.decorate( project, session );
+ if ( decorated != null )
+ {
+ session = decorated;
+ }
+ }
+
+ CollectRequest collect = new CollectRequest();
+ collect.setRootArtifact( RepositoryUtils.toArtifact( project.getArtifact() ) );
+ collect.setRequestContext( "project" );
+ collect.setRepositories( project.getRemoteProjectRepositories() );
+
+ if ( project.getDependencyArtifacts() == null )
+ {
+ for ( Dependency dependency : project.getDependencies() )
+ {
+ if ( StringUtils.isEmpty( dependency.getGroupId() ) || StringUtils.isEmpty( dependency.getArtifactId() )
+ || StringUtils.isEmpty( dependency.getVersion() ) )
+ {
+ // guard against case where best-effort resolution for invalid models is requested
+ continue;
+ }
+ collect.addDependency( RepositoryUtils.toDependency( dependency, stereotypes ) );
+ }
+ }
+ else
+ {
+ Map<String, Dependency> dependencies = new HashMap<String, Dependency>();
+ for ( Dependency dependency : project.getDependencies() )
+ {
+ String classifier = dependency.getClassifier();
+ if ( classifier == null )
+ {
+ ArtifactType type = stereotypes.get( dependency.getType() );
+ if ( type != null )
+ {
+ classifier = type.getClassifier();
+ }
+ }
+ String key =
+ ArtifactIdUtils.toVersionlessId( dependency.getGroupId(), dependency.getArtifactId(),
+ dependency.getType(), classifier );
+ dependencies.put( key, dependency );
+ }
+ for ( Artifact artifact : project.getDependencyArtifacts() )
+ {
+ String key = artifact.getDependencyConflictId();
+ Dependency dependency = dependencies.get( key );
+ Collection<Exclusion> exclusions = dependency != null ? dependency.getExclusions() : null;
+ org.eclipse.aether.graph.Dependency dep = RepositoryUtils.toDependency( artifact, exclusions );
+ if ( !JavaScopes.SYSTEM.equals( dep.getScope() ) && dep.getArtifact().getFile() != null )
+ {
+ // enable re-resolution
+ org.eclipse.aether.artifact.Artifact art = dep.getArtifact();
+ art = art.setFile( null ).setVersion( art.getBaseVersion() );
+ dep = dep.setArtifact( art );
+ }
+ collect.addDependency( dep );
+ }
+ }
+
+ DependencyManagement depMngt = project.getDependencyManagement();
+ if ( depMngt != null )
+ {
+ for ( Dependency dependency : depMngt.getDependencies() )
+ {
+ collect.addManagedDependency( RepositoryUtils.toDependency( dependency, stereotypes ) );
+ }
+ }
+
+ DependencyRequest depRequest = new DependencyRequest( collect, filter );
+ depRequest.setTrace( trace );
+
+ DependencyNode node;
+ try
+ {
+ collect.setTrace( RequestTrace.newChild( trace, depRequest ) );
+ node = repoSystem.collectDependencies( session, collect ).getRoot();
+ result.setDependencyGraph( node );
+ }
+ catch ( DependencyCollectionException e )
+ {
+ result.setDependencyGraph( e.getResult().getRoot() );
+ result.setCollectionErrors( e.getResult().getExceptions() );
+
+ throw new DependencyResolutionException( result, "Could not resolve dependencies for project "
+ + project.getId() + ": " + e.getMessage(), e );
+ }
+
+ depRequest.setRoot( node );
+
+ if ( logger.isWarnEnabled() )
+ {
+ for ( DependencyNode child : node.getChildren() )
+ {
+ if ( !child.getRelocations().isEmpty() )
+ {
+ logger.warn( "The artifact " + child.getRelocations().get( 0 ) + " has been relocated to "
+ + child.getDependency().getArtifact() );
+ }
+ }
+ }
+
+ if ( logger.isDebugEnabled() )
+ {
+ node.accept( new GraphLogger( project ) );
+ }
+
+ try
+ {
+ process( result, repoSystem.resolveDependencies( session, depRequest ).getArtifactResults() );
+ }
+ catch ( org.eclipse.aether.resolution.DependencyResolutionException e )
+ {
+ process( result, e.getResult().getArtifactResults() );
+
+ throw new DependencyResolutionException( result, "Could not resolve dependencies for project "
+ + project.getId() + ": " + e.getMessage(), e );
+ }
+
+ return result;
+ }
+
+ private void process( DefaultDependencyResolutionResult result, Collection<ArtifactResult> results )
+ {
+ for ( ArtifactResult ar : results )
+ {
+ DependencyNode node = ar.getRequest().getDependencyNode();
+ if ( ar.isResolved() )
+ {
+ result.addResolvedDependency( node.getDependency() );
+ }
+ else
+ {
+ result.setResolutionErrors( node.getDependency(), ar.getExceptions() );
+ }
+ }
+ }
+
+ class GraphLogger
+ implements DependencyVisitor
+ {
+
+ private final MavenProject project;
+
+ private String indent = "";
+
+ private Map<String, Dependency> managed;
+
+ public GraphLogger( MavenProject project )
+ {
+ this.project = project;
+ }
+
+ public boolean visitEnter( DependencyNode node )
+ {
+ StringBuilder buffer = new StringBuilder( 128 );
+ buffer.append( indent );
+ org.eclipse.aether.graph.Dependency dep = node.getDependency();
+ if ( dep != null )
+ {
+ org.eclipse.aether.artifact.Artifact art = dep.getArtifact();
+
+ buffer.append( art );
+ buffer.append( ':' ).append( dep.getScope() );
+
+ String premanagedScope = DependencyManagerUtils.getPremanagedScope( node );
+ if ( premanagedScope != null && !premanagedScope.equals( dep.getScope() ) )
+ {
+ buffer.append( " (scope managed from " ).append( premanagedScope );
+ appendManagementSource( buffer, art, "scope" );
+ buffer.append( ")" );
+ }
+
+ String premanagedVersion = DependencyManagerUtils.getPremanagedVersion( node );
+ if ( premanagedVersion != null && !premanagedVersion.equals( art.getVersion() ) )
+ {
+ buffer.append( " (version managed from " ).append( premanagedVersion );
+ appendManagementSource( buffer, art, "version" );
+ buffer.append( ")" );
+ }
+ }
+ else
+ {
+ buffer.append( project.getGroupId() );
+ buffer.append( ':' ).append( project.getArtifactId() );
+ buffer.append( ':' ).append( project.getPackaging() );
+ buffer.append( ':' ).append( project.getVersion() );
+ }
+
+ logger.debug( buffer.toString() );
+ indent += " ";
+ return true;
+ }
+
+ public boolean visitLeave( DependencyNode node )
+ {
+ indent = indent.substring( 0, indent.length() - 3 );
+ return true;
+ }
+
+ private void appendManagementSource( StringBuilder buffer, org.eclipse.aether.artifact.Artifact artifact,
+ String field )
+ {
+ if ( managed == null )
+ {
+ managed = new HashMap<String, Dependency>();
+ if ( project.getDependencyManagement() != null )
+ {
+ for ( Dependency dep : project.getDependencyManagement().getDependencies() )
+ {
+ managed.put( dep.getManagementKey(), dep );
+ }
+ }
+ }
+
+ String key =
+ ArtifactIdUtils.toVersionlessId( artifact.getGroupId(), artifact.getArtifactId(),
+ artifact.getProperty( ArtifactProperties.TYPE, "jar" ),
+ artifact.getClassifier() );
+
+ Dependency dependency = managed.get( key );
+ if ( dependency != null )
+ {
+ InputLocation location = dependency.getLocation( field );
+ if ( location != null )
+ {
+ InputSource source = location.getSource();
+ if ( source != null )
+ {
+ buffer.append( " by " ).append( source.getModelId() );
+ }
+ }
+ }
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectRealmCache.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectRealmCache.java
new file mode 100644
index 00000000..53b82bcf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectRealmCache.java
@@ -0,0 +1,147 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.classworlds.realm.NoSuchRealmException;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Disposable;
+import org.eclipse.aether.graph.DependencyFilter;
+
+/**
+ * Default project realm cache implementation. Assumes cached data does not change.
+ */
+@Component( role = ProjectRealmCache.class )
+public class DefaultProjectRealmCache
+ implements ProjectRealmCache, Disposable
+{
+
+ protected static class CacheKey
+ implements Key
+ {
+
+ private final List<? extends ClassRealm> extensionRealms;
+
+ private final int hashCode;
+
+ public CacheKey( List<? extends ClassRealm> extensionRealms )
+ {
+ this.extensionRealms = ( extensionRealms != null ) ? extensionRealms : Collections.<ClassRealm>emptyList();
+
+ this.hashCode = this.extensionRealms.hashCode();
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return hashCode;
+ }
+
+ @Override
+ public boolean equals( Object o )
+ {
+ if ( o == this )
+ {
+ return true;
+ }
+
+ if ( !( o instanceof CacheKey ) )
+ {
+ return false;
+ }
+
+ CacheKey other = (CacheKey) o;
+
+ return extensionRealms.equals( other.extensionRealms );
+ }
+
+ @Override
+ public String toString()
+ {
+ return extensionRealms.toString();
+ }
+ }
+
+ protected final Map<Key, CacheRecord> cache = new ConcurrentHashMap<Key, CacheRecord>();
+
+ @Override
+ public Key createKey( List<? extends ClassRealm> extensionRealms )
+ {
+ return new CacheKey( extensionRealms );
+ }
+
+ public CacheRecord get( Key key )
+ {
+ return cache.get( key );
+ }
+
+ public CacheRecord put( Key key, ClassRealm projectRealm, DependencyFilter extensionArtifactFilter )
+ {
+ if ( projectRealm == null )
+ {
+ throw new NullPointerException();
+ }
+
+ if ( cache.containsKey( key ) )
+ {
+ throw new IllegalStateException( "Duplicate project realm for extensions " + key );
+ }
+
+ CacheRecord record = new CacheRecord( projectRealm, extensionArtifactFilter );
+
+ cache.put( key, record );
+
+ return record;
+ }
+
+ public void flush()
+ {
+ for ( CacheRecord record : cache.values() )
+ {
+ ClassRealm realm = record.realm;
+ try
+ {
+ realm.getWorld().disposeRealm( realm.getId() );
+ }
+ catch ( NoSuchRealmException e )
+ {
+ // ignore
+ }
+ }
+ cache.clear();
+ }
+
+ public void register( MavenProject project, Key key, CacheRecord record )
+ {
+ // default cache does not track record usage
+ }
+
+ @Override
+ public void dispose()
+ {
+ flush();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionException.java
new file mode 100644
index 00000000..50e601e7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionException.java
@@ -0,0 +1,42 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class DependencyResolutionException
+ extends Exception
+{
+
+ private DependencyResolutionResult result;
+
+ public DependencyResolutionException( DependencyResolutionResult result, String message, Throwable cause )
+ {
+ super( message, cause );
+ this.result = result;
+ }
+
+ public DependencyResolutionResult getResult()
+ {
+ return result;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionRequest.java
new file mode 100644
index 00000000..c120a137
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionRequest.java
@@ -0,0 +1,81 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.graph.DependencyFilter;
+
+/**
+ * A request to resolve the dependencies of a project.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface DependencyResolutionRequest
+{
+
+ /**
+ * Gets the project to resolve dependencies for.
+ *
+ * @return The project to resolve dependencies for or {@code null} if not set.
+ */
+ MavenProject getMavenProject();
+
+ /**
+ * Sets the project to resolve dependencies for.
+ *
+ * @param project The project to resolve dependencies for, may be {@code null}.
+ * @return This request for chaining, never {@code null}.
+ */
+ DependencyResolutionRequest setMavenProject( MavenProject project );
+
+ /**
+ * Gets the filter used to exclude some dependencies from resolution.
+ *
+ * @return The filter to exclude dependencies from resolution or {@code null} to resolve all dependencies.
+ */
+ DependencyFilter getResolutionFilter();
+
+ /**
+ * Sets the filter used to exclude some dependencies from resolution. Note that this filter only controls the
+ * resolution/download of dependency artifacts, not the inclusion of dependency nodes in the resolved dependency
+ * graph.
+ *
+ * @param filter The filter to exclude dependencies from resolution, may be {@code null} to resolve all
+ * dependencies.
+ * @return This request for chaining, never {@code null}.
+ */
+ DependencyResolutionRequest setResolutionFilter( DependencyFilter filter );
+
+ /**
+ * Gets the session to use for repository access.
+ *
+ * @return The repository session or {@code null} if not set.
+ */
+ RepositorySystemSession getRepositorySession();
+
+ /**
+ * Sets the session to use for repository access.
+ *
+ * @param repositorySession The repository session to use.
+ * @return This request for chaining, never {@code null}.
+ */
+ DependencyResolutionRequest setRepositorySession( RepositorySystemSession repositorySession );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionResult.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionResult.java
new file mode 100644
index 00000000..6ad55fae
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionResult.java
@@ -0,0 +1,80 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.DependencyNode;
+
+/**
+ * The result of a project dependency resolution.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface DependencyResolutionResult
+{
+
+ /**
+ * Gets the dependency graph of the project.
+ *
+ * @return The dependency graph or {@code null} if not available.
+ */
+ DependencyNode getDependencyGraph();
+
+ /**
+ * Gets the transitive dependencies of the project that were not excluded by
+ * {@link DependencyResolutionRequest#getResolutionFilter()}. This list is a union of the results from
+ * {@link #getResolvedDependencies()} and {@link #getUnresolvedDependencies()}.
+ *
+ * @return The transitive dependencies, never {@code null}.
+ */
+ List<Dependency> getDependencies();
+
+ /**
+ * Gets the dependencies that were successfully resolved.
+ *
+ * @return The resolved dependencies, never {@code null}.
+ */
+ List<Dependency> getResolvedDependencies();
+
+ /**
+ * Gets the dependencies that could not be resolved.
+ *
+ * @return The unresolved dependencies, never {@code null}.
+ */
+ List<Dependency> getUnresolvedDependencies();
+
+ /**
+ * Gets the errors that occurred while building the dependency graph.
+ *
+ * @return The errors that occurred while building the dependency graph, never {@code null}.
+ */
+ List<Exception> getCollectionErrors();
+
+ /**
+ * Gets the errors that occurred while resolving the specified dependency.
+ *
+ * @param dependency The dependency for which to retrieve the errors, must not be {@code null}.
+ * @return The resolution errors for the specified dependency, never {@code null}.
+ */
+ List<Exception> getResolutionErrors( Dependency dependency );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DuplicateArtifactAttachmentException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DuplicateArtifactAttachmentException.java
new file mode 100644
index 00000000..6121473d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DuplicateArtifactAttachmentException.java
@@ -0,0 +1,64 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * This exception is thrown if an application attempts to attach
+ * two of the same artifacts to a single project.
+ *
+ * @author pgier
+ * @author jdcasey
+ * @todo Make this a checked exception, and modify the API of MavenProjectHelper.
+ * Currently, this modification would create compatibility problems for existing plugins.
+ */
+public class DuplicateArtifactAttachmentException
+ extends RuntimeException
+{
+
+ private static final String DEFAULT_MESSAGE = "Duplicate artifact attachment detected.";
+
+ private Artifact artifact;
+
+ private final MavenProject project;
+
+ public DuplicateArtifactAttachmentException( MavenProject project, Artifact artifact )
+ {
+ super( constructMessage( project, artifact ) );
+ this.project = project;
+ this.artifact = artifact;
+ }
+
+ private static String constructMessage( MavenProject project, Artifact artifact )
+ {
+ return DEFAULT_MESSAGE + " (project: " + project.getId() + "; illegal attachment: " + artifact.getId() + ")";
+ }
+
+ public MavenProject getProject()
+ {
+ return project;
+ }
+
+ public Artifact getArtifact()
+ {
+ return artifact;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DuplicateProjectException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DuplicateProjectException.java
new file mode 100644
index 00000000..f73c46b2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DuplicateProjectException.java
@@ -0,0 +1,80 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+/**
+ * Exception that occurs when the project list contains duplicate projects instead of ignoring one.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class DuplicateProjectException
+ extends Exception
+{
+ private final String projectId;
+
+ private final File existingProjectFile;
+
+ private final File conflictingProjectFile;
+
+ /**
+ * @deprecated use {@link #DuplicateProjectException(String, File, File, String)}
+ */
+ public DuplicateProjectException( String message )
+ {
+ this( null, null, null, message );
+ }
+
+ /**
+ * @deprecated use {@link #DuplicateProjectException(String, File, File, String)}
+ */
+ public DuplicateProjectException( String message, Exception e )
+ {
+ super( message, e );
+ this.projectId = null;
+ this.existingProjectFile = null;
+ this.conflictingProjectFile = null;
+ }
+
+ public DuplicateProjectException( String projectId, File existingProjectFile, File conflictingProjectFile,
+ String message )
+ {
+ super( message );
+ this.projectId = projectId;
+ this.existingProjectFile = existingProjectFile;
+ this.conflictingProjectFile = conflictingProjectFile;
+ }
+
+ public String getProjectId()
+ {
+ return projectId;
+ }
+
+ public File getExistingProjectFile()
+ {
+ return existingProjectFile;
+ }
+
+ public File getConflictingProjectFile()
+ {
+ return conflictingProjectFile;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ExtensionDescriptor.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ExtensionDescriptor.java
new file mode 100644
index 00000000..062b8b77
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ExtensionDescriptor.java
@@ -0,0 +1,88 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Provides metadata about a build extension. <strong>Warning:</strong> This is an internal utility class that is only
+ * public for technical reasons, it is not part of the public API. In particular, this class can be changed or deleted
+ * without prior notice.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ExtensionDescriptor
+{
+
+ private List<String> exportedPackages;
+
+ private List<String> exportedArtifacts;
+
+ ExtensionDescriptor()
+ {
+ // hide constructor
+ }
+
+ public List<String> getExportedPackages()
+ {
+ if ( exportedPackages == null )
+ {
+ exportedPackages = new ArrayList<String>();
+ }
+
+ return exportedPackages;
+ }
+
+ public void setExportedPackages( List<String> exportedPackages )
+ {
+ if ( exportedPackages == null )
+ {
+ this.exportedPackages = null;
+ }
+ else
+ {
+ this.exportedPackages = new ArrayList<String>( exportedPackages );
+ }
+ }
+
+ public List<String> getExportedArtifacts()
+ {
+ if ( exportedArtifacts == null )
+ {
+ exportedArtifacts = new ArrayList<String>();
+ }
+
+ return exportedArtifacts;
+ }
+
+ public void setExportedArtifacts( List<String> exportedArtifacts )
+ {
+ if ( exportedArtifacts == null )
+ {
+ this.exportedArtifacts = null;
+ }
+ else
+ {
+ this.exportedArtifacts = new ArrayList<String>( exportedArtifacts );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ExtensionDescriptorBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ExtensionDescriptorBuilder.java
new file mode 100644
index 00000000..c835eff5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ExtensionDescriptorBuilder.java
@@ -0,0 +1,168 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
+
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * Creates an extension descriptor from some XML stream.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ExtensionDescriptorBuilder
+{
+
+ /**
+ * @since 3.3.0
+ */
+ public String getExtensionDescriptorLocation()
+ {
+ return "META-INF/maven/extension.xml";
+ }
+
+ /**
+ * Extracts the extension descriptor (if any) from the specified JAR file.
+ *
+ * @param extensionJar The JAR file or directory to extract the descriptor from, must not be {@code null}.
+ * @return The extracted descriptor or {@code null} if no descriptor was found.
+ * @throws IOException If the descriptor is present but could not be parsed.
+ */
+ public ExtensionDescriptor build( File extensionJar )
+ throws IOException
+ {
+ ExtensionDescriptor extensionDescriptor = null;
+
+ if ( extensionJar.isFile() )
+ {
+ JarFile pluginJar = new JarFile( extensionJar, false );
+ try
+ {
+ ZipEntry pluginDescriptorEntry = pluginJar.getEntry( getExtensionDescriptorLocation() );
+
+ if ( pluginDescriptorEntry != null )
+ {
+ InputStream is = pluginJar.getInputStream( pluginDescriptorEntry );
+
+ try
+ {
+ extensionDescriptor = build( is );
+ }
+ finally
+ {
+ IOUtil.close( is );
+ }
+ }
+ }
+ finally
+ {
+ pluginJar.close();
+ }
+ }
+ else
+ {
+ File pluginXml = new File( extensionJar, getExtensionDescriptorLocation() );
+
+ if ( pluginXml.canRead() )
+ {
+ InputStream is = new BufferedInputStream( new FileInputStream( pluginXml ) );
+ try
+ {
+ extensionDescriptor = build( is );
+ }
+ finally
+ {
+ IOUtil.close( is );
+ }
+ }
+ }
+
+ return extensionDescriptor;
+ }
+
+ /**
+ * @since 3.3.0
+ */
+ public ExtensionDescriptor build( InputStream is )
+ throws IOException
+ {
+ ExtensionDescriptor extensionDescriptor = new ExtensionDescriptor();
+
+ Xpp3Dom dom;
+ try
+ {
+ dom = Xpp3DomBuilder.build( ReaderFactory.newXmlReader( is ) );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw (IOException) new IOException( e.getMessage() ).initCause( e );
+ }
+
+ if ( !"extension".equals( dom.getName() ) )
+ {
+ throw new IOException( "Unexpected root element \"" + dom.getName() + "\", expected \"extension\"" );
+ }
+
+ extensionDescriptor.setExportedPackages( parseStrings( dom.getChild( "exportedPackages" ) ) );
+
+ extensionDescriptor.setExportedArtifacts( parseStrings( dom.getChild( "exportedArtifacts" ) ) );
+
+ return extensionDescriptor;
+ }
+
+ private List<String> parseStrings( Xpp3Dom dom )
+ {
+ List<String> strings = null;
+
+ if ( dom != null )
+ {
+ strings = new ArrayList<String>();
+
+ for ( Xpp3Dom child : dom.getChildren() )
+ {
+ String string = child.getValue();
+ if ( string != null )
+ {
+ string = string.trim();
+ if ( string.length() > 0 )
+ {
+ strings.add( string );
+ }
+ }
+ }
+ }
+
+ return strings;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/InvalidProjectVersionException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/InvalidProjectVersionException.java
new file mode 100644
index 00000000..5e42ee46
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/InvalidProjectVersionException.java
@@ -0,0 +1,59 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+
+public class InvalidProjectVersionException
+ extends ProjectBuildingException
+{
+
+ private final String locationInPom;
+
+ private final String offendingVersion;
+
+ public InvalidProjectVersionException( String projectId, String locationInPom, String offendingVersion,
+ File pomFile, InvalidVersionSpecificationException cause )
+ {
+ super( projectId, formatMessage( projectId, locationInPom, offendingVersion, cause ), pomFile, cause );
+ this.locationInPom = locationInPom;
+ this.offendingVersion = offendingVersion;
+ }
+
+ private static String formatMessage( String projectId, String locationInPom, String offendingVersion,
+ InvalidVersionSpecificationException cause )
+ {
+ return "Invalid version: " + offendingVersion + " found for: " + locationInPom + " in project: " + projectId
+ + ". Reason: " + cause.getMessage();
+ }
+
+ public String getOffendingVersion()
+ {
+ return offendingVersion;
+ }
+
+ public String getLocationInPom()
+ {
+ return locationInPom;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/MavenProject.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
new file mode 100644
index 00000000..8587a5c3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
@@ -0,0 +1,1976 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.artifact.DependencyResolutionRequiredException;
+// remove once createArtifacts() is removed
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.CiManagement;
+import org.apache.maven.model.Contributor;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.Developer;
+import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.model.Extension;
+import org.apache.maven.model.IssueManagement;
+import org.apache.maven.model.License;
+import org.apache.maven.model.MailingList;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Organization;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.model.PluginManagement;
+import org.apache.maven.model.Prerequisites;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.ReportSet;
+import org.apache.maven.model.Reporting;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.Resource;
+import org.apache.maven.model.Scm;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
+import org.apache.maven.project.artifact.MavenMetadataSource;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * The concern of the project is provide runtime values based on the model.
+ * <p/>
+ * The values in the model remain untouched but during the process of building a project notions like inheritance and
+ * interpolation can be added. This allows to have an entity which is useful in a runtime while preserving the model so
+ * that it can be marshalled and unmarshalled without being tainted by runtime requirements.
+ * <p/>
+ * <p>
+ * With changes during 3.2.2 release MavenProject is closer to being immutable after construction with the removal of
+ * all components from this class, and the upfront construction taken care of entirely by the @{ProjectBuilder}. There
+ * is still the issue of having to run the lifecycle in order to find all the compile source roots and resource
+ * directories but I hope to take care of this during the Maven 4.0 release (jvz).
+ * </p>
+ */
+public class MavenProject
+ implements Cloneable
+{
+ public static final String EMPTY_PROJECT_GROUP_ID = "unknown";
+
+ public static final String EMPTY_PROJECT_ARTIFACT_ID = "empty-project";
+
+ public static final String EMPTY_PROJECT_VERSION = "0";
+
+ private Model model;
+
+ private MavenProject parent;
+
+ private File file;
+
+ private File basedir;
+
+ private Set<Artifact> resolvedArtifacts;
+
+ private ArtifactFilter artifactFilter;
+
+ private Set<Artifact> artifacts;
+
+ private Artifact parentArtifact;
+
+ private Set<Artifact> pluginArtifacts;
+
+ private List<ArtifactRepository> remoteArtifactRepositories;
+
+ private List<ArtifactRepository> pluginArtifactRepositories;
+
+ private List<RemoteRepository> remoteProjectRepositories;
+
+ private List<RemoteRepository> remotePluginRepositories;
+
+ private List<Artifact> attachedArtifacts;
+
+ private MavenProject executionProject;
+
+ private List<MavenProject> collectedProjects;
+
+ private List<String> compileSourceRoots = new ArrayList<String>();
+
+ private List<String> testCompileSourceRoots = new ArrayList<String>();
+
+ private List<String> scriptSourceRoots = new ArrayList<String>();
+
+ private ArtifactRepository releaseArtifactRepository;
+
+ private ArtifactRepository snapshotArtifactRepository;
+
+ private List<Profile> activeProfiles = new ArrayList<Profile>();
+
+ private Map<String, List<String>> injectedProfileIds = new LinkedHashMap<String, List<String>>();
+
+ private Set<Artifact> dependencyArtifacts;
+
+ private Artifact artifact;
+
+ // calculated.
+ private Map<String, Artifact> artifactMap;
+
+ private Model originalModel;
+
+ private Map<String, Artifact> pluginArtifactMap;
+
+ private Set<Artifact> reportArtifacts;
+
+ private Map<String, Artifact> reportArtifactMap;
+
+ private Set<Artifact> extensionArtifacts;
+
+ private Map<String, Artifact> extensionArtifactMap;
+
+ private Map<String, Artifact> managedVersionMap;
+
+ private Map<String, MavenProject> projectReferences = new HashMap<String, MavenProject>();
+
+ private boolean executionRoot;
+
+ private File parentFile;
+
+ private Map<String, Object> context;
+
+ private ClassRealm classRealm;
+
+ private DependencyFilter extensionDependencyFilter;
+
+ private final Set<String> lifecyclePhases = Collections.synchronizedSet( new LinkedHashSet<String>() );
+
+ public MavenProject()
+ {
+ Model model = new Model();
+
+ model.setGroupId( EMPTY_PROJECT_GROUP_ID );
+ model.setArtifactId( EMPTY_PROJECT_ARTIFACT_ID );
+ model.setVersion( EMPTY_PROJECT_VERSION );
+
+ setModel( model );
+ }
+
+ public MavenProject( Model model )
+ {
+ setModel( model );
+ }
+
+ public MavenProject( MavenProject project )
+ {
+ deepCopy( project );
+ }
+
+ public File getParentFile()
+ {
+ return parentFile;
+ }
+
+ public void setParentFile( File parentFile )
+ {
+ this.parentFile = parentFile;
+ }
+
+ // ----------------------------------------------------------------------
+ // Accessors
+ // ----------------------------------------------------------------------
+
+ public Artifact getArtifact()
+ {
+ return artifact;
+ }
+
+ public void setArtifact( Artifact artifact )
+ {
+ this.artifact = artifact;
+ }
+
+ // @todo I would like to get rid of this. jvz.
+ public Model getModel()
+ {
+ return model;
+ }
+
+ /**
+ * Returns the project corresponding to a declared parent.
+ *
+ * @return the parent, or null if no parent is declared or there was an error building it
+ */
+ public MavenProject getParent()
+ {
+ return parent;
+ }
+
+ public void setParent( MavenProject parent )
+ {
+ this.parent = parent;
+ }
+
+ public boolean hasParent()
+ {
+ return getParent() != null;
+ }
+
+ public File getFile()
+ {
+ return file;
+ }
+
+ public void setFile( File file )
+ {
+ this.file = file;
+ this.basedir = file != null ? file.getParentFile() : null;
+ }
+
+ /**
+ * Sets project {@code file} without changing project {@code basedir}.
+ *
+ * @since 3.2.4
+ */
+ public void setPomFile( File file )
+ {
+ this.file = file;
+ }
+
+ public File getBasedir()
+ {
+ return basedir;
+ }
+
+ public void setDependencies( List<Dependency> dependencies )
+ {
+ getModel().setDependencies( dependencies );
+ }
+
+ public List<Dependency> getDependencies()
+ {
+ return getModel().getDependencies();
+ }
+
+ public DependencyManagement getDependencyManagement()
+ {
+ return getModel().getDependencyManagement();
+ }
+
+ // ----------------------------------------------------------------------
+ // Test and compile sourceroots.
+ // ----------------------------------------------------------------------
+
+ private void addPath( List<String> paths, String path )
+ {
+ if ( path != null )
+ {
+ path = path.trim();
+ if ( path.length() > 0 )
+ {
+ File file = new File( path );
+ if ( file.isAbsolute() )
+ {
+ path = file.getAbsolutePath();
+ }
+ else
+ {
+ path = new File( getBasedir(), path ).getAbsolutePath();
+ }
+
+ if ( !paths.contains( path ) )
+ {
+ paths.add( path );
+ }
+ }
+ }
+ }
+
+ public void addCompileSourceRoot( String path )
+ {
+ addPath( getCompileSourceRoots(), path );
+ }
+
+ public void addTestCompileSourceRoot( String path )
+ {
+ addPath( getTestCompileSourceRoots(), path );
+ }
+
+ public List<String> getCompileSourceRoots()
+ {
+ return compileSourceRoots;
+ }
+
+ public List<String> getTestCompileSourceRoots()
+ {
+ return testCompileSourceRoots;
+ }
+
+ public List<String> getCompileClasspathElements()
+ throws DependencyResolutionRequiredException
+ {
+ List<String> list = new ArrayList<String>( getArtifacts().size() + 1 );
+
+ String d = getBuild().getOutputDirectory();
+ if ( d != null )
+ {
+ list.add( d );
+ }
+
+ for ( Artifact a : getArtifacts() )
+ {
+ if ( a.getArtifactHandler().isAddedToClasspath() )
+ {
+ // TODO: let the scope handler deal with this
+ if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() )
+ || Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
+ {
+ addArtifactPath( a, list );
+ }
+ }
+ }
+
+ return list;
+ }
+
+ // TODO: this checking for file == null happens because the resolver has been confused about the root
+ // artifact or not. things like the stupid dummy artifact coming from surefire.
+ public List<String> getTestClasspathElements()
+ throws DependencyResolutionRequiredException
+ {
+ List<String> list = new ArrayList<String>( getArtifacts().size() + 2 );
+
+ String d = getBuild().getTestOutputDirectory();
+ if ( d != null )
+ {
+ list.add( d );
+ }
+
+ d = getBuild().getOutputDirectory();
+ if ( d != null )
+ {
+ list.add( d );
+ }
+
+ for ( Artifact a : getArtifacts() )
+ {
+ if ( a.getArtifactHandler().isAddedToClasspath() )
+ {
+ addArtifactPath( a, list );
+ }
+ }
+
+ return list;
+ }
+
+ public List<String> getRuntimeClasspathElements()
+ throws DependencyResolutionRequiredException
+ {
+ List<String> list = new ArrayList<String>( getArtifacts().size() + 1 );
+
+ String d = getBuild().getOutputDirectory();
+ if ( d != null )
+ {
+ list.add( d );
+ }
+
+ for ( Artifact a : getArtifacts() )
+ {
+ if ( a.getArtifactHandler().isAddedToClasspath()
+ // TODO: let the scope handler deal with this
+ && ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_RUNTIME.equals( a.getScope() ) ) )
+ {
+ addArtifactPath( a, list );
+ }
+ }
+ return list;
+ }
+
+ // ----------------------------------------------------------------------
+ // Delegate to the model
+ // ----------------------------------------------------------------------
+
+ public void setModelVersion( String pomVersion )
+ {
+ getModel().setModelVersion( pomVersion );
+ }
+
+ public String getModelVersion()
+ {
+ return getModel().getModelVersion();
+ }
+
+ public String getId()
+ {
+ return getModel().getId();
+ }
+
+ public void setGroupId( String groupId )
+ {
+ getModel().setGroupId( groupId );
+ }
+
+ public String getGroupId()
+ {
+ String groupId = getModel().getGroupId();
+
+ if ( ( groupId == null ) && ( getModel().getParent() != null ) )
+ {
+ groupId = getModel().getParent().getGroupId();
+ }
+
+ return groupId;
+ }
+
+ public void setArtifactId( String artifactId )
+ {
+ getModel().setArtifactId( artifactId );
+ }
+
+ public String getArtifactId()
+ {
+ return getModel().getArtifactId();
+ }
+
+ public void setName( String name )
+ {
+ getModel().setName( name );
+ }
+
+ public String getName()
+ {
+ // TODO: this should not be allowed to be null.
+ if ( getModel().getName() != null )
+ {
+ return getModel().getName();
+ }
+ else
+ {
+ return getArtifactId();
+ }
+ }
+
+ public void setVersion( String version )
+ {
+ getModel().setVersion( version );
+ }
+
+ public String getVersion()
+ {
+ String version = getModel().getVersion();
+
+ if ( ( version == null ) && ( getModel().getParent() != null ) )
+ {
+ version = getModel().getParent().getVersion();
+ }
+
+ return version;
+ }
+
+ public String getPackaging()
+ {
+ return getModel().getPackaging();
+ }
+
+ public void setPackaging( String packaging )
+ {
+ getModel().setPackaging( packaging );
+ }
+
+ public void setInceptionYear( String inceptionYear )
+ {
+ getModel().setInceptionYear( inceptionYear );
+ }
+
+ public String getInceptionYear()
+ {
+ return getModel().getInceptionYear();
+ }
+
+ public void setUrl( String url )
+ {
+ getModel().setUrl( url );
+ }
+
+ public String getUrl()
+ {
+ return getModel().getUrl();
+ }
+
+ public Prerequisites getPrerequisites()
+ {
+ return getModel().getPrerequisites();
+ }
+
+ public void setIssueManagement( IssueManagement issueManagement )
+ {
+ getModel().setIssueManagement( issueManagement );
+ }
+
+ public CiManagement getCiManagement()
+ {
+ return getModel().getCiManagement();
+ }
+
+ public void setCiManagement( CiManagement ciManagement )
+ {
+ getModel().setCiManagement( ciManagement );
+ }
+
+ public IssueManagement getIssueManagement()
+ {
+ return getModel().getIssueManagement();
+ }
+
+ public void setDistributionManagement( DistributionManagement distributionManagement )
+ {
+ getModel().setDistributionManagement( distributionManagement );
+ }
+
+ public DistributionManagement getDistributionManagement()
+ {
+ return getModel().getDistributionManagement();
+ }
+
+ public void setDescription( String description )
+ {
+ getModel().setDescription( description );
+ }
+
+ public String getDescription()
+ {
+ return getModel().getDescription();
+ }
+
+ public void setOrganization( Organization organization )
+ {
+ getModel().setOrganization( organization );
+ }
+
+ public Organization getOrganization()
+ {
+ return getModel().getOrganization();
+ }
+
+ public void setScm( Scm scm )
+ {
+ getModel().setScm( scm );
+ }
+
+ public Scm getScm()
+ {
+ return getModel().getScm();
+ }
+
+ public void setMailingLists( List<MailingList> mailingLists )
+ {
+ getModel().setMailingLists( mailingLists );
+ }
+
+ public List<MailingList> getMailingLists()
+ {
+ return getModel().getMailingLists();
+ }
+
+ public void addMailingList( MailingList mailingList )
+ {
+ getModel().addMailingList( mailingList );
+ }
+
+ public void setDevelopers( List<Developer> developers )
+ {
+ getModel().setDevelopers( developers );
+ }
+
+ public List<Developer> getDevelopers()
+ {
+ return getModel().getDevelopers();
+ }
+
+ public void addDeveloper( Developer developer )
+ {
+ getModel().addDeveloper( developer );
+ }
+
+ public void setContributors( List<Contributor> contributors )
+ {
+ getModel().setContributors( contributors );
+ }
+
+ public List<Contributor> getContributors()
+ {
+ return getModel().getContributors();
+ }
+
+ public void addContributor( Contributor contributor )
+ {
+ getModel().addContributor( contributor );
+ }
+
+ public void setBuild( Build build )
+ {
+ getModel().setBuild( build );
+ }
+
+ public Build getBuild()
+ {
+ return getModelBuild();
+ }
+
+ public List<Resource> getResources()
+ {
+ return getBuild().getResources();
+ }
+
+ public List<Resource> getTestResources()
+ {
+ return getBuild().getTestResources();
+ }
+
+ public void addResource( Resource resource )
+ {
+ getBuild().addResource( resource );
+ }
+
+ public void addTestResource( Resource testResource )
+ {
+ getBuild().addTestResource( testResource );
+ }
+
+ public void setLicenses( List<License> licenses )
+ {
+ getModel().setLicenses( licenses );
+ }
+
+ public List<License> getLicenses()
+ {
+ return getModel().getLicenses();
+ }
+
+ public void addLicense( License license )
+ {
+ getModel().addLicense( license );
+ }
+
+ public void setArtifacts( Set<Artifact> artifacts )
+ {
+ this.artifacts = artifacts;
+
+ // flush the calculated artifactMap
+ artifactMap = null;
+ }
+
+ /**
+ * All dependencies that this project has, including transitive ones. Contents are lazily populated, so depending on
+ * what phases have run dependencies in some scopes won't be included. eg. if only compile phase has run,
+ * dependencies with scope test won't be included.
+ *
+ * @return {@link Set} &lt; {@link Artifact} >
+ * @see #getDependencyArtifacts() to get only direct dependencies
+ */
+ public Set<Artifact> getArtifacts()
+ {
+ if ( artifacts == null )
+ {
+ if ( artifactFilter == null || resolvedArtifacts == null )
+ {
+ artifacts = new LinkedHashSet<Artifact>();
+ }
+ else
+ {
+ artifacts = new LinkedHashSet<Artifact>( resolvedArtifacts.size() * 2 );
+ for ( Artifact artifact : resolvedArtifacts )
+ {
+ if ( artifactFilter.include( artifact ) )
+ {
+ artifacts.add( artifact );
+ }
+ }
+ }
+ }
+ return artifacts;
+ }
+
+ public Map<String, Artifact> getArtifactMap()
+ {
+ if ( artifactMap == null )
+ {
+ artifactMap = ArtifactUtils.artifactMapByVersionlessId( getArtifacts() );
+ }
+ return artifactMap;
+ }
+
+ public void setPluginArtifacts( Set<Artifact> pluginArtifacts )
+ {
+ this.pluginArtifacts = pluginArtifacts;
+
+ this.pluginArtifactMap = null;
+ }
+
+ public Set<Artifact> getPluginArtifacts()
+ {
+ return pluginArtifacts;
+ }
+
+ public Map<String, Artifact> getPluginArtifactMap()
+ {
+ if ( pluginArtifactMap == null )
+ {
+ pluginArtifactMap = ArtifactUtils.artifactMapByVersionlessId( getPluginArtifacts() );
+ }
+
+ return pluginArtifactMap;
+ }
+
+ public void setParentArtifact( Artifact parentArtifact )
+ {
+ this.parentArtifact = parentArtifact;
+ }
+
+ public Artifact getParentArtifact()
+ {
+ return parentArtifact;
+ }
+
+ public List<Repository> getRepositories()
+ {
+ return getModel().getRepositories();
+ }
+
+ // ----------------------------------------------------------------------
+ // Plugins
+ // ----------------------------------------------------------------------
+
+ public List<Plugin> getBuildPlugins()
+ {
+ if ( getModel().getBuild() == null )
+ {
+ return Collections.emptyList();
+ }
+ return getModel().getBuild().getPlugins();
+ }
+
+ public List<String> getModules()
+ {
+ return getModel().getModules();
+ }
+
+ public PluginManagement getPluginManagement()
+ {
+ PluginManagement pluginMgmt = null;
+
+ Build build = getModel().getBuild();
+ if ( build != null )
+ {
+ pluginMgmt = build.getPluginManagement();
+ }
+
+ return pluginMgmt;
+ }
+
+ private Build getModelBuild()
+ {
+ Build build = getModel().getBuild();
+
+ if ( build == null )
+ {
+ build = new Build();
+
+ getModel().setBuild( build );
+ }
+
+ return build;
+ }
+
+ public void setRemoteArtifactRepositories( List<ArtifactRepository> remoteArtifactRepositories )
+ {
+ this.remoteArtifactRepositories = remoteArtifactRepositories;
+ this.remoteProjectRepositories = RepositoryUtils.toRepos( getRemoteArtifactRepositories() );
+ }
+
+ public List<ArtifactRepository> getRemoteArtifactRepositories()
+ {
+ if ( remoteArtifactRepositories == null )
+ {
+ remoteArtifactRepositories = new ArrayList<ArtifactRepository>();
+ }
+
+ return remoteArtifactRepositories;
+ }
+
+ public void setPluginArtifactRepositories( List<ArtifactRepository> pluginArtifactRepositories )
+ {
+ this.pluginArtifactRepositories = pluginArtifactRepositories;
+ this.remotePluginRepositories = RepositoryUtils.toRepos( getPluginArtifactRepositories() );
+ }
+
+ /**
+ * @return a list of ArtifactRepository objects constructed from the Repository objects returned by
+ * getPluginRepositories.
+ */
+ public List<ArtifactRepository> getPluginArtifactRepositories()
+ {
+ if ( pluginArtifactRepositories == null )
+ {
+ pluginArtifactRepositories = new ArrayList<ArtifactRepository>();
+ }
+
+ return pluginArtifactRepositories;
+ }
+
+ public ArtifactRepository getDistributionManagementArtifactRepository()
+ {
+ return getArtifact().isSnapshot() && ( getSnapshotArtifactRepository() != null )
+ ? getSnapshotArtifactRepository()
+ : getReleaseArtifactRepository();
+ }
+
+ public List<Repository> getPluginRepositories()
+ {
+ return getModel().getPluginRepositories();
+ }
+
+ public List<RemoteRepository> getRemoteProjectRepositories()
+ {
+ return remoteProjectRepositories;
+ }
+
+ public List<RemoteRepository> getRemotePluginRepositories()
+ {
+ return remotePluginRepositories;
+ }
+
+ public void setActiveProfiles( List<Profile> activeProfiles )
+ {
+ this.activeProfiles = activeProfiles;
+ }
+
+ public List<Profile> getActiveProfiles()
+ {
+ return activeProfiles;
+ }
+
+ public void setInjectedProfileIds( String source, List<String> injectedProfileIds )
+ {
+ if ( injectedProfileIds != null )
+ {
+ this.injectedProfileIds.put( source, new ArrayList<String>( injectedProfileIds ) );
+ }
+ else
+ {
+ this.injectedProfileIds.remove( source );
+ }
+ }
+
+ /**
+ * Gets the identifiers of all profiles that contributed to this project's effective model. This includes active
+ * profiles from the project's POM and all its parent POMs as well as from external sources like the
+ * {@code settings.xml}. The profile identifiers are grouped by the identifier of their source, e.g.
+ * {@code <groupId>:<artifactId>:<version>} for a POM profile or {@code external} for profiles from the
+ * {@code settings.xml}.
+ *
+ * @return The identifiers of all injected profiles, indexed by the source from which the profiles originated, never
+ * {@code null}.
+ */
+ public Map<String, List<String>> getInjectedProfileIds()
+ {
+ return this.injectedProfileIds;
+ }
+
+ /**
+ * Add or replace an artifact. This method is now deprecated. Use the @{MavenProjectHelper} to attach artifacts to a
+ * project. In spite of the 'throws' declaration on this API, this method has never thrown an exception since Maven
+ * 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
+ * the artifact, so that plugins (e.g. shade) can change the pathname of the file for a particular set of
+ * coordinates.
+ *
+ * @param artifact the artifact to add or replace.
+ * @throws DuplicateArtifactAttachmentException
+ */
+ public void addAttachedArtifact( Artifact artifact )
+ throws DuplicateArtifactAttachmentException
+ {
+ getAttachedArtifacts().add( artifact );
+ }
+
+ public List<Artifact> getAttachedArtifacts()
+ {
+ if ( attachedArtifacts == null )
+ {
+ attachedArtifacts = new ArrayList<Artifact>();
+ }
+ return attachedArtifacts;
+ }
+
+ public Xpp3Dom getGoalConfiguration( String pluginGroupId, String pluginArtifactId, String executionId,
+ String goalId )
+ {
+ Xpp3Dom dom = null;
+
+ if ( getBuildPlugins() != null )
+ {
+ for ( Plugin plugin : getBuildPlugins() )
+ {
+ if ( pluginGroupId.equals( plugin.getGroupId() ) && pluginArtifactId.equals( plugin.getArtifactId() ) )
+ {
+ dom = (Xpp3Dom) plugin.getConfiguration();
+
+ if ( executionId != null )
+ {
+ PluginExecution execution = plugin.getExecutionsAsMap().get( executionId );
+ if ( execution != null )
+ {
+ // NOTE: The PluginConfigurationExpander already merged the plugin-level config in
+ dom = (Xpp3Dom) execution.getConfiguration();
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ if ( dom != null )
+ {
+ // make a copy so the original in the POM doesn't get messed with
+ dom = new Xpp3Dom( dom );
+ }
+
+ return dom;
+ }
+
+ public MavenProject getExecutionProject()
+ {
+ return ( executionProject == null ? this : executionProject );
+ }
+
+ public void setExecutionProject( MavenProject executionProject )
+ {
+ this.executionProject = executionProject;
+ }
+
+ public List<MavenProject> getCollectedProjects()
+ {
+ return collectedProjects;
+ }
+
+ public void setCollectedProjects( List<MavenProject> collectedProjects )
+ {
+ this.collectedProjects = collectedProjects;
+ }
+
+ /**
+ * Direct dependencies that this project has.
+ *
+ * @return {@link Set} &lt; {@link Artifact} >
+ * @see #getArtifacts() to get all transitive dependencies
+ */
+ public Set<Artifact> getDependencyArtifacts()
+ {
+ return dependencyArtifacts;
+ }
+
+ public void setDependencyArtifacts( Set<Artifact> dependencyArtifacts )
+ {
+ this.dependencyArtifacts = dependencyArtifacts;
+ }
+
+ public void setReleaseArtifactRepository( ArtifactRepository releaseArtifactRepository )
+ {
+ this.releaseArtifactRepository = releaseArtifactRepository;
+ }
+
+ public void setSnapshotArtifactRepository( ArtifactRepository snapshotArtifactRepository )
+ {
+ this.snapshotArtifactRepository = snapshotArtifactRepository;
+ }
+
+ public void setOriginalModel( Model originalModel )
+ {
+ this.originalModel = originalModel;
+ }
+
+ public Model getOriginalModel()
+ {
+ return originalModel;
+ }
+
+ public void setManagedVersionMap( Map<String, Artifact> map )
+ {
+ managedVersionMap = map;
+ }
+
+ public Map<String, Artifact> getManagedVersionMap()
+ {
+ return managedVersionMap;
+ }
+
+ @Override
+ public boolean equals( Object other )
+ {
+ if ( other == this )
+ {
+ return true;
+ }
+ else if ( !( other instanceof MavenProject ) )
+ {
+ return false;
+ }
+
+ MavenProject that = (MavenProject) other;
+
+ return eq( getArtifactId(), that.getArtifactId() ) && eq( getGroupId(), that.getGroupId() )
+ && eq( getVersion(), that.getVersion() );
+ }
+
+ private static <T> boolean eq( T s1, T s2 )
+ {
+ return ( s1 != null ) ? s1.equals( s2 ) : s2 == null;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int hash = 17;
+ hash = 31 * hash + getGroupId().hashCode();
+ hash = 31 * hash + getArtifactId().hashCode();
+ hash = 31 * hash + getVersion().hashCode();
+ return hash;
+ }
+
+ public List<Extension> getBuildExtensions()
+ {
+ Build build = getBuild();
+ if ( ( build == null ) || ( build.getExtensions() == null ) )
+ {
+ return Collections.emptyList();
+ }
+ else
+ {
+ return build.getExtensions();
+ }
+ }
+
+ public void addProjectReference( MavenProject project )
+ {
+ projectReferences.put( getProjectReferenceId( project.getGroupId(), project.getArtifactId(),
+ project.getVersion() ), project );
+ }
+
+ public Properties getProperties()
+ {
+ return getModel().getProperties();
+ }
+
+ public List<String> getFilters()
+ {
+ return getBuild().getFilters();
+ }
+
+ public Map<String, MavenProject> getProjectReferences()
+ {
+ return projectReferences;
+ }
+
+ public boolean isExecutionRoot()
+ {
+ return executionRoot;
+ }
+
+ public void setExecutionRoot( boolean executionRoot )
+ {
+ this.executionRoot = executionRoot;
+ }
+
+ public String getDefaultGoal()
+ {
+ return getBuild() != null ? getBuild().getDefaultGoal() : null;
+ }
+
+ public Plugin getPlugin( String pluginKey )
+ {
+ return getBuild().getPluginsAsMap().get( pluginKey );
+ }
+
+ /**
+ * Default toString
+ */
+ @Override
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder( 128 );
+ sb.append( "MavenProject: " );
+ sb.append( getGroupId() );
+ sb.append( ":" );
+ sb.append( getArtifactId() );
+ sb.append( ":" );
+ sb.append( getVersion() );
+ sb.append( " @ " );
+
+ try
+ {
+ sb.append( getFile().getPath() );
+ }
+ catch ( NullPointerException e )
+ {
+ // don't log it.
+ }
+
+ return sb.toString();
+ }
+
+ /**
+ * @throws CloneNotSupportedException
+ * @since 2.0.9
+ */
+ @Override
+ public MavenProject clone()
+ {
+ MavenProject clone;
+ try
+ {
+ clone = (MavenProject) super.clone();
+ }
+ catch ( CloneNotSupportedException e )
+ {
+ throw new UnsupportedOperationException( e );
+ }
+
+ clone.deepCopy( this );
+
+ return clone;
+ }
+
+ public void setModel( Model model )
+ {
+ this.model = model;
+ }
+
+ protected void setAttachedArtifacts( List<Artifact> attachedArtifacts )
+ {
+ this.attachedArtifacts = attachedArtifacts;
+ }
+
+ protected void setCompileSourceRoots( List<String> compileSourceRoots )
+ {
+ this.compileSourceRoots = compileSourceRoots;
+ }
+
+ protected void setTestCompileSourceRoots( List<String> testCompileSourceRoots )
+ {
+ this.testCompileSourceRoots = testCompileSourceRoots;
+ }
+
+ protected ArtifactRepository getReleaseArtifactRepository()
+ {
+ return releaseArtifactRepository;
+ }
+
+ protected ArtifactRepository getSnapshotArtifactRepository()
+ {
+ return snapshotArtifactRepository;
+ }
+
+ private void deepCopy( MavenProject project )
+ {
+ // disown the parent
+
+ // copy fields
+ setFile( project.getFile() );
+
+ // don't need a deep copy, they don't get modified or added/removed to/from - but make them unmodifiable to be
+ // sure!
+ if ( project.getDependencyArtifacts() != null )
+ {
+ setDependencyArtifacts( Collections.unmodifiableSet( project.getDependencyArtifacts() ) );
+ }
+
+ if ( project.getArtifacts() != null )
+ {
+ setArtifacts( Collections.unmodifiableSet( project.getArtifacts() ) );
+ }
+
+ if ( project.getParentFile() != null )
+ {
+ parentFile = new File( project.getParentFile().getAbsolutePath() );
+ }
+
+ if ( project.getPluginArtifacts() != null )
+ {
+ setPluginArtifacts( Collections.unmodifiableSet( project.getPluginArtifacts() ) );
+ }
+
+ if ( project.getReportArtifacts() != null )
+ {
+ setReportArtifacts( Collections.unmodifiableSet( project.getReportArtifacts() ) );
+ }
+
+ if ( project.getExtensionArtifacts() != null )
+ {
+ setExtensionArtifacts( Collections.unmodifiableSet( project.getExtensionArtifacts() ) );
+ }
+
+ setParentArtifact( ( project.getParentArtifact() ) );
+
+ if ( project.getRemoteArtifactRepositories() != null )
+ {
+ setRemoteArtifactRepositories( Collections.unmodifiableList( project.getRemoteArtifactRepositories() ) );
+ }
+
+ if ( project.getPluginArtifactRepositories() != null )
+ {
+ setPluginArtifactRepositories( Collections.unmodifiableList( project.getPluginArtifactRepositories() ) );
+ }
+
+ if ( project.getActiveProfiles() != null )
+ {
+ setActiveProfiles( ( Collections.unmodifiableList( project.getActiveProfiles() ) ) );
+ }
+
+ if ( project.getAttachedArtifacts() != null )
+ {
+ // clone properties modifyable by plugins in a forked lifecycle
+ setAttachedArtifacts( new ArrayList<Artifact>( project.getAttachedArtifacts() ) );
+ }
+
+ if ( project.getCompileSourceRoots() != null )
+ {
+ // clone source roots
+ setCompileSourceRoots( ( new ArrayList<String>( project.getCompileSourceRoots() ) ) );
+ }
+
+ if ( project.getTestCompileSourceRoots() != null )
+ {
+ setTestCompileSourceRoots( ( new ArrayList<String>( project.getTestCompileSourceRoots() ) ) );
+ }
+
+ if ( project.getScriptSourceRoots() != null )
+ {
+ setScriptSourceRoots( ( new ArrayList<String>( project.getScriptSourceRoots() ) ) );
+ }
+
+ if ( project.getModel() != null )
+ {
+ setModel( project.getModel().clone() );
+ }
+
+ if ( project.getOriginalModel() != null )
+ {
+ setOriginalModel( project.getOriginalModel() );
+ }
+
+ setExecutionRoot( project.isExecutionRoot() );
+
+ if ( project.getArtifact() != null )
+ {
+ setArtifact( ArtifactUtils.copyArtifact( project.getArtifact() ) );
+ }
+
+ if ( project.getManagedVersionMap() != null )
+ {
+ setManagedVersionMap( new HashMap<String, Artifact>( project.getManagedVersionMap() ) );
+ }
+
+ lifecyclePhases.addAll( project.lifecyclePhases );
+ }
+
+ private void addArtifactPath( Artifact artifact, List<String> classpath )
+ {
+ File file = artifact.getFile();
+ if ( file != null )
+ {
+ classpath.add( file.getPath() );
+ }
+ }
+
+ private static String getProjectReferenceId( String groupId, String artifactId, String version )
+ {
+ StringBuilder buffer = new StringBuilder( 128 );
+ buffer.append( groupId ).append( ':' ).append( artifactId ).append( ':' ).append( version );
+ return buffer.toString();
+ }
+
+ /**
+ * Sets the value of the context value of this project identified by the given key. If the supplied value is
+ * <code>null</code>, the context value is removed from this project. Context values are intended to allow core
+ * extensions to associate derived state with project instances.
+ */
+ public void setContextValue( String key, Object value )
+ {
+ if ( context == null )
+ {
+ context = new HashMap<String, Object>();
+ }
+ if ( value != null )
+ {
+ context.put( key, value );
+ }
+ else
+ {
+ context.remove( key );
+ }
+ }
+
+ /**
+ * Returns context value of this project associated with the given key or null if this project has no such value.
+ */
+ public Object getContextValue( String key )
+ {
+ if ( context == null )
+ {
+ return null;
+ }
+ return context.get( key );
+ }
+
+ /**
+ * Sets the project's class realm. <strong>Warning:</strong> This is an internal utility method that is only public
+ * for technical reasons, it is not part of the public API. In particular, this method can be changed or deleted
+ * without prior notice and must not be used by plugins.
+ *
+ * @param classRealm The class realm hosting the build extensions of this project, may be {@code null}.
+ */
+ public void setClassRealm( ClassRealm classRealm )
+ {
+ this.classRealm = classRealm;
+ }
+
+ /**
+ * Gets the project's class realm. This class realm hosts the build extensions of the project.
+ * <strong>Warning:</strong> This is an internal utility method that is only public for technical reasons, it is not
+ * part of the public API. In particular, this method can be changed or deleted without prior notice and must not be
+ * used by plugins.
+ *
+ * @return The project's class realm or {@code null}.
+ */
+ public ClassRealm getClassRealm()
+ {
+ return classRealm;
+ }
+
+ /**
+ * Sets the artifact filter used to exclude shared extension artifacts from plugin realms. <strong>Warning:</strong>
+ * This is an internal utility method that is only public for technical reasons, it is not part of the public API.
+ * In particular, this method can be changed or deleted without prior notice and must not be used by plugins.
+ *
+ * @param extensionDependencyFilter The dependency filter to apply to plugins, may be {@code null}.
+ */
+ public void setExtensionDependencyFilter( DependencyFilter extensionDependencyFilter )
+ {
+ this.extensionDependencyFilter = extensionDependencyFilter;
+ }
+
+ /**
+ * Gets the dependency filter used to exclude shared extension artifacts from plugin realms.
+ * <strong>Warning:</strong> This is an internal utility method that is only public for technical reasons, it is not
+ * part of the public API. In particular, this method can be changed or deleted without prior notice and must not be
+ * used by plugins.
+ *
+ * @return The dependency filter or {@code null}.
+ */
+ public DependencyFilter getExtensionDependencyFilter()
+ {
+ return extensionDependencyFilter;
+ }
+
+ /**
+ * Sets the transitive dependency artifacts that have been resolved/collected for this project.
+ * <strong>Warning:</strong> This is an internal utility method that is only public for technical reasons, it is not
+ * part of the public API. In particular, this method can be changed or deleted without prior notice and must not be
+ * used by plugins.
+ *
+ * @param artifacts The set of artifacts, may be {@code null}.
+ */
+ public void setResolvedArtifacts( Set<Artifact> artifacts )
+ {
+ this.resolvedArtifacts = ( artifacts != null ) ? artifacts : Collections.<Artifact>emptySet();
+ this.artifacts = null;
+ this.artifactMap = null;
+ }
+
+ /**
+ * Sets the scope filter to select the artifacts being exposed to the currently executed mojo.
+ * <strong>Warning:</strong> This is an internal utility method that is only public for technical reasons, it is not
+ * part of the public API. In particular, this method can be changed or deleted without prior notice and must not be
+ * used by plugins.
+ *
+ * @param artifactFilter The artifact filter, may be {@code null} to exclude all artifacts.
+ */
+ public void setArtifactFilter( ArtifactFilter artifactFilter )
+ {
+ this.artifactFilter = artifactFilter;
+ this.artifacts = null;
+ this.artifactMap = null;
+ }
+
+ /**
+ * <strong>Warning:</strong> This is an internal utility method that is only public for technical reasons, it is not
+ * part of the public API. In particular, this method can be changed or deleted without prior notice and must not be
+ * used by plugins.
+ *
+ * @param phase The phase to check for, must not be {@code null}.
+ * @return {@code true} if the phase has been seen.
+ */
+ public boolean hasLifecyclePhase( String phase )
+ {
+ return lifecyclePhases.contains( phase );
+ }
+
+ /**
+ * <strong>Warning:</strong> This is an internal utility method that is only public for technical reasons, it is not
+ * part of the public API. In particular, this method can be changed or deleted without prior notice and must not be
+ * used by plugins.
+ *
+ * @param lifecyclePhase The lifecycle phase to add, must not be {@code null}.
+ */
+ public void addLifecyclePhase( String lifecyclePhase )
+ {
+ lifecyclePhases.add( lifecyclePhase );
+ }
+
+ // ----------------------------------------------------------------------------------------------------------------
+ //
+ //
+ // D E P R E C A T E D
+ //
+ //
+ // ----------------------------------------------------------------------------------------------------------------
+ //
+ // Everything below will be removed for Maven 4.0.0
+ //
+ // ----------------------------------------------------------------------------------------------------------------
+
+ private ProjectBuildingRequest projectBuilderConfiguration;
+
+ private Map<String, String> moduleAdjustments;
+
+ @Deprecated // This appears only to be used in test code
+ public String getModulePathAdjustment( MavenProject moduleProject )
+ throws IOException
+ {
+ // FIXME: This is hacky. What if module directory doesn't match artifactid, and parent
+ // is coming from the repository??
+ String module = moduleProject.getArtifactId();
+
+ File moduleFile = moduleProject.getFile();
+
+ if ( moduleFile != null )
+ {
+ File moduleDir = moduleFile.getCanonicalFile().getParentFile();
+
+ module = moduleDir.getName();
+ }
+
+ if ( moduleAdjustments == null )
+ {
+ moduleAdjustments = new HashMap<String, String>();
+
+ List<String> modules = getModules();
+ if ( modules != null )
+ {
+ for ( String modulePath : modules )
+ {
+ String moduleName = modulePath;
+
+ if ( moduleName.endsWith( "/" ) || moduleName.endsWith( "\\" ) )
+ {
+ moduleName = moduleName.substring( 0, moduleName.length() - 1 );
+ }
+
+ int lastSlash = moduleName.lastIndexOf( '/' );
+
+ if ( lastSlash < 0 )
+ {
+ lastSlash = moduleName.lastIndexOf( '\\' );
+ }
+
+ String adjustment = null;
+
+ if ( lastSlash > -1 )
+ {
+ moduleName = moduleName.substring( lastSlash + 1 );
+ adjustment = modulePath.substring( 0, lastSlash );
+ }
+
+ moduleAdjustments.put( moduleName, adjustment );
+ }
+ }
+ }
+
+ return moduleAdjustments.get( module );
+ }
+
+ @Deprecated
+ public Set<Artifact> createArtifacts( ArtifactFactory artifactFactory, String inheritedScope,
+ ArtifactFilter filter )
+ throws InvalidDependencyVersionException
+ {
+ return MavenMetadataSource.createArtifacts( artifactFactory, getDependencies(), inheritedScope, filter, this );
+ }
+
+ @Deprecated
+ protected void setScriptSourceRoots( List<String> scriptSourceRoots )
+ {
+ this.scriptSourceRoots = scriptSourceRoots;
+ }
+
+ @Deprecated
+ public void addScriptSourceRoot( String path )
+ {
+ if ( path != null )
+ {
+ path = path.trim();
+ if ( path.length() != 0 )
+ {
+ if ( !getScriptSourceRoots().contains( path ) )
+ {
+ getScriptSourceRoots().add( path );
+ }
+ }
+ }
+ }
+
+ @Deprecated
+ public List<String> getScriptSourceRoots()
+ {
+ return scriptSourceRoots;
+ }
+
+ @Deprecated
+ public List<Artifact> getCompileArtifacts()
+ {
+ List<Artifact> list = new ArrayList<Artifact>( getArtifacts().size() );
+
+ for ( Artifact a : getArtifacts() )
+ {
+ // TODO: classpath check doesn't belong here - that's the other method
+ if ( a.getArtifactHandler().isAddedToClasspath() )
+ {
+ // TODO: let the scope handler deal with this
+ if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() )
+ || Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
+ {
+ list.add( a );
+ }
+ }
+ }
+ return list;
+ }
+
+ @Deprecated
+ public List<Dependency> getCompileDependencies()
+ {
+ Set<Artifact> artifacts = getArtifacts();
+
+ if ( ( artifacts == null ) || artifacts.isEmpty() )
+ {
+ return Collections.emptyList();
+ }
+
+ List<Dependency> list = new ArrayList<Dependency>( artifacts.size() );
+
+ for ( Artifact a : getArtifacts() )
+ {
+ // TODO: let the scope handler deal with this
+ if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() )
+ || Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
+ {
+ Dependency dependency = new Dependency();
+
+ dependency.setArtifactId( a.getArtifactId() );
+ dependency.setGroupId( a.getGroupId() );
+ dependency.setVersion( a.getVersion() );
+ dependency.setScope( a.getScope() );
+ dependency.setType( a.getType() );
+ dependency.setClassifier( a.getClassifier() );
+
+ list.add( dependency );
+ }
+ }
+ return list;
+ }
+
+ @Deprecated
+ public List<Artifact> getTestArtifacts()
+ {
+ List<Artifact> list = new ArrayList<Artifact>( getArtifacts().size() );
+
+ for ( Artifact a : getArtifacts() )
+ {
+ // TODO: classpath check doesn't belong here - that's the other method
+ if ( a.getArtifactHandler().isAddedToClasspath() )
+ {
+ list.add( a );
+ }
+ }
+ return list;
+ }
+
+ @Deprecated
+ public List<Dependency> getTestDependencies()
+ {
+ Set<Artifact> artifacts = getArtifacts();
+
+ if ( ( artifacts == null ) || artifacts.isEmpty() )
+ {
+ return Collections.emptyList();
+ }
+
+ List<Dependency> list = new ArrayList<Dependency>( artifacts.size() );
+
+ for ( Artifact a : getArtifacts() )
+ {
+ Dependency dependency = new Dependency();
+
+ dependency.setArtifactId( a.getArtifactId() );
+ dependency.setGroupId( a.getGroupId() );
+ dependency.setVersion( a.getVersion() );
+ dependency.setScope( a.getScope() );
+ dependency.setType( a.getType() );
+ dependency.setClassifier( a.getClassifier() );
+
+ list.add( dependency );
+ }
+ return list;
+ }
+
+ @Deprecated // used by the Maven ITs
+ public List<Dependency> getRuntimeDependencies()
+ {
+ Set<Artifact> artifacts = getArtifacts();
+
+ if ( ( artifacts == null ) || artifacts.isEmpty() )
+ {
+ return Collections.emptyList();
+ }
+
+ List<Dependency> list = new ArrayList<Dependency>( artifacts.size() );
+
+ for ( Artifact a : getArtifacts() )
+ {
+ // TODO: let the scope handler deal with this
+ if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_RUNTIME.equals( a.getScope() ) )
+ {
+ Dependency dependency = new Dependency();
+
+ dependency.setArtifactId( a.getArtifactId() );
+ dependency.setGroupId( a.getGroupId() );
+ dependency.setVersion( a.getVersion() );
+ dependency.setScope( a.getScope() );
+ dependency.setType( a.getType() );
+ dependency.setClassifier( a.getClassifier() );
+
+ list.add( dependency );
+ }
+ }
+ return list;
+ }
+
+ @Deprecated
+ public List<Artifact> getRuntimeArtifacts()
+ {
+ List<Artifact> list = new ArrayList<Artifact>( getArtifacts().size() );
+
+ for ( Artifact a : getArtifacts() )
+ {
+ // TODO: classpath check doesn't belong here - that's the other method
+ if ( a.getArtifactHandler().isAddedToClasspath()
+ // TODO: let the scope handler deal with this
+ && ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_RUNTIME.equals( a.getScope() ) ) )
+ {
+ list.add( a );
+ }
+ }
+ return list;
+ }
+
+ @Deprecated
+ public List<String> getSystemClasspathElements()
+ throws DependencyResolutionRequiredException
+ {
+ List<String> list = new ArrayList<String>( getArtifacts().size() );
+
+ String d = getBuild().getOutputDirectory();
+ if ( d != null )
+ {
+ list.add( d );
+ }
+
+ for ( Artifact a : getArtifacts() )
+ {
+ if ( a.getArtifactHandler().isAddedToClasspath() )
+ {
+ // TODO: let the scope handler deal with this
+ if ( Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
+ {
+ addArtifactPath( a, list );
+ }
+ }
+ }
+ return list;
+ }
+
+ @Deprecated
+ public List<Artifact> getSystemArtifacts()
+ {
+ List<Artifact> list = new ArrayList<Artifact>( getArtifacts().size() );
+
+ for ( Artifact a : getArtifacts() )
+ {
+ // TODO: classpath check doesn't belong here - that's the other method
+ if ( a.getArtifactHandler().isAddedToClasspath() )
+ {
+ // TODO: let the scope handler deal with this
+ if ( Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
+ {
+ list.add( a );
+ }
+ }
+ }
+ return list;
+ }
+
+ @Deprecated
+ public List<Dependency> getSystemDependencies()
+ {
+ Set<Artifact> artifacts = getArtifacts();
+
+ if ( ( artifacts == null ) || artifacts.isEmpty() )
+ {
+ return Collections.emptyList();
+ }
+
+ List<Dependency> list = new ArrayList<Dependency>( artifacts.size() );
+
+ for ( Artifact a : getArtifacts() )
+ {
+ // TODO: let the scope handler deal with this
+ if ( Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
+ {
+ Dependency dependency = new Dependency();
+
+ dependency.setArtifactId( a.getArtifactId() );
+ dependency.setGroupId( a.getGroupId() );
+ dependency.setVersion( a.getVersion() );
+ dependency.setScope( a.getScope() );
+ dependency.setType( a.getType() );
+ dependency.setClassifier( a.getClassifier() );
+
+ list.add( dependency );
+ }
+ }
+ return list;
+ }
+
+ @Deprecated
+ public void setReporting( Reporting reporting )
+ {
+ getModel().setReporting( reporting );
+ }
+
+ @Deprecated
+ public Reporting getReporting()
+ {
+ return getModel().getReporting();
+ }
+
+ @Deprecated
+ public void setReportArtifacts( Set<Artifact> reportArtifacts )
+ {
+ this.reportArtifacts = reportArtifacts;
+
+ reportArtifactMap = null;
+ }
+
+ @Deprecated
+ public Set<Artifact> getReportArtifacts()
+ {
+ return reportArtifacts;
+ }
+
+ @Deprecated
+ public Map<String, Artifact> getReportArtifactMap()
+ {
+ if ( reportArtifactMap == null )
+ {
+ reportArtifactMap = ArtifactUtils.artifactMapByVersionlessId( getReportArtifacts() );
+ }
+
+ return reportArtifactMap;
+ }
+
+ @Deprecated
+ public void setExtensionArtifacts( Set<Artifact> extensionArtifacts )
+ {
+ this.extensionArtifacts = extensionArtifacts;
+
+ extensionArtifactMap = null;
+ }
+
+ @Deprecated
+ public Set<Artifact> getExtensionArtifacts()
+ {
+ return extensionArtifacts;
+ }
+
+ @Deprecated
+ public Map<String, Artifact> getExtensionArtifactMap()
+ {
+ if ( extensionArtifactMap == null )
+ {
+ extensionArtifactMap = ArtifactUtils.artifactMapByVersionlessId( getExtensionArtifacts() );
+ }
+
+ return extensionArtifactMap;
+ }
+
+ @Deprecated
+ public List<ReportPlugin> getReportPlugins()
+ {
+ if ( getModel().getReporting() == null )
+ {
+ return Collections.emptyList();
+ }
+ return getModel().getReporting().getPlugins();
+
+ }
+
+ @Deprecated
+ public Xpp3Dom getReportConfiguration( String pluginGroupId, String pluginArtifactId, String reportSetId )
+ {
+ Xpp3Dom dom = null;
+
+ // ----------------------------------------------------------------------
+ // I would like to be able to lookup the Mojo object using a key but
+ // we have a limitation in modello that will be remedied shortly. So
+ // for now I have to iterate through and see what we have.
+ // ----------------------------------------------------------------------
+
+ if ( getReportPlugins() != null )
+ {
+ for ( ReportPlugin plugin : getReportPlugins() )
+ {
+ if ( pluginGroupId.equals( plugin.getGroupId() ) && pluginArtifactId.equals( plugin.getArtifactId() ) )
+ {
+ dom = (Xpp3Dom) plugin.getConfiguration();
+
+ if ( reportSetId != null )
+ {
+ ReportSet reportSet = plugin.getReportSetsAsMap().get( reportSetId );
+ if ( reportSet != null )
+ {
+ Xpp3Dom executionConfiguration = (Xpp3Dom) reportSet.getConfiguration();
+ if ( executionConfiguration != null )
+ {
+ Xpp3Dom newDom = new Xpp3Dom( executionConfiguration );
+ dom = Xpp3Dom.mergeXpp3Dom( newDom, dom );
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ if ( dom != null )
+ {
+ // make a copy so the original in the POM doesn't get messed with
+ dom = new Xpp3Dom( dom );
+ }
+
+ return dom;
+ }
+
+ /**
+ * @deprecated Use MavenProjectHelper.attachArtifact(..) instead.
+ */
+ @Deprecated
+ public void attachArtifact( String type, String classifier, File file )
+ {
+ }
+
+ /**
+ * @deprecated Use {@link org.apache.maven.model.io.ModelWriter}.
+ */
+ @Deprecated
+ public void writeModel( Writer writer )
+ throws IOException
+ {
+ MavenXpp3Writer pomWriter = new MavenXpp3Writer();
+ pomWriter.write( writer, getModel() );
+ }
+
+ /**
+ * @deprecated Use {@link org.apache.maven.model.io.ModelWriter}.
+ */
+ @Deprecated
+ public void writeOriginalModel( Writer writer )
+ throws IOException
+ {
+ MavenXpp3Writer pomWriter = new MavenXpp3Writer();
+ pomWriter.write( writer, getOriginalModel() );
+ }
+
+ @Deprecated
+ public Artifact replaceWithActiveArtifact( Artifact pluginArtifact )
+ {
+ return pluginArtifact;
+ }
+
+ /**
+ * Gets the project building request from which this project instance was created. <strong>Warning:</strong> This is
+ * an utility method that is meant to assist integrators of Maven, it must not be used by Maven plugins.
+ *
+ * @return The project building request or {@code null}.
+ * @since 2.1
+ */
+ @Deprecated
+ public ProjectBuildingRequest getProjectBuildingRequest()
+ {
+ return projectBuilderConfiguration;
+ }
+
+ /**
+ * Sets the project building request from which this project instance was created. <strong>Warning:</strong> This is
+ * an utility method that is meant to assist integrators of Maven, it must not be used by Maven plugins.
+ *
+ * @param projectBuildingRequest The project building request, may be {@code null}.
+ * @since 2.1
+ */
+ // used by maven-dependency-tree
+ @Deprecated
+ public void setProjectBuildingRequest( ProjectBuildingRequest projectBuildingRequest )
+ {
+ this.projectBuilderConfiguration = projectBuildingRequest;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/MavenProjectHelper.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/MavenProjectHelper.java
new file mode 100644
index 00000000..0b54c004
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/MavenProjectHelper.java
@@ -0,0 +1,76 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * Convenience interface for plugins to add or replace artifacts and resources on projects.
+ */
+public interface MavenProjectHelper
+{
+ String ROLE = MavenProjectHelper.class.getName();
+
+ /**
+ * See {@link #attachArtifact(MavenProject, String, String, java.io.File)}, but with type set to null.
+ * @param project project reference.
+ * @param artifactFile artifact file.
+ * @param artifactClassifier artifact classifier.
+ */
+ void attachArtifact( MavenProject project, File artifactFile, String artifactClassifier );
+
+ /**
+ * * See {@link #attachArtifact(MavenProject, String, String, java.io.File)}, but with classifier set to null.
+ * @param project project reference.
+ * @param artifactType artifact type.
+ * @param artifactFile arrifact file.
+ */
+ void attachArtifact( MavenProject project, String artifactType, File artifactFile );
+
+ /**
+ * Add or replace an artifact to the current project.
+ * @param project the project reference.
+ * @param artifactType the type (e.g. jar) or null.
+ * @param artifactClassifier the classifier or null.
+ * @param artifactFile the file for the artifact.
+ */
+ void attachArtifact( MavenProject project, String artifactType, String artifactClassifier, File artifactFile );
+
+ /**
+ * Add a resource directory to the project.
+ * @param project project reference.
+ * @param resourceDirectory directory.
+ * @param includes include patterns.
+ * @param excludes exclude patterns.
+ */
+ void addResource( MavenProject project, String resourceDirectory, List<String> includes, List<String> excludes );
+
+ /**
+ * Add a test resource directory to the project.
+ * @param project project reference.
+ * @param resourceDirectory directory.
+ * @param includes include patterns.
+ * @param excludes exclude patterns.
+ */
+ void addTestResource( MavenProject project, String resourceDirectory, List<String> includes,
+ List<String> excludes );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuilder.java
new file mode 100644
index 00000000..4ac83972
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuilder.java
@@ -0,0 +1,98 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.model.building.ModelSource;
+
+/**
+ * Builds in-memory descriptions of projects.
+ */
+public interface ProjectBuilder
+{
+
+ /**
+ * Builds a project descriptor from the specified POM file.
+ *
+ * @param projectFile The POM file to build the project from, must not be {@code null}.
+ * @param request The project building request that holds further parameters, must not be {@code null}.
+ * @return The result of the project building, never {@code null}.
+ * @throws ProjectBuildingException If the project descriptor could not be successfully built.
+ */
+ ProjectBuildingResult build( File projectFile, ProjectBuildingRequest request )
+ throws ProjectBuildingException;
+
+ /**
+ * Builds a project descriptor for the specified artifact.
+ *
+ * @param projectArtifact The POM artifact to build the project from, must not be {@code null}.
+ * @param request The project building request that holds further parameters, must not be {@code null}.
+ * @return The result of the project building, never {@code null}.
+ * @throws ProjectBuildingException If the project descriptor could not be successfully built.
+ */
+ ProjectBuildingResult build( Artifact projectArtifact, ProjectBuildingRequest request )
+ throws ProjectBuildingException;
+
+ /**
+ * Builds a project descriptor for the specified artifact.
+ *
+ * @param projectArtifact The POM artifact to build the project from, must not be {@code null}.
+ * @param allowStubModel A flag controlling the case of a missing POM artifact. If {@code true} and the specified
+ * POM artifact does not exist, a simple stub model will be returned. If {@code false}, an exception will
+ * be thrown.
+ * @param request The project building request that holds further parameters, must not be {@code null}.
+ * @return The result of the project building, never {@code null}.
+ * @throws ProjectBuildingException If the project descriptor could not be successfully built.
+ */
+ ProjectBuildingResult build( Artifact projectArtifact, boolean allowStubModel, ProjectBuildingRequest request )
+ throws ProjectBuildingException;
+
+ /**
+ * Builds a project descriptor for the specified model source.
+ *
+ * @param modelSource The source of the model to built the project descriptor from, must not be {@code null}.
+ * @param request The project building request that holds further parameters, must not be {@code null}.
+ * @return The result of the project building, never {@code null}.
+ * @throws ProjectBuildingException If the project descriptor could not be successfully built.
+ *
+ * @see org.apache.maven.model.building.ModelSource2
+ */
+ ProjectBuildingResult build( ModelSource modelSource, ProjectBuildingRequest request )
+ throws ProjectBuildingException;
+
+ /**
+ * Builds the projects for the specified POM files and optionally their children.
+ *
+ * @param pomFiles The POM files to build, must not be {@code null}.
+ * @param recursive {@code true} to recursively build sub modules referenced by the POM files, {@code false} to
+ * build only the specified POM files.
+ * @param request The project builder configuration that provides further parameters, must not be {@code null}.
+ * @return The results of the project builder where each result corresponds to one project that was built, never
+ * {@code null}.
+ * @throws ProjectBuildingException If an error was encountered during building of any project.
+ * {@link ProjectBuildingException#getResults()} provides access to the details of the problems.
+ */
+ List<ProjectBuildingResult> build( List<File> pomFiles, boolean recursive, ProjectBuildingRequest request )
+ throws ProjectBuildingException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingException.java
new file mode 100644
index 00000000..47c12315
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingException.java
@@ -0,0 +1,145 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.List;
+
+import org.apache.maven.model.building.ModelProblem;
+import org.apache.maven.model.building.ModelProblemUtils;
+
+/**
+ * @author Jason van Zyl
+ */
+public class ProjectBuildingException
+ extends Exception
+{
+ private final String projectId;
+
+ private File pomFile;
+
+ private List<ProjectBuildingResult> results;
+
+ public ProjectBuildingException( String projectId, String message, Throwable cause )
+ {
+ super( createMessage( message, projectId, null ), cause );
+ this.projectId = projectId;
+ }
+
+ /**
+ * @param projectId
+ * @param message
+ * @param pomFile pom file location
+ */
+ public ProjectBuildingException( String projectId, String message, File pomFile )
+ {
+ super( createMessage( message, projectId, pomFile ) );
+ this.projectId = projectId;
+ this.pomFile = pomFile;
+ }
+
+ /**
+ * @param projectId
+ * @param message
+ * @param pomFile pom file location
+ * @param cause
+ */
+ protected ProjectBuildingException( String projectId, String message, File pomFile, Throwable cause )
+ {
+ super( createMessage( message, projectId, pomFile ), cause );
+ this.projectId = projectId;
+ this.pomFile = pomFile;
+ }
+
+ public ProjectBuildingException( List<ProjectBuildingResult> results )
+ {
+ super( createMessage( results ) );
+ this.projectId = "";
+ this.results = results;
+ }
+
+ public File getPomFile()
+ {
+ return pomFile;
+ }
+
+ /**
+ * @deprecated use {@link #getPomFile()}
+ */
+ public String getPomLocation()
+ {
+ if ( getPomFile() != null )
+ {
+ return getPomFile().getAbsolutePath();
+ }
+ else
+ {
+ return "null";
+ }
+ }
+
+ public String getProjectId()
+ {
+ return projectId;
+ }
+
+ public List<ProjectBuildingResult> getResults()
+ {
+ return results;
+ }
+
+ private static String createMessage( String message, String projectId, File pomFile )
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+ buffer.append( message );
+ buffer.append( " for project " ).append( projectId );
+ if ( pomFile != null )
+ {
+ buffer.append( " at " ).append( pomFile.getAbsolutePath() );
+ }
+ return buffer.toString();
+ }
+
+ private static String createMessage( List<ProjectBuildingResult> results )
+ {
+ StringWriter buffer = new StringWriter( 1024 );
+
+ PrintWriter writer = new PrintWriter( buffer );
+ writer.println( "Some problems were encountered while processing the POMs:" );
+ for ( ProjectBuildingResult result : results )
+ {
+ for ( ModelProblem problem : result.getProblems() )
+ {
+ writer.print( "[" );
+ writer.print( problem.getSeverity() );
+ writer.print( "] " );
+ writer.print( problem.getMessage() );
+ writer.print( " @ " );
+ writer.println( ModelProblemUtils.formatLocation( problem, result.getProjectId() ) );
+ }
+ }
+ writer.close();
+
+ return buffer.toString();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java
new file mode 100644
index 00000000..45fff6e6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java
@@ -0,0 +1,81 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Repository;
+import org.apache.maven.plugin.PluginManagerException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+
+/**
+ * Assists the project builder. <strong>Warning:</strong> This is an internal utility interface that is only public for
+ * technical reasons, it is not part of the public API. In particular, this interface can be changed or deleted without
+ * prior notice.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ProjectBuildingHelper
+{
+
+ /**
+ * Creates the effective artifact repositories from the specified POM repositories.
+ *
+ * @param pomRepositories The POM repositories to create the artifact repositories from, must not be {@code null}.
+ * @param externalRepositories The external (and already mirrored) repositories to merge into the result list, may
+ * be {@code null}.
+ * @param request The project building request holding further settings like repository settings, must not be
+ * {@code null}.
+ * @return The effective artifact repositories, never {@code null}.
+ * @throws InvalidRepositoryException
+ */
+ List<ArtifactRepository> createArtifactRepositories( List<Repository> pomRepositories,
+ List<ArtifactRepository> externalRepositories,
+ ProjectBuildingRequest request )
+ throws InvalidRepositoryException;
+
+ /**
+ * Creates the project realm that hosts the build extensions of the specified model.
+ *
+ * @param project The project to create the project realm for, must not be {@code null}
+ * @param model The model to create the project realm for, must not be {@code null}
+ * @param request The project building request holding further settings like repository settings, must not be
+ * {@code null}.
+ * @return The record with the project realm and extension artifact filter, never {@code null}.
+ * @throws PluginResolutionException If any build extension could not be resolved.
+ */
+ ProjectRealmCache.CacheRecord createProjectRealm( MavenProject project, Model model,
+ ProjectBuildingRequest request )
+ throws PluginResolutionException, PluginVersionResolutionException, PluginManagerException;
+
+ /**
+ * Updates the context class loader such that the container will search the project realm when the model builder
+ * injects the lifecycle bindings from the packaging in the next step. The context class loader is to be reset by
+ * the project builder when the project is fully assembled.
+ *
+ * @param project The project whose class realm should be selected, must not be {@code null}.
+ */
+ void selectProjectRealm( MavenProject project );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java
new file mode 100644
index 00000000..0380278b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java
@@ -0,0 +1,194 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.model.Profile;
+import org.eclipse.aether.RepositorySystemSession;
+
+public interface ProjectBuildingRequest
+{
+
+ ProjectBuildingRequest setLocalRepository( ArtifactRepository localRepository );
+
+ ArtifactRepository getLocalRepository();
+
+ ProjectBuildingRequest setRemoteRepositories( List<ArtifactRepository> remoteRepositories );
+
+ List<ArtifactRepository> getRemoteRepositories();
+
+ ProjectBuildingRequest setPluginArtifactRepositories( List<ArtifactRepository> pluginArtifacgRepositories );
+
+ List<ArtifactRepository> getPluginArtifactRepositories();
+
+ /**
+ * Sets the system properties to use for interpolation and profile activation. The system properties are collected
+ * from the runtime environment like {@link System#getProperties()} and environment variables.
+ *
+ * @param systemProperties The system properties, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ ProjectBuildingRequest setSystemProperties( Properties systemProperties );
+
+ /**
+ * Gets the system properties to use for interpolation and profile activation. The system properties are collected
+ * from the runtime environment like {@link System#getProperties()} and environment variables.
+ *
+ * @return The system properties, never {@code null}.
+ */
+ Properties getSystemProperties();
+
+ /**
+ * Sets the user properties to use for interpolation and profile activation. The user properties have been
+ * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
+ * line.
+ *
+ * @param userProperties The user properties, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ ProjectBuildingRequest setUserProperties( Properties userProperties );
+
+ /**
+ * Gets the user properties to use for interpolation and profile activation. The user properties have been
+ * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
+ * line.
+ *
+ * @return The user properties, never {@code null}.
+ */
+ Properties getUserProperties();
+
+ void setProject( MavenProject mavenProject );
+
+ MavenProject getProject();
+
+ ProjectBuildingRequest setProcessPlugins( boolean processPlugins );
+
+ boolean isProcessPlugins();
+
+ ProjectBuildingRequest setResolveDependencies( boolean resolveDependencies );
+
+ boolean isResolveDependencies();
+
+ /**
+ * Controls the level of validation to perform on processed models. By default, models are validated in strict mode.
+ *
+ * @param validationLevel The level of validation to perform on processed models, e.g.
+ * {@link org.apache.maven.model.building.ModelBuildingRequest#VALIDATION_LEVEL_STRICT}.
+ * @return This configuration, never {@code null}.
+ */
+ ProjectBuildingRequest setValidationLevel( int validationLevel );
+
+ /**
+ * Gets the level of validation to perform on processed models.
+ *
+ * @return The level of validation to perform on processed models.
+ */
+ int getValidationLevel();
+
+ // Profiles
+
+ /**
+ * Set any active profiles that the {@link ProjectBuilder} should consider while constructing
+ * a {@link MavenProject}.
+ */
+ void setActiveProfileIds( List<String> activeProfileIds );
+
+ List<String> getActiveProfileIds();
+
+ void setInactiveProfileIds( List<String> inactiveProfileIds );
+
+ List<String> getInactiveProfileIds();
+
+ /**
+ * Add a {@link org.apache.maven.model.Profile} that has come from an external source. This may be from a custom
+ * configuration like the MavenCLI settings.xml file, or from a custom dialog in an IDE integration like M2Eclipse.
+ *
+ * @param profile
+ */
+ void addProfile( Profile profile );
+
+ void setProfiles( List<Profile> profiles );
+
+ List<Profile> getProfiles();
+
+ /**
+ * Gets the start time of the build.
+ *
+ * @return The start time of the build or {@code null} if unknown.
+ */
+ Date getBuildStartTime();
+
+ /**
+ * Sets the start time of the build.
+ *
+ * @param buildStartTime The start time of the build, may be {@code null}.
+ */
+ void setBuildStartTime( Date buildStartTime );
+
+ RepositorySystemSession getRepositorySession();
+
+ ProjectBuildingRequest setRepositorySession( RepositorySystemSession repositorySession );
+
+ /**
+ * Sets the merge mode used to combine repositories declared in the POM with the repositories specified in this
+ * request.
+ *
+ * @param mode The repository merge mode, must not be {@code null}.
+ * @return This request for chaining, never {@code null}.
+ * @see #setRemoteRepositories(List)
+ */
+ ProjectBuildingRequest setRepositoryMerging( RepositoryMerging mode );
+
+ /**
+ * Gets the merge mode used to combine repositories declared in the POM with the repositories specified in this
+ * request
+ *
+ * @return The merge mode, never {@code null}.
+ */
+ RepositoryMerging getRepositoryMerging();
+
+ /** @since 3.2.2 */
+ boolean isResolveVersionRanges();
+
+ /** @since 3.2.2 */
+ ProjectBuildingRequest setResolveVersionRanges( boolean value );
+
+ /**
+ * The possible merge modes for combining remote repositories.
+ */
+ enum RepositoryMerging
+ {
+
+ /**
+ * The repositories declared in the POM have precedence over the repositories specified in the request.
+ */
+ POM_DOMINANT,
+
+ /**
+ * The repositories specified in the request have precedence over the repositories declared in the POM.
+ */
+ REQUEST_DOMINANT,
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingResult.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingResult.java
new file mode 100644
index 00000000..9a43154c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingResult.java
@@ -0,0 +1,74 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.maven.model.building.ModelProblem;
+
+/**
+ * Collects the output of the project builder.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ProjectBuildingResult
+{
+
+ /**
+ * Gets the identifier of the project that could not be built. The general format of the identifier is {@code
+ * <groupId>:<artifactId>:<version>} but some of these coordinates may still be unknown at the point the exception
+ * is thrown so this information is merely meant to assist the user.
+ *
+ * @return The identifier of the project or an empty string if not known, never {@code null}.
+ */
+ String getProjectId();
+
+ /**
+ * Gets the POM file from which the project was built.
+ *
+ * @return The POM file or {@code null} if unknown.
+ */
+ File getPomFile();
+
+ /**
+ * Gets the project that was built.
+ *
+ * @return The project that was built or {@code null} if an error occurred and this result accompanies a
+ * {@link ProjectBuildingException}.
+ */
+ MavenProject getProject();
+
+ /**
+ * Gets the problems that were encountered during the project building.
+ *
+ * @return The problems that were encountered during the project building, can be empty but never {@code null}.
+ */
+ List<ModelProblem> getProblems();
+
+ /**
+ * Gets the result of the dependency resolution for the project.
+ *
+ * @return The result of the dependency resolution for the project or {@code null} if the project dependencies were
+ * not requested.
+ */
+ DependencyResolutionResult getDependencyResolutionResult();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectDependenciesResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectDependenciesResolver.java
new file mode 100644
index 00000000..539055ca
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectDependenciesResolver.java
@@ -0,0 +1,40 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Resolves the transitive dependencies of a project.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ProjectDependenciesResolver
+{
+
+ /**
+ * Resolves the transitive dependencies of a project.
+ *
+ * @param request The resolution request holding the parameters, must not be {@code null}.
+ * @return The resolution result, never {@code null}.
+ * @throws DependencyResolutionException If any project dependency could not be resolved.
+ */
+ DependencyResolutionResult resolve( DependencyResolutionRequest request )
+ throws DependencyResolutionException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
new file mode 100644
index 00000000..3e33eb57
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
@@ -0,0 +1,248 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.building.FileModelSource;
+import org.apache.maven.model.building.ModelSource;
+import org.apache.maven.model.resolution.InvalidRepositoryException;
+import org.apache.maven.model.resolution.ModelResolver;
+import org.apache.maven.model.resolution.UnresolvableModelException;
+import org.apache.maven.repository.internal.ArtifactDescriptorUtils;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.RequestTrace;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.impl.RemoteRepositoryManager;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.ArtifactRequest;
+import org.eclipse.aether.resolution.ArtifactResolutionException;
+import org.eclipse.aether.resolution.VersionRangeRequest;
+import org.eclipse.aether.resolution.VersionRangeResolutionException;
+import org.eclipse.aether.resolution.VersionRangeResult;
+
+/**
+ * A model resolver to assist building of projects. This resolver gives priority to those repositories that have been
+ * declared in the POM.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ProjectModelResolver
+ implements ModelResolver
+{
+
+ private final RepositorySystemSession session;
+
+ private final RequestTrace trace;
+
+ private final String context = "project";
+
+ private List<RemoteRepository> repositories;
+
+ private List<RemoteRepository> pomRepositories;
+
+ private final List<RemoteRepository> externalRepositories;
+
+ private final RepositorySystem resolver;
+
+ private final RemoteRepositoryManager remoteRepositoryManager;
+
+ private final Set<String> repositoryIds;
+
+ private final ReactorModelPool modelPool;
+
+ private final ProjectBuildingRequest.RepositoryMerging repositoryMerging;
+
+ public ProjectModelResolver( RepositorySystemSession session, RequestTrace trace, RepositorySystem resolver,
+ RemoteRepositoryManager remoteRepositoryManager, List<RemoteRepository> repositories,
+ ProjectBuildingRequest.RepositoryMerging repositoryMerging,
+ ReactorModelPool modelPool )
+ {
+ this.session = session;
+ this.trace = trace;
+ this.resolver = resolver;
+ this.remoteRepositoryManager = remoteRepositoryManager;
+ this.pomRepositories = new ArrayList<RemoteRepository>();
+ List<RemoteRepository> externalRepositories = new ArrayList<RemoteRepository>();
+ externalRepositories.addAll( repositories );
+ this.externalRepositories = Collections.unmodifiableList( externalRepositories );
+ this.repositories = new ArrayList<RemoteRepository>();
+ this.repositories.addAll( externalRepositories );
+ this.repositoryMerging = repositoryMerging;
+ this.repositoryIds = new HashSet<String>();
+ this.modelPool = modelPool;
+ }
+
+ private ProjectModelResolver( ProjectModelResolver original )
+ {
+ this.session = original.session;
+ this.trace = original.trace;
+ this.resolver = original.resolver;
+ this.remoteRepositoryManager = original.remoteRepositoryManager;
+ this.pomRepositories = new ArrayList<RemoteRepository>( original.pomRepositories );
+ this.externalRepositories = original.externalRepositories;
+ this.repositories = new ArrayList<RemoteRepository>( original.repositories );
+ this.repositoryMerging = original.repositoryMerging;
+ this.repositoryIds = new HashSet<String>( original.repositoryIds );
+ this.modelPool = original.modelPool;
+ }
+
+ public void addRepository( Repository repository )
+ throws InvalidRepositoryException
+ {
+ addRepository( repository, false );
+ }
+
+ @Override
+ public void addRepository( final Repository repository, boolean replace )
+ throws InvalidRepositoryException
+ {
+ if ( !repositoryIds.add( repository.getId() ) )
+ {
+ if ( !replace )
+ {
+ return;
+ }
+
+ // Remove any previous repository with this Id
+ removeMatchingRepository( repositories, repository.getId() );
+ removeMatchingRepository( pomRepositories, repository.getId() );
+ }
+
+ List<RemoteRepository> newRepositories =
+ Collections.singletonList( ArtifactDescriptorUtils.toRemoteRepository( repository ) );
+
+ if ( ProjectBuildingRequest.RepositoryMerging.REQUEST_DOMINANT.equals( repositoryMerging ) )
+ {
+ repositories = remoteRepositoryManager.aggregateRepositories( session, repositories, newRepositories,
+ true );
+ }
+ else
+ {
+ pomRepositories =
+ remoteRepositoryManager.aggregateRepositories( session, pomRepositories, newRepositories, true );
+ repositories =
+ remoteRepositoryManager.aggregateRepositories( session, pomRepositories, externalRepositories, false );
+ }
+ }
+
+ private static void removeMatchingRepository( Iterable<RemoteRepository> repositories, final String id )
+ {
+ Iterables.removeIf( repositories, new Predicate<RemoteRepository>()
+ {
+ @Override
+ public boolean apply( RemoteRepository remoteRepository )
+ {
+ return remoteRepository.getId().equals( id );
+ }
+ } );
+ }
+
+ public ModelResolver newCopy()
+ {
+ return new ProjectModelResolver( this );
+ }
+
+ public ModelSource resolveModel( String groupId, String artifactId, String version )
+ throws UnresolvableModelException
+ {
+ File pomFile = null;
+
+ if ( modelPool != null )
+ {
+ pomFile = modelPool.get( groupId, artifactId, version );
+ }
+
+ if ( pomFile == null )
+ {
+ Artifact pomArtifact = new DefaultArtifact( groupId, artifactId, "", "pom", version );
+
+ try
+ {
+ ArtifactRequest request = new ArtifactRequest( pomArtifact, repositories, context );
+ request.setTrace( trace );
+ pomArtifact = resolver.resolveArtifact( session, request ).getArtifact();
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ throw new UnresolvableModelException( e.getMessage(), groupId, artifactId, version, e );
+ }
+
+ pomFile = pomArtifact.getFile();
+ }
+
+ return new FileModelSource( pomFile );
+ }
+
+ public ModelSource resolveModel( Parent parent )
+ throws UnresolvableModelException
+ {
+ Artifact artifact = new DefaultArtifact( parent.getGroupId(), parent.getArtifactId(), "", "pom",
+ parent.getVersion() );
+
+ VersionRangeRequest versionRangeRequest = new VersionRangeRequest( artifact, repositories, context );
+ versionRangeRequest.setTrace( trace );
+
+ try
+ {
+ VersionRangeResult versionRangeResult = resolver.resolveVersionRange( session, versionRangeRequest );
+
+ if ( versionRangeResult.getHighestVersion() == null )
+ {
+ throw new UnresolvableModelException( "No versions matched the requested range '" + parent.getVersion()
+ + "'", parent.getGroupId(), parent.getArtifactId(),
+ parent.getVersion() );
+
+ }
+
+ if ( versionRangeResult.getVersionConstraint() != null
+ && versionRangeResult.getVersionConstraint().getRange() != null
+ && versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null )
+ {
+ throw new UnresolvableModelException( "The requested version range '" + parent.getVersion()
+ + "' does not specify an upper bound", parent.getGroupId(),
+ parent.getArtifactId(), parent.getVersion() );
+
+ }
+
+ parent.setVersion( versionRangeResult.getHighestVersion().toString() );
+ }
+ catch ( VersionRangeResolutionException e )
+ {
+ throw new UnresolvableModelException( e.getMessage(), parent.getGroupId(), parent.getArtifactId(),
+ parent.getVersion(), e );
+
+ }
+
+ return resolveModel( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectRealmCache.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectRealmCache.java
new file mode 100644
index 00000000..9265b894
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectRealmCache.java
@@ -0,0 +1,79 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.eclipse.aether.graph.DependencyFilter;
+
+/**
+ * Caches project class realms. <strong>Warning:</strong> This is an internal utility interface that is only public for
+ * technical reasons, it is not part of the public API. In particular, this interface can be changed or deleted without
+ * prior notice.
+ *
+ * @author Igor Fedorenko
+ * @author Benjamin Bentmann
+ */
+public interface ProjectRealmCache
+{
+
+ /**
+ * A cache key.
+ */
+ interface Key
+ {
+ // marker interface for cache keys
+ }
+
+ static class CacheRecord
+ {
+
+ public final ClassRealm realm;
+
+ public final DependencyFilter extensionArtifactFilter;
+
+ public CacheRecord( ClassRealm realm, DependencyFilter extensionArtifactFilter )
+ {
+ this.realm = realm;
+ this.extensionArtifactFilter = extensionArtifactFilter;
+ }
+
+ }
+
+ Key createKey( List<? extends ClassRealm> extensionRealms );
+
+ CacheRecord get( Key key );
+
+ CacheRecord put( Key key, ClassRealm projectRealm, DependencyFilter extensionArtifactFilter );
+
+ void flush();
+
+ /**
+ * Registers the specified cache record for usage with the given project. Integrators can use the information
+ * collected from this method in combination with a custom cache implementation to dispose unused records from the
+ * cache.
+ *
+ * @param project The project that employs the plugin realm, must not be {@code null}.
+ * @param record The cache record being used for the project, must not be {@code null}.
+ */
+ void register( MavenProject project, Key key, CacheRecord record );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectSorter.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectSorter.java
new file mode 100644
index 00000000..16985e2a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectSorter.java
@@ -0,0 +1,289 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Extension;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.Plugin;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.dag.CycleDetectedException;
+import org.codehaus.plexus.util.dag.DAG;
+import org.codehaus.plexus.util.dag.TopologicalSorter;
+import org.codehaus.plexus.util.dag.Vertex;
+
+public class ProjectSorter
+{
+ private DAG dag;
+
+ private List<MavenProject> sortedProjects;
+
+ private Map<String, MavenProject> projectMap;
+
+ private MavenProject topLevelProject;
+
+ /**
+ * Sort a list of projects.
+ * <ul>
+ * <li>collect all the vertices for the projects that we want to build.</li>
+ * <li>iterate through the deps of each project and if that dep is within
+ * the set of projects we want to build then add an edge, otherwise throw
+ * the edge away because that dependency is not within the set of projects
+ * we are trying to build. we assume a closed set.</li>
+ * <li>do a topo sort on the graph that remains.</li>
+ * </ul>
+ * @throws DuplicateProjectException if any projects are duplicated by id
+ */
+ // MAVENAPI FIXME: the DAG used is NOT only used to represent the dependency relation,
+ // but also for <parent>, <build><plugin>, <reports>. We need multiple DAG's
+ // since a DAG can only handle 1 type of relationship properly.
+ // Usecase: This is detected as a cycle:
+ // org.apache.maven:maven-plugin-api -(PARENT)->
+ // org.apache.maven:maven -(inherited REPORTING)->
+ // org.apache.maven.plugins:maven-checkstyle-plugin -(DEPENDENCY)->
+ // org.apache.maven:maven-plugin-api
+ // In this case, both the verify and the report goals are called
+ // in a different lifecycle. Though the compiler-plugin has a valid usecase, although
+ // that seems to work fine. We need to take versions and lifecycle into account.
+ public ProjectSorter( Collection<MavenProject> projects )
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ dag = new DAG();
+
+ // groupId:artifactId:version -> project
+ projectMap = new HashMap<String, MavenProject>( projects.size() * 2 );
+
+ // groupId:artifactId -> (version -> vertex)
+ Map<String, Map<String, Vertex>> vertexMap = new HashMap<String, Map<String, Vertex>>( projects.size() * 2 );
+
+ for ( MavenProject project : projects )
+ {
+ String projectId = getId( project );
+
+ MavenProject conflictingProject = projectMap.put( projectId, project );
+
+ if ( conflictingProject != null )
+ {
+ throw new DuplicateProjectException( projectId, conflictingProject.getFile(), project.getFile(),
+ "Project '" + projectId + "' is duplicated in the reactor" );
+ }
+
+ String projectKey = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
+
+ Map<String, Vertex> vertices = vertexMap.get( projectKey );
+ if ( vertices == null )
+ {
+ vertices = new HashMap<String, Vertex>( 2, 1 );
+ vertexMap.put( projectKey, vertices );
+ }
+ vertices.put( project.getVersion(), dag.addVertex( projectId ) );
+ }
+
+ for ( Vertex projectVertex : dag.getVerticies() )
+ {
+ String projectId = projectVertex.getLabel();
+
+ MavenProject project = projectMap.get( projectId );
+
+ for ( Dependency dependency : project.getDependencies() )
+ {
+ addEdge( projectMap, vertexMap, project, projectVertex, dependency.getGroupId(),
+ dependency.getArtifactId(), dependency.getVersion(), false, false );
+ }
+
+ Parent parent = project.getModel().getParent();
+
+ if ( parent != null )
+ {
+ // Parent is added as an edge, but must not cause a cycle - so we remove any other edges it has
+ // in conflict
+ addEdge( projectMap, vertexMap, null, projectVertex, parent.getGroupId(), parent.getArtifactId(),
+ parent.getVersion(), true, false );
+ }
+
+ List<Plugin> buildPlugins = project.getBuildPlugins();
+ if ( buildPlugins != null )
+ {
+ for ( Plugin plugin : buildPlugins )
+ {
+ addEdge( projectMap, vertexMap, project, projectVertex, plugin.getGroupId(),
+ plugin.getArtifactId(), plugin.getVersion(), false, true );
+
+ for ( Dependency dependency : plugin.getDependencies() )
+ {
+ addEdge( projectMap, vertexMap, project, projectVertex, dependency.getGroupId(),
+ dependency.getArtifactId(), dependency.getVersion(), false, true );
+ }
+ }
+ }
+
+ List<Extension> buildExtensions = project.getBuildExtensions();
+ if ( buildExtensions != null )
+ {
+ for ( Extension extension : buildExtensions )
+ {
+ addEdge( projectMap, vertexMap, project, projectVertex, extension.getGroupId(),
+ extension.getArtifactId(), extension.getVersion(), false, true );
+ }
+ }
+ }
+
+ List<MavenProject> sortedProjects = new ArrayList<MavenProject>( projects.size() );
+
+ List<String> sortedProjectLabels = TopologicalSorter.sort( dag );
+
+ for ( String id : sortedProjectLabels )
+ {
+ sortedProjects.add( projectMap.get( id ) );
+ }
+
+ this.sortedProjects = Collections.unmodifiableList( sortedProjects );
+ }
+
+ private void addEdge( Map<String, MavenProject> projectMap, Map<String, Map<String, Vertex>> vertexMap,
+ MavenProject project, Vertex projectVertex, String groupId, String artifactId,
+ String version, boolean force, boolean safe )
+ throws CycleDetectedException
+ {
+ String projectKey = ArtifactUtils.versionlessKey( groupId, artifactId );
+
+ Map<String, Vertex> vertices = vertexMap.get( projectKey );
+
+ if ( vertices != null )
+ {
+ if ( isSpecificVersion( version ) )
+ {
+ Vertex vertex = vertices.get( version );
+ if ( vertex != null )
+ {
+ addEdge( projectVertex, vertex, project, projectMap, force, safe );
+ }
+ }
+ else
+ {
+ for ( Vertex vertex : vertices.values() )
+ {
+ addEdge( projectVertex, vertex, project, projectMap, force, safe );
+ }
+ }
+ }
+ }
+
+ private void addEdge( Vertex fromVertex, Vertex toVertex, MavenProject fromProject,
+ Map<String, MavenProject> projectMap, boolean force, boolean safe )
+ throws CycleDetectedException
+ {
+ if ( fromVertex.equals( toVertex ) )
+ {
+ return;
+ }
+
+ if ( fromProject != null )
+ {
+ MavenProject toProject = projectMap.get( toVertex.getLabel() );
+ fromProject.addProjectReference( toProject );
+ }
+
+ if ( force && toVertex.getChildren().contains( fromVertex ) )
+ {
+ dag.removeEdge( toVertex, fromVertex );
+ }
+
+ try
+ {
+ dag.addEdge( fromVertex, toVertex );
+ }
+ catch ( CycleDetectedException e )
+ {
+ if ( !safe )
+ {
+ throw e;
+ }
+ }
+ }
+
+ private boolean isSpecificVersion( String version )
+ {
+ return !( StringUtils.isEmpty( version ) || version.startsWith( "[" ) || version.startsWith( "(" ) );
+ }
+
+ // TODO: !![jc; 28-jul-2005] check this; if we're using '-r' and there are aggregator tasks, this will result in weirdness.
+ public MavenProject getTopLevelProject()
+ {
+ if ( topLevelProject == null )
+ {
+ for ( Iterator<MavenProject> i = sortedProjects.iterator(); i.hasNext() && ( topLevelProject == null ); )
+ {
+ MavenProject project = i.next();
+ if ( project.isExecutionRoot() )
+ {
+ topLevelProject = project;
+ }
+ }
+ }
+
+ return topLevelProject;
+ }
+
+ public List<MavenProject> getSortedProjects()
+ {
+ return sortedProjects;
+ }
+
+ public boolean hasMultipleProjects()
+ {
+ return sortedProjects.size() > 1;
+ }
+
+ public List<String> getDependents( String id )
+ {
+ return dag.getParentLabels( id );
+ }
+
+ public List<String> getDependencies( String id )
+ {
+ return dag.getChildLabels( id );
+ }
+
+ public static String getId( MavenProject project )
+ {
+ return ArtifactUtils.key( project.getGroupId(), project.getArtifactId(), project.getVersion() );
+ }
+
+ public DAG getDAG()
+ {
+ return dag;
+ }
+
+ public Map<String, MavenProject> getProjectMap()
+ {
+ return projectMap;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ReactorModelCache.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ReactorModelCache.java
new file mode 100644
index 00000000..24425da1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ReactorModelCache.java
@@ -0,0 +1,103 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.maven.model.building.ModelCache;
+
+/**
+ * A simple model cache used to accelerate model building during a reactor build.
+ *
+ * @author Benjamin Bentmann
+ */
+class ReactorModelCache
+ implements ModelCache
+{
+
+ private final Map<CacheKey, Object> models = new HashMap<CacheKey, Object>( 256 );
+
+ public Object get( String groupId, String artifactId, String version, String tag )
+ {
+ return models.get( new CacheKey( groupId, artifactId, version, tag ) );
+ }
+
+ public void put( String groupId, String artifactId, String version, String tag, Object data )
+ {
+ models.put( new CacheKey( groupId, artifactId, version, tag ), data );
+ }
+
+ private static final class CacheKey
+ {
+
+ private final String groupId;
+
+ private final String artifactId;
+
+ private final String version;
+
+ private final String tag;
+
+ private final int hashCode;
+
+ public CacheKey( String groupId, String artifactId, String version, String tag )
+ {
+ this.groupId = ( groupId != null ) ? groupId : "";
+ this.artifactId = ( artifactId != null ) ? artifactId : "";
+ this.version = ( version != null ) ? version : "";
+ this.tag = ( tag != null ) ? tag : "";
+
+ int hash = 17;
+ hash = hash * 31 + this.groupId.hashCode();
+ hash = hash * 31 + this.artifactId.hashCode();
+ hash = hash * 31 + this.version.hashCode();
+ hash = hash * 31 + this.tag.hashCode();
+ hashCode = hash;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ if ( !( obj instanceof CacheKey ) )
+ {
+ return false;
+ }
+
+ CacheKey that = (CacheKey) obj;
+
+ return artifactId.equals( that.artifactId ) && groupId.equals( that.groupId )
+ && version.equals( that.version ) && tag.equals( that.tag );
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return hashCode;
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ReactorModelPool.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ReactorModelPool.java
new file mode 100644
index 00000000..294fccdb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ReactorModelPool.java
@@ -0,0 +1,106 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Holds all POM files that are known to the reactor. This allows the project builder to resolve imported POMs from the
+ * reactor when building another project's effective model.
+ *
+ * @author Benjamin Bentmann
+ */
+class ReactorModelPool
+{
+
+ private final Map<CacheKey, File> pomFiles = new HashMap<CacheKey, File>();
+
+ public File get( String groupId, String artifactId, String version )
+ {
+ return pomFiles.get( new CacheKey( groupId, artifactId, version ) );
+ }
+
+ public void put( String groupId, String artifactId, String version, File pomFile )
+ {
+ pomFiles.put( new CacheKey( groupId, artifactId, version ), pomFile );
+ }
+
+ private static final class CacheKey
+ {
+
+ private final String groupId;
+
+ private final String artifactId;
+
+ private final String version;
+
+ private final int hashCode;
+
+ public CacheKey( String groupId, String artifactId, String version )
+ {
+ this.groupId = ( groupId != null ) ? groupId : "";
+ this.artifactId = ( artifactId != null ) ? artifactId : "";
+ this.version = ( version != null ) ? version : "";
+
+ int hash = 17;
+ hash = hash * 31 + this.groupId.hashCode();
+ hash = hash * 31 + this.artifactId.hashCode();
+ hash = hash * 31 + this.version.hashCode();
+ hashCode = hash;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ if ( !( obj instanceof CacheKey ) )
+ {
+ return false;
+ }
+
+ CacheKey that = (CacheKey) obj;
+
+ return artifactId.equals( that.artifactId ) && groupId.equals( that.groupId )
+ && version.equals( that.version );
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return hashCode;
+ }
+
+ @Override
+ public String toString()
+ {
+ StringBuilder buffer = new StringBuilder( 96 );
+ buffer.append( groupId ).append( ':' ).append( artifactId ).append( ':' ).append( version );
+ return buffer.toString();
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/RepositorySessionDecorator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/RepositorySessionDecorator.java
new file mode 100644
index 00000000..679ee008
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/RepositorySessionDecorator.java
@@ -0,0 +1,36 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.eclipse.aether.RepositorySystemSession;
+
+/**
+ * Component interface that allows per-project customization of Aether repository system sessions.
+ *
+ * @since 3.2.4
+ * @provisional This interface is part of work in progress and can be changed or removed without notice.
+ */
+public interface RepositorySessionDecorator
+{
+ /**
+ * Returns possibly {@code null} Aether repository system session to be used to resolve project dependencies.
+ */
+ RepositorySystemSession decorate( MavenProject project, RepositorySystemSession session );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java
new file mode 100644
index 00000000..6e13d332
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java
@@ -0,0 +1,403 @@
+package org.apache.maven.project.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.project.MavenProject;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Wraps an active project instance to be able to receive updates from its artifact without affecting the original
+ * attributes of this artifact.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @todo I think this exposes a design flaw in that the immutable and mutable parts of an artifact are in one class and
+ * should be split. ie scope, file, etc depend on the context of use, whereas everything else is immutable.
+ */
+@Deprecated
+public class ActiveProjectArtifact
+ implements Artifact
+{
+ private final Artifact artifact;
+
+ private final MavenProject project;
+
+ public ActiveProjectArtifact( MavenProject project, Artifact artifact )
+ {
+ this.artifact = artifact;
+ this.project = project;
+
+ artifact.setFile( project.getArtifact().getFile() );
+ artifact.setResolved( true );
+ }
+
+ /** {@inheritDoc} */
+ public File getFile()
+ {
+ // we need to get the latest file for the project, not the artifact that was created at one point in time
+ return project.getArtifact().getFile();
+ }
+
+ /** {@inheritDoc} */
+ public String getGroupId()
+ {
+ return artifact.getGroupId();
+ }
+
+ /** {@inheritDoc} */
+ public String getArtifactId()
+ {
+ return artifact.getArtifactId();
+ }
+
+ /** {@inheritDoc} */
+ public String getVersion()
+ {
+ return artifact.getVersion();
+ }
+
+ /** {@inheritDoc} */
+ public void setVersion( String version )
+ {
+ artifact.setVersion( version );
+ }
+
+ /** {@inheritDoc} */
+ public String getScope()
+ {
+ return artifact.getScope();
+ }
+
+ /** {@inheritDoc} */
+ public String getType()
+ {
+ return artifact.getType();
+ }
+
+ /** {@inheritDoc} */
+ public String getClassifier()
+ {
+ return artifact.getClassifier();
+ }
+
+ /** {@inheritDoc} */
+ public boolean hasClassifier()
+ {
+ return artifact.hasClassifier();
+ }
+
+ /** {@inheritDoc} */
+ public void setFile( File destination )
+ {
+ artifact.setFile( destination );
+ project.getArtifact().setFile( destination );
+ }
+
+ /** {@inheritDoc} */
+ public String getBaseVersion()
+ {
+ return artifact.getBaseVersion();
+ }
+
+ /** {@inheritDoc} */
+ public void setBaseVersion( String baseVersion )
+ {
+ artifact.setBaseVersion( baseVersion );
+ }
+
+ /** {@inheritDoc} */
+ public String getId()
+ {
+ return artifact.getId();
+ }
+
+ /** {@inheritDoc} */
+ public String getDependencyConflictId()
+ {
+ return artifact.getDependencyConflictId();
+ }
+
+ /** {@inheritDoc} */
+ public void addMetadata( ArtifactMetadata metadata )
+ {
+ artifact.addMetadata( metadata );
+ }
+
+ /** {@inheritDoc} */
+ public Collection<ArtifactMetadata> getMetadataList()
+ {
+ return artifact.getMetadataList();
+ }
+
+ /** {@inheritDoc} */
+ public void setRepository( ArtifactRepository remoteRepository )
+ {
+ artifact.setRepository( remoteRepository );
+ }
+
+ /** {@inheritDoc} */
+ public ArtifactRepository getRepository()
+ {
+ return artifact.getRepository();
+ }
+
+ /** {@inheritDoc} */
+ public void updateVersion( String version, ArtifactRepository localRepository )
+ {
+ artifact.updateVersion( version, localRepository );
+ }
+
+ /** {@inheritDoc} */
+ public String getDownloadUrl()
+ {
+ return artifact.getDownloadUrl();
+ }
+
+ /** {@inheritDoc} */
+ public void setDownloadUrl( String downloadUrl )
+ {
+ artifact.setDownloadUrl( downloadUrl );
+ }
+
+ /** {@inheritDoc} */
+ public ArtifactFilter getDependencyFilter()
+ {
+ return artifact.getDependencyFilter();
+ }
+
+ /** {@inheritDoc} */
+ public void setDependencyFilter( ArtifactFilter artifactFilter )
+ {
+ artifact.setDependencyFilter( artifactFilter );
+ }
+
+ /** {@inheritDoc} */
+ public ArtifactHandler getArtifactHandler()
+ {
+ return artifact.getArtifactHandler();
+ }
+
+ /** {@inheritDoc} */
+ public List<String> getDependencyTrail()
+ {
+ return artifact.getDependencyTrail();
+ }
+
+ /** {@inheritDoc} */
+ public void setDependencyTrail( List<String> dependencyTrail )
+ {
+ artifact.setDependencyTrail( dependencyTrail );
+ }
+
+ /** {@inheritDoc} */
+ public void setScope( String scope )
+ {
+ artifact.setScope( scope );
+ }
+
+ /** {@inheritDoc} */
+ public VersionRange getVersionRange()
+ {
+ return artifact.getVersionRange();
+ }
+
+ /** {@inheritDoc} */
+ public void setVersionRange( VersionRange newRange )
+ {
+ artifact.setVersionRange( newRange );
+ }
+
+ /** {@inheritDoc} */
+ public void selectVersion( String version )
+ {
+ artifact.selectVersion( version );
+ }
+
+ /** {@inheritDoc} */
+ public void setGroupId( String groupId )
+ {
+ artifact.setGroupId( groupId );
+ }
+
+ /** {@inheritDoc} */
+ public void setArtifactId( String artifactId )
+ {
+ artifact.setArtifactId( artifactId );
+ }
+
+ /** {@inheritDoc} */
+ public boolean isSnapshot()
+ {
+ return artifact.isSnapshot();
+ }
+
+ /** {@inheritDoc} */
+ public int compareTo( Artifact a )
+ {
+ return artifact.compareTo( a );
+ }
+
+ /** {@inheritDoc} */
+ public void setResolved( boolean resolved )
+ {
+ artifact.setResolved( resolved );
+ }
+
+ /** {@inheritDoc} */
+ public boolean isResolved()
+ {
+ return artifact.isResolved();
+ }
+
+ /** {@inheritDoc} */
+ public void setResolvedVersion( String version )
+ {
+ artifact.setResolvedVersion( version );
+ }
+
+ /** {@inheritDoc} */
+ public void setArtifactHandler( ArtifactHandler handler )
+ {
+ artifact.setArtifactHandler( handler );
+ }
+
+ /** {@inheritDoc} */
+ public String toString()
+ {
+ return "active project artifact:\n\tartifact = " + artifact + ";\n\tproject: " + project;
+ }
+
+ /** {@inheritDoc} */
+ public boolean isRelease()
+ {
+ return artifact.isRelease();
+ }
+
+ /** {@inheritDoc} */
+ public void setRelease( boolean release )
+ {
+ artifact.setRelease( release );
+ }
+
+ /** {@inheritDoc} */
+ public List<ArtifactVersion> getAvailableVersions()
+ {
+ return artifact.getAvailableVersions();
+ }
+
+ /** {@inheritDoc} */
+ public void setAvailableVersions( List<ArtifactVersion> versions )
+ {
+ artifact.setAvailableVersions( versions );
+ }
+
+ /** {@inheritDoc} */
+ public boolean isOptional()
+ {
+ return artifact.isOptional();
+ }
+
+ /** {@inheritDoc} */
+ public ArtifactVersion getSelectedVersion()
+ throws OverConstrainedVersionException
+ {
+ return artifact.getSelectedVersion();
+ }
+
+ /** {@inheritDoc} */
+ public boolean isSelectedVersionKnown()
+ throws OverConstrainedVersionException
+ {
+ return artifact.isSelectedVersionKnown();
+ }
+
+ /** {@inheritDoc} */
+ public void setOptional( boolean optional )
+ {
+ artifact.setOptional( optional );
+ }
+
+ /** {@inheritDoc} */
+ public int hashCode()
+ {
+ int result = 17;
+
+ result = 37 * result + getGroupId().hashCode();
+ result = 37 * result + getArtifactId().hashCode();
+ result = 37 * result + getType().hashCode();
+ if ( getVersion() != null )
+ {
+ result = 37 * result + getVersion().hashCode();
+ }
+ result = 37 * result + ( getClassifier() != null ? getClassifier().hashCode() : 0 );
+
+ return result;
+ }
+
+ /** {@inheritDoc} */
+ public boolean equals( Object o )
+ {
+ if ( o == this )
+ {
+ return true;
+ }
+
+ if ( !( o instanceof Artifact ) )
+ {
+ return false;
+ }
+
+ Artifact a = (Artifact) o;
+
+ if ( !a.getGroupId().equals( getGroupId() ) )
+ {
+ return false;
+ }
+ else if ( !a.getArtifactId().equals( getArtifactId() ) )
+ {
+ return false;
+ }
+ else if ( !a.getVersion().equals( getVersion() ) )
+ {
+ return false;
+ }
+ else if ( !a.getType().equals( getType() ) )
+ {
+ return false;
+ }
+ else if ( a.getClassifier() == null ? getClassifier() != null : !a.getClassifier().equals( getClassifier() ) )
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ArtifactWithDependencies.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ArtifactWithDependencies.java
new file mode 100644
index 00000000..cb06b70f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ArtifactWithDependencies.java
@@ -0,0 +1,33 @@
+package org.apache.maven.project.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.model.Dependency;
+
+public interface ArtifactWithDependencies
+{
+
+ List<Dependency> getDependencies();
+
+ List<Dependency> getManagedDependencies();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/AttachedArtifact.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/AttachedArtifact.java
new file mode 100644
index 00000000..fd2b956c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/AttachedArtifact.java
@@ -0,0 +1,185 @@
+package org.apache.maven.project.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.InvalidArtifactRTException;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.VersionRange;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ *<strong>Warning:</strong> This is an internal utility class that is only public for technical reasons, it is not part
+ * of the public API. In particular, this class can be changed or deleted without prior notice. Use
+ * {@link org.apache.maven.project.MavenProjectHelper#attachArtifact} instead.
+ */
+@Deprecated
+public class AttachedArtifact
+ extends DefaultArtifact
+{
+
+ private final Artifact parent;
+
+ public AttachedArtifact( Artifact parent, String type, String classifier, ArtifactHandler artifactHandler )
+ {
+ super( parent.getGroupId(), parent.getArtifactId(), parent.getVersionRange(), parent.getScope(), type,
+ classifier, artifactHandler, parent.isOptional() );
+
+ setDependencyTrail( Collections.singletonList( parent.getId() ) );
+
+ this.parent = parent;
+
+ if ( getId().equals( parent.getId() ) )
+ {
+ throw new InvalidArtifactRTException( parent.getGroupId(), parent.getArtifactId(), parent.getVersion(),
+ parent.getType(), "An attached artifact must have a different ID"
+ + " than its corresponding main artifact." );
+ }
+ }
+
+ public AttachedArtifact( Artifact parent, String type, ArtifactHandler artifactHandler )
+ {
+ this( parent, type, null, artifactHandler );
+ }
+
+ public void setArtifactId( String artifactId )
+ {
+ throw new UnsupportedOperationException( "Cannot change the artifactId for an attached artifact."
+ + " It is derived from the main artifact." );
+ }
+
+ public List<ArtifactVersion> getAvailableVersions()
+ {
+ return parent.getAvailableVersions();
+ }
+
+ public void setAvailableVersions( List<ArtifactVersion> availableVersions )
+ {
+ throw new UnsupportedOperationException( "Cannot change the version information for an attached artifact."
+ + " It is derived from the main artifact." );
+ }
+
+ public String getBaseVersion()
+ {
+ return parent.getBaseVersion();
+ }
+
+ public void setBaseVersion( String baseVersion )
+ {
+ throw new UnsupportedOperationException( "Cannot change the version information for an attached artifact."
+ + " It is derived from the main artifact." );
+ }
+
+ public String getDownloadUrl()
+ {
+ return parent.getDownloadUrl();
+ }
+
+ public void setDownloadUrl( String downloadUrl )
+ {
+ throw new UnsupportedOperationException( "Cannot change the download information for an attached artifact."
+ + " It is derived from the main artifact." );
+ }
+
+ public void setGroupId( String groupId )
+ {
+ throw new UnsupportedOperationException( "Cannot change the groupId for an attached artifact."
+ + " It is derived from the main artifact." );
+ }
+
+ public ArtifactRepository getRepository()
+ {
+ return parent.getRepository();
+ }
+
+ public void setRepository( ArtifactRepository repository )
+ {
+ throw new UnsupportedOperationException( "Cannot change the repository information for an attached artifact."
+ + " It is derived from the main artifact." );
+ }
+
+ public String getScope()
+ {
+ return parent.getScope();
+ }
+
+ public void setScope( String scope )
+ {
+ throw new UnsupportedOperationException( "Cannot change the scoping information for an attached artifact."
+ + " It is derived from the main artifact." );
+ }
+
+ public String getVersion()
+ {
+ return parent.getVersion();
+ }
+
+ public void setVersion( String version )
+ {
+ throw new UnsupportedOperationException( "Cannot change the version information for an attached artifact."
+ + " It is derived from the main artifact." );
+ }
+
+ public VersionRange getVersionRange()
+ {
+ return parent.getVersionRange();
+ }
+
+ public void setVersionRange( VersionRange range )
+ {
+ throw new UnsupportedOperationException( "Cannot change the version information for an attached artifact."
+ + " It is derived from the main artifact." );
+ }
+
+ public boolean isRelease()
+ {
+ return parent.isRelease();
+ }
+
+ public void setRelease( boolean release )
+ {
+ throw new UnsupportedOperationException( "Cannot change the version information for an attached artifact."
+ + " It is derived from the main artifact." );
+ }
+
+ public boolean isSnapshot()
+ {
+ return parent.isSnapshot();
+ }
+
+ public void addMetadata( ArtifactMetadata metadata )
+ {
+ // ignore. The parent artifact will handle metadata.
+ // we must fail silently here to avoid problems with the artifact transformers.
+ }
+
+ public Collection<ArtifactMetadata> getMetadataList()
+ {
+ return Collections.emptyList();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java
new file mode 100644
index 00000000..07fd11da
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java
@@ -0,0 +1,347 @@
+package org.apache.maven.project.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.artifact.metadata.ResolutionGroup;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.codehaus.plexus.component.annotations.Component;
+
+@Component( role = MavenMetadataCache.class )
+public class DefaultMavenMetadataCache
+ implements MavenMetadataCache
+{
+
+ protected final Map<CacheKey, CacheRecord> cache = new ConcurrentHashMap<CacheKey, CacheRecord>();
+
+ public static class CacheKey
+ {
+ private final Artifact artifact;
+ private final long pomHash;
+ private final boolean resolveManagedVersions;
+ private final List<ArtifactRepository> repositories = new ArrayList<ArtifactRepository>();
+ private final int hashCode;
+
+ public CacheKey( Artifact artifact, boolean resolveManagedVersions, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ {
+ File file = artifact.getFile();
+ this.artifact = ArtifactUtils.copyArtifact( artifact );
+ if ( "pom".equals( artifact.getType() ) && file != null )
+ {
+ pomHash = file.getPath().hashCode() + file.lastModified();
+ }
+ else
+ {
+ pomHash = 0;
+ }
+ this.resolveManagedVersions = resolveManagedVersions;
+ this.repositories.add( localRepository );
+ this.repositories.addAll( remoteRepositories );
+
+ int hash = 17;
+ hash = hash * 31 + artifactHashCode( artifact );
+ hash = hash * 31 + ( resolveManagedVersions ? 1 : 2 );
+ hash = hash * 31 + repositoriesHashCode( repositories );
+ this.hashCode = hash;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return hashCode;
+ }
+
+ @Override
+ public boolean equals( Object o )
+ {
+ if ( o == this )
+ {
+ return true;
+ }
+
+ if ( !( o instanceof CacheKey ) )
+ {
+ return false;
+ }
+
+ CacheKey other = (CacheKey) o;
+
+ return pomHash == other.pomHash && artifactEquals( artifact, other.artifact )
+ && resolveManagedVersions == other.resolveManagedVersions
+ && repositoriesEquals( repositories, other.repositories );
+ }
+ }
+
+ private static int artifactHashCode( Artifact a )
+ {
+ int result = 17;
+ result = 31 * result + a.getGroupId().hashCode();
+ result = 31 * result + a.getArtifactId().hashCode();
+ result = 31 * result + a.getType().hashCode();
+ if ( a.getVersion() != null )
+ {
+ result = 31 * result + a.getVersion().hashCode();
+ }
+ result = 31 * result + ( a.getClassifier() != null ? a.getClassifier().hashCode() : 0 );
+ result = 31 * result + ( a.getScope() != null ? a.getScope().hashCode() : 0 );
+ result = 31 * result + ( a.getDependencyFilter() != null ? a.getDependencyFilter().hashCode() : 0 );
+ result = 31 * result + ( a.isOptional() ? 1 : 0 );
+ return result;
+ }
+
+ private static boolean artifactEquals( Artifact a1, Artifact a2 )
+ {
+ if ( a1 == a2 )
+ {
+ return true;
+ }
+
+ return eq( a1.getGroupId(), a2.getGroupId() )
+ && eq( a1.getArtifactId(), a2.getArtifactId() )
+ && eq( a1.getType(), a2.getType() )
+ && eq( a1.getVersion(), a2.getVersion() )
+ && eq( a1.getClassifier(), a2.getClassifier() )
+ && eq( a1.getScope(), a2.getScope() )
+ && eq( a1.getDependencyFilter(), a2.getDependencyFilter() )
+ && a1.isOptional() == a2.isOptional();
+ }
+
+ private static int repositoryHashCode( ArtifactRepository repository )
+ {
+ int result = 17;
+ result = 31 * result + ( repository.getId() != null ? repository.getId().hashCode() : 0 );
+ return result;
+ }
+
+ private static int repositoriesHashCode( List<ArtifactRepository> repositories )
+ {
+ int result = 17;
+ for ( ArtifactRepository repository : repositories )
+ {
+ result = 31 * result + repositoryHashCode( repository );
+ }
+ return result;
+ }
+
+ private static boolean repositoryEquals( ArtifactRepository r1, ArtifactRepository r2 )
+ {
+ if ( r1 == r2 )
+ {
+ return true;
+ }
+
+ return eq( r1.getId(), r2.getId() ) && eq( r1.getUrl(), r2.getUrl() )
+ && repositoryPolicyEquals( r1.getReleases(), r2.getReleases() )
+ && repositoryPolicyEquals( r1.getSnapshots(), r2.getSnapshots() );
+ }
+
+ private static boolean repositoryPolicyEquals( ArtifactRepositoryPolicy p1, ArtifactRepositoryPolicy p2 )
+ {
+ if ( p1 == p2 )
+ {
+ return true;
+ }
+
+ return p1.isEnabled() == p2.isEnabled() && eq( p1.getUpdatePolicy(), p2.getUpdatePolicy() );
+ }
+
+ private static boolean repositoriesEquals( List<ArtifactRepository> r1, List<ArtifactRepository> r2 )
+ {
+ if ( r1.size() != r2.size() )
+ {
+ return false;
+ }
+
+ for ( Iterator<ArtifactRepository> it1 = r1.iterator(), it2 = r2.iterator(); it1.hasNext(); )
+ {
+ if ( !repositoryEquals( it1.next(), it2.next() ) )
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private static <T> boolean eq( T s1, T s2 )
+ {
+ return s1 != null ? s1.equals( s2 ) : s2 == null;
+ }
+
+ public class CacheRecord
+ {
+ private Artifact pomArtifact;
+ private Artifact relocatedArtifact;
+ private List<Artifact> artifacts;
+ private Map<String, Artifact> managedVersions;
+ private List<ArtifactRepository> remoteRepositories;
+
+ private long length;
+ private long timestamp;
+
+ CacheRecord( Artifact pomArtifact, Artifact relocatedArtifact, Set<Artifact> artifacts,
+ Map<String, Artifact> managedVersions, List<ArtifactRepository> remoteRepositories )
+ {
+ this.pomArtifact = ArtifactUtils.copyArtifact( pomArtifact );
+ this.relocatedArtifact = ArtifactUtils.copyArtifactSafe( relocatedArtifact );
+ this.artifacts = ArtifactUtils.copyArtifacts( artifacts, new ArrayList<Artifact>() );
+ this.remoteRepositories = new ArrayList<ArtifactRepository>( remoteRepositories );
+
+ this.managedVersions = managedVersions;
+ if ( managedVersions != null )
+ {
+ this.managedVersions =
+ ArtifactUtils.copyArtifacts( managedVersions, new LinkedHashMap<String, Artifact>() );
+ }
+
+ File pomFile = pomArtifact.getFile();
+ if ( pomFile != null && pomFile.canRead() )
+ {
+ this.length = pomFile.length();
+ this.timestamp = pomFile.lastModified();
+ }
+ else
+ {
+ this.length = -1;
+ this.timestamp = -1;
+ }
+ }
+
+ public Artifact getArtifact()
+ {
+ return pomArtifact;
+ }
+
+ public Artifact getRelocatedArtifact()
+ {
+ return relocatedArtifact;
+ }
+
+ public List<Artifact> getArtifacts()
+ {
+ return artifacts;
+ }
+
+ public Map<String, Artifact> getManagedVersions()
+ {
+ return managedVersions;
+ }
+
+ public List<ArtifactRepository> getRemoteRepositories()
+ {
+ return remoteRepositories;
+ }
+
+ public boolean isStale()
+ {
+ File pomFile = pomArtifact.getFile();
+ if ( pomFile != null )
+ {
+ if ( pomFile.canRead() )
+ {
+ return length != pomFile.length() || timestamp != pomFile.lastModified();
+ }
+ else
+ {
+ // if the POM didn't exist, retry if any repo is configured to always update
+ boolean snapshot = pomArtifact.isSnapshot();
+ for ( ArtifactRepository repository : remoteRepositories )
+ {
+ ArtifactRepositoryPolicy policy =
+ snapshot ? repository.getSnapshots() : repository.getReleases();
+ if ( ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS.equals( policy.getUpdatePolicy() ) )
+ {
+ return true;
+ }
+ }
+ }
+ }
+
+ return length != -1 || timestamp != -1;
+ }
+ }
+
+
+ public ResolutionGroup get( Artifact artifact, boolean resolveManagedVersions, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ {
+ CacheKey cacheKey = newCacheKey( artifact, resolveManagedVersions, localRepository, remoteRepositories );
+
+ CacheRecord cacheRecord = cache.get( cacheKey );
+
+ if ( cacheRecord != null && !cacheRecord.isStale() )
+ {
+ Artifact pomArtifact = ArtifactUtils.copyArtifact( cacheRecord.getArtifact() );
+ Artifact relocatedArtifact = ArtifactUtils.copyArtifactSafe( cacheRecord.getRelocatedArtifact() );
+ Set<Artifact> artifacts =
+ ArtifactUtils.copyArtifacts( cacheRecord.getArtifacts(), new LinkedHashSet<Artifact>() );
+ Map<String, Artifact> managedVersions = cacheRecord.getManagedVersions();
+ if ( managedVersions != null )
+ {
+ managedVersions = ArtifactUtils.copyArtifacts( managedVersions, new LinkedHashMap<String, Artifact>() );
+ }
+ return new ResolutionGroup( pomArtifact, relocatedArtifact, artifacts, managedVersions,
+ cacheRecord.getRemoteRepositories() );
+ }
+
+ cache.remove( cacheKey );
+
+ return null;
+ }
+
+ public void put( Artifact artifact, boolean resolveManagedVersions, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories, ResolutionGroup result )
+ {
+ put( newCacheKey( artifact, resolveManagedVersions, localRepository, remoteRepositories ), result );
+ }
+
+ protected CacheKey newCacheKey( Artifact artifact, boolean resolveManagedVersions,
+ ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
+ {
+ return new CacheKey( artifact, resolveManagedVersions, localRepository, remoteRepositories );
+ }
+
+ protected void put( CacheKey cacheKey, ResolutionGroup result )
+ {
+ CacheRecord cacheRecord =
+ new CacheRecord( result.getPomArtifact(), result.getRelocatedArtifact(), result.getArtifacts(),
+ result.getManagedVersions(), result.getResolutionRepositories() );
+
+ cache.put( cacheKey, cacheRecord );
+ }
+
+ public void flush()
+ {
+ cache.clear();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMetadataSource.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMetadataSource.java
new file mode 100644
index 00000000..91f665b5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMetadataSource.java
@@ -0,0 +1,37 @@
+package org.apache.maven.project.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * This realizes the metadata source via the default hint to provide backward-compat with Maven 2.x whose Plexus version
+ * registered component descriptors twice: once keyed by role+roleHint and once keyed by role only. This effectively
+ * made the metadata source available with its original role hint ("maven") as well as the default hint.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = ArtifactMetadataSource.class )
+public class DefaultMetadataSource
+ extends MavenMetadataSource
+{
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/InvalidDependencyVersionException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/InvalidDependencyVersionException.java
new file mode 100644
index 00000000..8a1de685
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/InvalidDependencyVersionException.java
@@ -0,0 +1,55 @@
+package org.apache.maven.project.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.project.InvalidProjectVersionException;
+
+/**
+ * Thrown if a dependency has an invalid version.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class InvalidDependencyVersionException
+ extends InvalidProjectVersionException
+{
+ private Dependency dependency;
+
+ public InvalidDependencyVersionException( String projectId, Dependency dependency, File pomFile,
+ InvalidVersionSpecificationException cause )
+ {
+ super( projectId, formatLocationInPom( dependency ), dependency.getVersion(), pomFile, cause );
+ this.dependency = dependency;
+ }
+
+ private static String formatLocationInPom( Dependency dependency )
+ {
+ return "Dependency: " + ArtifactUtils.versionlessKey( dependency.getGroupId(), dependency.getArtifactId() );
+ }
+
+ public Dependency getDependency()
+ {
+ return dependency;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataCache.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataCache.java
new file mode 100644
index 00000000..036ee86c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataCache.java
@@ -0,0 +1,38 @@
+package org.apache.maven.project.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.metadata.ResolutionGroup;
+
+public interface MavenMetadataCache
+{
+
+ ResolutionGroup get( Artifact artifact, boolean resolveManagedVersions, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories );
+
+ void put( Artifact artifact, boolean resolveManagedVersions, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories, ResolutionGroup result );
+
+ void flush();
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
new file mode 100644
index 00000000..1fb5c545
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
@@ -0,0 +1,770 @@
+package org.apache.maven.project.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.metadata.ResolutionGroup;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException;
+import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.model.Exclusion;
+import org.apache.maven.model.Relocation;
+import org.apache.maven.model.building.ModelBuildingException;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblem;
+import org.apache.maven.model.resolution.UnresolvableModelException;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.project.DefaultProjectBuildingRequest;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.properties.internal.EnvironmentUtils;
+import org.apache.maven.properties.internal.SystemProperties;
+import org.apache.maven.repository.legacy.metadata.DefaultMetadataResolutionRequest;
+import org.apache.maven.repository.legacy.metadata.MetadataResolutionRequest;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.logging.Logger;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.RepositoryPolicy;
+import org.eclipse.aether.transfer.ArtifactNotFoundException;
+
+/**
+ * @author Jason van Zyl
+ */
+@Component( role = ArtifactMetadataSource.class, hint = "maven" )
+public class MavenMetadataSource
+ implements ArtifactMetadataSource
+{
+ @Requirement
+ private RepositoryMetadataManager repositoryMetadataManager;
+
+ @Requirement
+ private ArtifactFactory repositorySystem;
+
+ //TODO: This prevents a cycle in the composition which shows us another problem we need to deal with.
+ //@Requirement
+ private ProjectBuilder projectBuilder;
+
+ @Requirement
+ private PlexusContainer container;
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private MavenMetadataCache cache;
+
+ @Requirement
+ private LegacySupport legacySupport;
+
+ private void injectSession( MetadataResolutionRequest request )
+ {
+ RepositorySystemSession session = legacySupport.getRepositorySession();
+
+ if ( session != null )
+ {
+ request.setOffline( session.isOffline() );
+ request.setForceUpdate( RepositoryPolicy.UPDATE_POLICY_ALWAYS.equals( session.getUpdatePolicy() ) );
+ }
+ }
+
+ public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ return retrieve( artifact, localRepository, remoteRepositories, false );
+ }
+
+ public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories, boolean resolveManagedVersions )
+ throws ArtifactMetadataRetrievalException
+ {
+ MetadataResolutionRequest request = new DefaultMetadataResolutionRequest();
+ injectSession( request );
+ request.setArtifact( artifact );
+ request.setLocalRepository( localRepository );
+ request.setRemoteRepositories( remoteRepositories );
+ request.setResolveManagedVersions( resolveManagedVersions );
+ return retrieve( request );
+ }
+
+ public ResolutionGroup retrieve( MetadataResolutionRequest request )
+ throws ArtifactMetadataRetrievalException
+ {
+ Artifact artifact = request.getArtifact();
+
+ //
+ // If we have a system scoped artifact then we do not want any searching in local or remote repositories
+ // and we want artifact resolution to only return the system scoped artifact itself.
+ //
+ if ( artifact.getScope() != null && artifact.getScope().equals( Artifact.SCOPE_SYSTEM ) )
+ {
+ return new ResolutionGroup( null, null, null );
+ }
+
+ ResolutionGroup cached =
+ cache.get( artifact, request.isResolveManagedVersions(), request.getLocalRepository(),
+ request.getRemoteRepositories() );
+
+ if ( cached != null
+ // if the POM has no file, we cached a missing artifact, only return the cached data if no update forced
+ && ( !request.isForceUpdate() || hasFile( cached.getPomArtifact() ) ) )
+ {
+ return cached;
+ }
+
+ List<Dependency> dependencies;
+
+ List<Dependency> managedDependencies = null;
+
+ List<ArtifactRepository> pomRepositories = null;
+
+ Artifact pomArtifact;
+
+ Artifact relocatedArtifact = null;
+
+ //TODO: Not even sure this is really required as the project will be cached in the builder, we'll see this
+ // is currently the biggest hotspot
+ if ( artifact instanceof ArtifactWithDependencies )
+ {
+ pomArtifact = artifact;
+
+ dependencies = ( (ArtifactWithDependencies) artifact ).getDependencies();
+
+ managedDependencies = ( (ArtifactWithDependencies) artifact ).getManagedDependencies();
+ }
+ else
+ {
+ ProjectRelocation rel = retrieveRelocatedProject( artifact, request );
+
+ if ( rel == null )
+ {
+ return null;
+ }
+
+ pomArtifact = rel.pomArtifact;
+
+ relocatedArtifact = rel.relocatedArtifact;
+
+ if ( rel.project == null )
+ {
+ // When this happens we have a Maven 1.x POM, or some invalid POM.
+ // It should have never found its way into Maven 2.x repository but it did.
+ dependencies = Collections.emptyList();
+ }
+ else
+ {
+ dependencies = rel.project.getDependencies();
+
+ DependencyManagement depMngt = rel.project.getDependencyManagement();
+ managedDependencies = ( depMngt != null ) ? depMngt.getDependencies() : null;
+
+ pomRepositories = rel.project.getRemoteArtifactRepositories();
+ }
+ }
+
+ Set<Artifact> artifacts = Collections.<Artifact>emptySet();
+
+ if ( !artifact.getArtifactHandler().isIncludesDependencies() )
+ {
+ artifacts = new LinkedHashSet<Artifact>();
+
+ for ( Dependency dependency : dependencies )
+ {
+ Artifact dependencyArtifact = createDependencyArtifact( dependency, artifact, pomArtifact );
+
+ if ( dependencyArtifact != null )
+ {
+ artifacts.add( dependencyArtifact );
+ }
+ }
+ }
+
+ Map<String, Artifact> managedVersions = null;
+
+ if ( managedDependencies != null && request.isResolveManagedVersions() )
+ {
+ managedVersions = new HashMap<String, Artifact>();
+
+ for ( Dependency managedDependency : managedDependencies )
+ {
+ Artifact managedArtifact = createDependencyArtifact( managedDependency, null, pomArtifact );
+
+ managedVersions.put( managedDependency.getManagementKey(), managedArtifact );
+ }
+ }
+
+ List<ArtifactRepository> aggregatedRepositories =
+ aggregateRepositories( request.getRemoteRepositories(), pomRepositories );
+
+ ResolutionGroup result =
+ new ResolutionGroup( pomArtifact, relocatedArtifact, artifacts, managedVersions, aggregatedRepositories );
+
+ cache.put( artifact, request.isResolveManagedVersions(), request.getLocalRepository(),
+ request.getRemoteRepositories(), result );
+
+ return result;
+ }
+
+ private boolean hasFile( Artifact artifact )
+ {
+ return artifact != null && artifact.getFile() != null && artifact.getFile().exists();
+ }
+
+ private List<ArtifactRepository> aggregateRepositories( List<ArtifactRepository> requestRepositories,
+ List<ArtifactRepository> pomRepositories )
+ {
+ List<ArtifactRepository> repositories = requestRepositories;
+
+ if ( pomRepositories != null && !pomRepositories.isEmpty() )
+ {
+ Map<String, ArtifactRepository> repos = new LinkedHashMap<String, ArtifactRepository>();
+
+ for ( ArtifactRepository repo : requestRepositories )
+ {
+ if ( !repos.containsKey( repo.getId() ) )
+ {
+ repos.put( repo.getId(), repo );
+ }
+ }
+
+ for ( ArtifactRepository repo : pomRepositories )
+ {
+ if ( !repos.containsKey( repo.getId() ) )
+ {
+ repos.put( repo.getId(), repo );
+ }
+ }
+
+ repositories = new ArrayList<ArtifactRepository>( repos.values() );
+ }
+
+ return repositories;
+ }
+
+ private Artifact createDependencyArtifact( Dependency dependency, Artifact owner, Artifact pom )
+ throws ArtifactMetadataRetrievalException
+ {
+ try
+ {
+ String inheritedScope = ( owner != null ) ? owner.getScope() : null;
+
+ ArtifactFilter inheritedFilter = ( owner != null ) ? owner.getDependencyFilter() : null;
+
+ return createDependencyArtifact( repositorySystem, dependency, inheritedScope, inheritedFilter );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ throw new ArtifactMetadataRetrievalException( "Invalid version for dependency "
+ + dependency.getManagementKey() + ": " + e.getMessage(), e, pom );
+ }
+ }
+
+ private static Artifact createDependencyArtifact( ArtifactFactory factory, Dependency dependency,
+ String inheritedScope, ArtifactFilter inheritedFilter )
+ throws InvalidVersionSpecificationException
+ {
+ String effectiveScope = getEffectiveScope( dependency.getScope(), inheritedScope );
+
+ if ( effectiveScope == null )
+ {
+ return null;
+ }
+
+ VersionRange versionRange = VersionRange.createFromVersionSpec( dependency.getVersion() );
+
+ Artifact dependencyArtifact =
+ factory.createDependencyArtifact( dependency.getGroupId(), dependency.getArtifactId(), versionRange,
+ dependency.getType(), dependency.getClassifier(), effectiveScope,
+ dependency.isOptional() );
+
+ ArtifactFilter dependencyFilter = inheritedFilter;
+
+ if ( dependencyFilter != null && !dependencyFilter.include( dependencyArtifact ) )
+ {
+ return null;
+ }
+
+ if ( Artifact.SCOPE_SYSTEM.equals( effectiveScope ) )
+ {
+ dependencyArtifact.setFile( new File( dependency.getSystemPath() ) );
+ }
+
+ dependencyArtifact.setDependencyFilter( createDependencyFilter( dependency, dependencyFilter ) );
+
+ return dependencyArtifact;
+ }
+
+ private static String getEffectiveScope( String originalScope, String inheritedScope )
+ {
+ String effectiveScope = Artifact.SCOPE_RUNTIME;
+
+ if ( originalScope == null )
+ {
+ originalScope = Artifact.SCOPE_COMPILE;
+ }
+
+ if ( inheritedScope == null )
+ {
+ // direct dependency retains its scope
+ effectiveScope = originalScope;
+ }
+ else if ( Artifact.SCOPE_TEST.equals( originalScope ) || Artifact.SCOPE_PROVIDED.equals( originalScope ) )
+ {
+ // test and provided are not transitive, so exclude them
+ effectiveScope = null;
+ }
+ else if ( Artifact.SCOPE_SYSTEM.equals( originalScope ) )
+ {
+ // system scope come through unchanged...
+ effectiveScope = Artifact.SCOPE_SYSTEM;
+ }
+ else if ( Artifact.SCOPE_COMPILE.equals( originalScope ) && Artifact.SCOPE_COMPILE.equals( inheritedScope ) )
+ {
+ // added to retain compile scope. Remove if you want compile inherited as runtime
+ effectiveScope = Artifact.SCOPE_COMPILE;
+ }
+ else if ( Artifact.SCOPE_TEST.equals( inheritedScope ) )
+ {
+ effectiveScope = Artifact.SCOPE_TEST;
+ }
+ else if ( Artifact.SCOPE_PROVIDED.equals( inheritedScope ) )
+ {
+ effectiveScope = Artifact.SCOPE_PROVIDED;
+ }
+
+ return effectiveScope;
+ }
+
+ private static ArtifactFilter createDependencyFilter( Dependency dependency, ArtifactFilter inheritedFilter )
+ {
+ ArtifactFilter effectiveFilter = inheritedFilter;
+
+ if ( !dependency.getExclusions().isEmpty() )
+ {
+ List<String> exclusions = new ArrayList<String>();
+
+ for ( Exclusion e : dependency.getExclusions() )
+ {
+ exclusions.add( e.getGroupId() + ':' + e.getArtifactId() );
+ }
+
+ effectiveFilter = new ExcludesArtifactFilter( exclusions );
+
+ if ( inheritedFilter != null )
+ {
+ effectiveFilter = new AndArtifactFilter( Arrays.asList( inheritedFilter, effectiveFilter ) );
+ }
+ }
+
+ return effectiveFilter;
+ }
+
+ public List<ArtifactVersion> retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ MetadataResolutionRequest request = new DefaultMetadataResolutionRequest();
+ injectSession( request );
+ request.setArtifact( artifact );
+ request.setLocalRepository( localRepository );
+ request.setRemoteRepositories( remoteRepositories );
+ return retrieveAvailableVersions( request );
+ }
+
+ public List<ArtifactVersion> retrieveAvailableVersions( MetadataResolutionRequest request )
+ throws ArtifactMetadataRetrievalException
+ {
+ RepositoryMetadata metadata = new ArtifactRepositoryMetadata( request.getArtifact() );
+
+ try
+ {
+ repositoryMetadataManager.resolve( metadata, request );
+ }
+ catch ( RepositoryMetadataResolutionException e )
+ {
+ throw new ArtifactMetadataRetrievalException( e.getMessage(), e, request.getArtifact() );
+ }
+
+ List<String> availableVersions = request.getLocalRepository().findVersions( request.getArtifact() );
+
+ return retrieveAvailableVersionsFromMetadata( metadata.getMetadata(), availableVersions );
+ }
+
+ public List<ArtifactVersion> retrieveAvailableVersionsFromDeploymentRepository( Artifact artifact,
+ ArtifactRepository localRepository,
+ ArtifactRepository deploymentRepository )
+ throws ArtifactMetadataRetrievalException
+ {
+ RepositoryMetadata metadata = new ArtifactRepositoryMetadata( artifact );
+
+ try
+ {
+ repositoryMetadataManager.resolveAlways( metadata, localRepository, deploymentRepository );
+ }
+ catch ( RepositoryMetadataResolutionException e )
+ {
+ throw new ArtifactMetadataRetrievalException( e.getMessage(), e, artifact );
+ }
+
+ List<String> availableVersions = localRepository.findVersions( artifact );
+
+ return retrieveAvailableVersionsFromMetadata( metadata.getMetadata(), availableVersions );
+ }
+
+ private List<ArtifactVersion> retrieveAvailableVersionsFromMetadata( Metadata repoMetadata,
+ List<String> availableVersions )
+ {
+ Collection<String> versions = new LinkedHashSet<String>();
+
+ if ( ( repoMetadata != null ) && ( repoMetadata.getVersioning() != null ) )
+ {
+ versions.addAll( repoMetadata.getVersioning().getVersions() );
+ }
+
+ versions.addAll( availableVersions );
+
+ List<ArtifactVersion> artifactVersions = new ArrayList<ArtifactVersion>( versions.size() );
+
+ for ( String version : versions )
+ {
+ artifactVersions.add( new DefaultArtifactVersion( version ) );
+ }
+
+ return artifactVersions;
+ }
+
+ // USED BY MAVEN ASSEMBLY PLUGIN
+ @Deprecated
+ public static Set<Artifact> createArtifacts( ArtifactFactory artifactFactory, List<Dependency> dependencies,
+ String inheritedScope, ArtifactFilter dependencyFilter,
+ MavenProject project )
+ throws InvalidDependencyVersionException
+ {
+ Set<Artifact> artifacts = new LinkedHashSet<Artifact>();
+
+ for ( Dependency d : dependencies )
+ {
+ Artifact dependencyArtifact;
+ try
+ {
+ dependencyArtifact = createDependencyArtifact( artifactFactory, d, inheritedScope, dependencyFilter );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ throw new InvalidDependencyVersionException( project.getId(), d, project.getFile(), e );
+ }
+
+ if ( dependencyArtifact != null )
+ {
+ artifacts.add( dependencyArtifact );
+ }
+ }
+
+ return artifacts;
+ }
+
+ private ProjectBuilder getProjectBuilder()
+ {
+ if ( projectBuilder != null )
+ {
+ return projectBuilder;
+ }
+
+ try
+ {
+ projectBuilder = container.lookup( ProjectBuilder.class );
+ }
+ catch ( ComponentLookupException e )
+ {
+ // Won't happen
+ }
+
+ return projectBuilder;
+ }
+
+ private ProjectRelocation retrieveRelocatedProject( Artifact artifact, MetadataResolutionRequest repositoryRequest )
+ throws ArtifactMetadataRetrievalException
+ {
+ MavenProject project;
+
+ Artifact pomArtifact;
+ Artifact relocatedArtifact = null;
+ boolean done = false;
+ do
+ {
+ project = null;
+
+ pomArtifact =
+ repositorySystem.createProjectArtifact( artifact.getGroupId(),
+ artifact.getArtifactId(),
+ artifact.getVersion(), artifact.getScope() );
+
+ if ( "pom".equals( artifact.getType() ) )
+ {
+ pomArtifact.setFile( artifact.getFile() );
+ }
+
+ if ( Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) )
+ {
+ done = true;
+ }
+ else
+ {
+ try
+ {
+ ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest();
+ configuration.setLocalRepository( repositoryRequest.getLocalRepository() );
+ configuration.setRemoteRepositories( repositoryRequest.getRemoteRepositories() );
+ configuration.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL );
+ configuration.setProcessPlugins( false );
+ configuration.setRepositoryMerging( ProjectBuildingRequest.RepositoryMerging.REQUEST_DOMINANT );
+ configuration.setSystemProperties( getSystemProperties() );
+ configuration.setRepositorySession( legacySupport.getRepositorySession() );
+
+ project = getProjectBuilder().build( pomArtifact, configuration ).getProject();
+ }
+ catch ( ProjectBuildingException e )
+ {
+ ModelProblem missingParentPom = hasMissingParentPom( e );
+ if ( missingParentPom != null )
+ {
+ throw new ArtifactMetadataRetrievalException( "Failed to process POM for "
+ + artifact.getId() + ": " + missingParentPom.getMessage(),
+ missingParentPom.getException(),
+ artifact );
+ }
+
+ String message;
+
+ if ( isMissingPom( e ) )
+ {
+ message = "Missing POM for " + artifact.getId();
+ }
+ else if ( isNonTransferrablePom( e ) )
+ {
+ throw new ArtifactMetadataRetrievalException( "Failed to retrieve POM for "
+ + artifact.getId() + ": " + e.getCause().getMessage(), e.getCause(),
+ artifact );
+ }
+ else
+ {
+ message =
+ "Invalid POM for " + artifact.getId()
+ + ", transitive dependencies (if any) will not be available"
+ + ", enable debug logging for more details";
+ }
+
+ if ( logger.isDebugEnabled() )
+ {
+ message += ": " + e.getMessage();
+ }
+
+ logger.warn( message );
+ }
+
+ if ( project != null )
+ {
+ Relocation relocation = null;
+
+ DistributionManagement distMgmt = project.getDistributionManagement();
+ if ( distMgmt != null )
+ {
+ relocation = distMgmt.getRelocation();
+
+ artifact.setDownloadUrl( distMgmt.getDownloadUrl() );
+ pomArtifact.setDownloadUrl( distMgmt.getDownloadUrl() );
+ }
+
+ if ( relocation != null )
+ {
+ if ( relocation.getGroupId() != null )
+ {
+ artifact.setGroupId( relocation.getGroupId() );
+ relocatedArtifact = artifact;
+ project.setGroupId( relocation.getGroupId() );
+ }
+ if ( relocation.getArtifactId() != null )
+ {
+ artifact.setArtifactId( relocation.getArtifactId() );
+ relocatedArtifact = artifact;
+ project.setArtifactId( relocation.getArtifactId() );
+ }
+ if ( relocation.getVersion() != null )
+ {
+ // note: see MNG-3454. This causes a problem, but fixing it may break more.
+ artifact.setVersionRange( VersionRange.createFromVersion( relocation.getVersion() ) );
+ relocatedArtifact = artifact;
+ project.setVersion( relocation.getVersion() );
+ }
+
+ if ( artifact.getDependencyFilter() != null
+ && !artifact.getDependencyFilter().include( artifact ) )
+ {
+ return null;
+ }
+
+ // MNG-2861: the artifact data has changed. If the available versions where previously
+ // retrieved, we need to update it.
+ // TODO: shouldn't the versions be merged across relocations?
+ List<ArtifactVersion> available = artifact.getAvailableVersions();
+ if ( available != null && !available.isEmpty() )
+ {
+ MetadataResolutionRequest metadataRequest =
+ new DefaultMetadataResolutionRequest( repositoryRequest );
+ metadataRequest.setArtifact( artifact );
+ available = retrieveAvailableVersions( metadataRequest );
+ artifact.setAvailableVersions( available );
+ }
+
+ String message =
+ "\n This artifact has been relocated to " + artifact.getGroupId() + ":"
+ + artifact.getArtifactId() + ":" + artifact.getVersion() + ".\n";
+
+ if ( relocation.getMessage() != null )
+ {
+ message += " " + relocation.getMessage() + "\n";
+ }
+
+ if ( artifact.getDependencyTrail() != null && artifact.getDependencyTrail().size() == 1 )
+ {
+ logger.warn( "While downloading " + pomArtifact.getGroupId() + ":"
+ + pomArtifact.getArtifactId() + ":" + pomArtifact.getVersion() + message + "\n" );
+ }
+ else
+ {
+ logger.debug( "While downloading " + pomArtifact.getGroupId() + ":"
+ + pomArtifact.getArtifactId() + ":" + pomArtifact.getVersion() + message + "\n" );
+ }
+ }
+ else
+ {
+ done = true;
+ }
+ }
+ else
+ {
+ done = true;
+ }
+ }
+ }
+ while ( !done );
+
+ ProjectRelocation rel = new ProjectRelocation();
+ rel.project = project;
+ rel.pomArtifact = pomArtifact;
+ rel.relocatedArtifact = relocatedArtifact;
+
+ return rel;
+ }
+
+ private ModelProblem hasMissingParentPom( ProjectBuildingException e )
+ {
+ if ( e.getCause() instanceof ModelBuildingException )
+ {
+ ModelBuildingException mbe = (ModelBuildingException) e.getCause();
+ for ( ModelProblem problem : mbe.getProblems() )
+ {
+ if ( problem.getException() instanceof UnresolvableModelException )
+ {
+ return problem;
+ }
+ }
+
+ }
+ return null;
+ }
+
+ private boolean isMissingPom( Exception e )
+ {
+ if ( e.getCause() instanceof MultipleArtifactsNotFoundException )
+ {
+ return true;
+ }
+ return e.getCause() instanceof org.eclipse.aether.resolution.ArtifactResolutionException
+ && e.getCause().getCause() instanceof ArtifactNotFoundException;
+ }
+
+ private boolean isNonTransferrablePom( Exception e )
+ {
+ if ( e.getCause() instanceof ArtifactResolutionException )
+ {
+ return true;
+ }
+ return e.getCause() instanceof org.eclipse.aether.resolution.ArtifactResolutionException
+ && !( e.getCause().getCause() instanceof ArtifactNotFoundException );
+ }
+
+ private Properties getSystemProperties()
+ {
+ Properties props = new Properties();
+
+ EnvironmentUtils.addEnvVars( props );
+
+ SystemProperties.addSystemProperties( props );
+
+ return props;
+ }
+
+ private static final class ProjectRelocation
+ {
+ private MavenProject project;
+
+ private Artifact pomArtifact;
+
+ private Artifact relocatedArtifact;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/PluginArtifact.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/PluginArtifact.java
new file mode 100644
index 00000000..d348d59c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/PluginArtifact.java
@@ -0,0 +1,94 @@
+package org.apache.maven.project.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Plugin;
+
+public class PluginArtifact
+ extends DefaultArtifact
+ implements ArtifactWithDependencies
+{
+ private Plugin plugin;
+
+ public PluginArtifact( Plugin plugin, Artifact pluginArtifact )
+ {
+ super( plugin.getGroupId(), plugin.getArtifactId(), plugin.getVersion(), null, "maven-plugin", null,
+ new PluginArtifactHandler() );
+ this.plugin = plugin;
+ setFile( pluginArtifact.getFile() );
+ setResolved( true );
+ }
+
+ public List<Dependency> getDependencies()
+ {
+ return plugin.getDependencies();
+ }
+
+ public List<Dependency> getManagedDependencies()
+ {
+ return Collections.emptyList();
+ }
+
+ static class PluginArtifactHandler
+ implements ArtifactHandler
+ {
+ public String getClassifier()
+ {
+ return null;
+ }
+
+ public String getDirectory()
+ {
+ return null;
+ }
+
+ public String getExtension()
+ {
+ return "jar";
+ }
+
+ public String getLanguage()
+ {
+ return "none";
+ }
+
+ public String getPackaging()
+ {
+ return "maven-plugin";
+ }
+
+ public boolean isAddedToClasspath()
+ {
+ return true;
+ }
+
+ public boolean isIncludesDependencies()
+ {
+ return false;
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifact.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifact.java
new file mode 100644
index 00000000..1d4a2a31
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifact.java
@@ -0,0 +1,100 @@
+package org.apache.maven.project.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.project.MavenProject;
+
+public class ProjectArtifact
+ extends DefaultArtifact
+ implements ArtifactWithDependencies
+{
+ private MavenProject project;
+
+ public ProjectArtifact( MavenProject project )
+ {
+ super( project.getGroupId(), project.getArtifactId(), project.getVersion(), null, "pom", null,
+ new PomArtifactHandler() );
+ this.project = project;
+ setFile( project.getFile() );
+ setResolved( true );
+ }
+
+ public MavenProject getProject()
+ {
+ return project;
+ }
+
+ public List<Dependency> getDependencies()
+ {
+ return project.getDependencies();
+ }
+
+ public List<Dependency> getManagedDependencies()
+ {
+ DependencyManagement depMngt = project.getDependencyManagement();
+ return ( depMngt != null ) ? depMngt.getDependencies() : Collections.<Dependency>emptyList();
+ }
+
+ static class PomArtifactHandler
+ implements ArtifactHandler
+ {
+ public String getClassifier()
+ {
+ return null;
+ }
+
+ public String getDirectory()
+ {
+ return null;
+ }
+
+ public String getExtension()
+ {
+ return "pom";
+ }
+
+ public String getLanguage()
+ {
+ return "none";
+ }
+
+ public String getPackaging()
+ {
+ return "pom";
+ }
+
+ public boolean isAddedToClasspath()
+ {
+ return false;
+ }
+
+ public boolean isIncludesDependencies()
+ {
+ return false;
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifactMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifactMetadata.java
new file mode 100644
index 00000000..7ea99bf0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifactMetadata.java
@@ -0,0 +1,130 @@
+package org.apache.maven.project.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.AbstractArtifactMetadata;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataStoreException;
+import org.codehaus.plexus.util.FileUtils;
+
+/**
+ * Attach a POM to an artifact.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class ProjectArtifactMetadata
+ extends AbstractArtifactMetadata
+{
+ private final File file;
+
+ public ProjectArtifactMetadata( Artifact artifact )
+ {
+ this( artifact, null );
+ }
+
+ public ProjectArtifactMetadata( Artifact artifact, File file )
+ {
+ super( artifact );
+ this.file = file;
+ }
+
+ public File getFile()
+ {
+ return file;
+ }
+
+ public String getRemoteFilename()
+ {
+ return getFilename();
+ }
+
+ public String getLocalFilename( ArtifactRepository repository )
+ {
+ return getFilename();
+ }
+
+ private String getFilename()
+ {
+ return getArtifactId() + "-" + artifact.getVersion() + ".pom";
+ }
+
+ public void storeInLocalRepository( ArtifactRepository localRepository, ArtifactRepository remoteRepository )
+ throws RepositoryMetadataStoreException
+ {
+ File destination =
+ new File( localRepository.getBasedir(), localRepository.pathOfLocalRepositoryMetadata( this,
+ remoteRepository ) );
+
+ // ----------------------------------------------------------------------------
+ // I'm fully aware that the file could just be moved using File.rename but
+ // there are bugs in various JVM that have problems doing this across
+ // different filesystem. So we'll incur the small hit to actually copy
+ // here and be safe. jvz.
+ // ----------------------------------------------------------------------------
+
+ try
+ {
+ FileUtils.copyFile( file, destination );
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryMetadataStoreException( "Error copying POM to the local repository.", e );
+ }
+ }
+
+ public String toString()
+ {
+ return "project information for " + artifact.getArtifactId() + " " + artifact.getVersion();
+ }
+
+ public boolean storedInArtifactVersionDirectory()
+ {
+ return true;
+ }
+
+ public String getBaseVersion()
+ {
+ return artifact.getBaseVersion();
+ }
+
+ public Object getKey()
+ {
+ return "project " + artifact.getGroupId() + ":" + artifact.getArtifactId();
+ }
+
+ public void merge( ArtifactMetadata metadata )
+ {
+ ProjectArtifactMetadata m = (ProjectArtifactMetadata) metadata;
+ if ( !m.file.equals( file ) )
+ {
+ throw new IllegalStateException( "Cannot add two different pieces of metadata for: " + getKey() );
+ }
+ }
+
+ public void merge( org.apache.maven.repository.legacy.metadata.ArtifactMetadata metadata )
+ {
+ this.merge( (ArtifactMetadata) metadata );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/path/PathTranslator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/path/PathTranslator.java
new file mode 100644
index 00000000..18e349ac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/path/PathTranslator.java
@@ -0,0 +1,41 @@
+package org.apache.maven.project.path;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.model.Model;
+
+/**
+ * @author Jason van Zyl
+ */
+@Deprecated
+public interface PathTranslator
+{
+ String ROLE = PathTranslator.class.getName();
+
+ void alignToBaseDirectory( Model model, File basedir );
+
+ String alignToBaseDirectory( String path, File basedir );
+
+ void unalignFromBaseDirectory( Model model, File basedir );
+
+ String unalignFromBaseDirectory( String directory, File basedir );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/properties/internal/EnvironmentUtils.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/properties/internal/EnvironmentUtils.java
new file mode 100644
index 00000000..2c3196fb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/properties/internal/EnvironmentUtils.java
@@ -0,0 +1,70 @@
+package org.apache.maven.properties.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+
+import org.codehaus.plexus.util.Os;
+
+/**
+ * Assists the project builder. <strong>Warning:</strong> This is an internal utility class that is only public for
+ * technical reasons, it is not part of the public API. In particular, this class can be changed or deleted without
+ * prior notice.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+public class EnvironmentUtils
+{
+
+ private static Properties envVars;
+
+ /**
+ * Adds the environment variables in the form of properties whose keys are prefixed with {@code env.}, e.g. {@code
+ * env.PATH}. Unlike native environment variables, properties are always case-sensitive. For the sake of
+ * determinism, the environment variable names will be normalized to upper case on platforms with case-insensitive
+ * variable lookup.
+ *
+ * @param props The properties to add the environment variables to, may be {@code null}.
+ */
+ public static void addEnvVars( Properties props )
+ {
+ if ( props != null )
+ {
+ if ( envVars == null )
+ {
+ Properties tmp = new Properties();
+ boolean caseSensitive = !Os.isFamily( Os.FAMILY_WINDOWS );
+ for ( Map.Entry<String, String> entry : System.getenv().entrySet() )
+ {
+ String key =
+ "env." + ( caseSensitive ? entry.getKey() : entry.getKey().toUpperCase( Locale.ENGLISH ) );
+ tmp.setProperty( key, entry.getValue() );
+ }
+ envVars = tmp;
+ }
+
+ props.putAll( envVars );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/properties/internal/SystemProperties.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/properties/internal/SystemProperties.java
new file mode 100644
index 00000000..608df2dc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/properties/internal/SystemProperties.java
@@ -0,0 +1,51 @@
+package org.apache.maven.properties.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Properties;
+
+/**
+ * @since 3.2.3
+ */
+public class SystemProperties
+{
+ /**
+ * Thread-safe System.properties copy implementation.
+ *
+ * @see http://jira.codehaus.org/browse/MNG-5670
+ */
+ public static void addSystemProperties( Properties props )
+ {
+ for ( String key : System.getProperties().stringPropertyNames() )
+ {
+ props.put( key, System.getProperty( key ) );
+ }
+ }
+
+ /**
+ * Returns System.properties copy.
+ */
+ public static Properties getSystemProperties()
+ {
+ Properties systemProperties = new Properties();
+ addSystemProperties( systemProperties );
+ return systemProperties;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactDoesNotExistException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactDoesNotExistException.java
new file mode 100644
index 00000000..296f4ea5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactDoesNotExistException.java
@@ -0,0 +1,34 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public class ArtifactDoesNotExistException
+ extends Exception
+{
+ public ArtifactDoesNotExistException( final String message )
+ {
+ super( message );
+ }
+
+ public ArtifactDoesNotExistException( final String message, final Throwable cause )
+ {
+ super( message, cause );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferEvent.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferEvent.java
new file mode 100644
index 00000000..80189e7b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferEvent.java
@@ -0,0 +1,343 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import java.io.File;
+import java.util.EventObject;
+
+/**
+ * TransferEvent is used to notify TransferListeners about progress
+ * in transfer of resources form/to the repository
+ *
+ * @author <a href="michal.maczka@dimatics.com">Michal Maczka</a>
+ */
+public class ArtifactTransferEvent
+ extends EventObject
+{
+ /**
+ * A transfer was attempted, but has not yet commenced.
+ */
+ public static final int TRANSFER_INITIATED = 0;
+
+ /**
+ * A transfer was started.
+ */
+ public static final int TRANSFER_STARTED = 1;
+
+ /**
+ * A transfer is completed.
+ */
+ public static final int TRANSFER_COMPLETED = 2;
+
+ /**
+ * A transfer is in progress.
+ */
+ public static final int TRANSFER_PROGRESS = 3;
+
+ /**
+ * An error occurred during transfer
+ */
+ public static final int TRANSFER_ERROR = 4;
+
+ /**
+ * Indicates GET transfer (from the repository)
+ */
+ public static final int REQUEST_GET = 5;
+
+ /**
+ * Indicates PUT transfer (to the repository)
+ */
+ public static final int REQUEST_PUT = 6;
+
+ private int eventType;
+
+ private int requestType;
+
+ private Exception exception;
+
+ private File localFile;
+
+ private ArtifactTransferResource artifact;
+
+ private long transferredBytes;
+
+ private byte[] dataBuffer;
+
+ private int dataOffset;
+
+ private int dataLength;
+
+ public ArtifactTransferEvent( String wagon, final int eventType, final int requestType,
+ ArtifactTransferResource artifact )
+ {
+ super( wagon );
+
+ setEventType( eventType );
+
+ setRequestType( requestType );
+
+ this.artifact = artifact;
+ }
+
+ public ArtifactTransferEvent( String wagon, final Exception exception, final int requestType,
+ ArtifactTransferResource artifact )
+ {
+ this( wagon, TRANSFER_ERROR, requestType, artifact );
+
+ this.exception = exception;
+ }
+
+ public ArtifactTransferResource getResource()
+ {
+ return artifact;
+ }
+
+ /**
+ * @return Returns the exception.
+ */
+ public Exception getException()
+ {
+ return exception;
+ }
+
+ /**
+ * Returns the request type.
+ *
+ * @return Returns the request type. The Request type is one of
+ * <code>TransferEvent.REQUEST_GET<code> or <code>TransferEvent.REQUEST_PUT<code>
+ */
+ public int getRequestType()
+ {
+ return requestType;
+ }
+
+ /**
+ * Sets the request type
+ *
+ * @param requestType The requestType to set.
+ * The Request type value should be either
+ * <code>TransferEvent.REQUEST_GET<code> or <code>TransferEvent.REQUEST_PUT<code>.
+ * @throws IllegalArgumentException when
+ */
+ public void setRequestType( final int requestType )
+ {
+ switch ( requestType )
+ {
+
+ case REQUEST_PUT:
+ break;
+ case REQUEST_GET:
+ break;
+
+ default :
+ throw new IllegalArgumentException( "Illegal request type: " + requestType );
+ }
+
+ this.requestType = requestType;
+ }
+
+ /**
+ * @return Returns the eventType.
+ */
+ public int getEventType()
+ {
+ return eventType;
+ }
+
+ /**
+ * @param eventType The eventType to set.
+ */
+ public void setEventType( final int eventType )
+ {
+ switch ( eventType )
+ {
+
+ case TRANSFER_INITIATED:
+ break;
+ case TRANSFER_STARTED:
+ break;
+ case TRANSFER_COMPLETED:
+ break;
+ case TRANSFER_PROGRESS:
+ break;
+ case TRANSFER_ERROR:
+ break;
+ default :
+ throw new IllegalArgumentException( "Illegal event type: " + eventType );
+ }
+
+ this.eventType = eventType;
+ }
+
+ /**
+ * @return Returns the local file.
+ */
+ public File getLocalFile()
+ {
+ return localFile;
+ }
+
+ /**
+ * @param localFile The local file to set.
+ */
+ public void setLocalFile( File localFile )
+ {
+ this.localFile = localFile;
+ }
+
+ public long getTransferredBytes()
+ {
+ return transferredBytes;
+ }
+
+ public void setTransferredBytes( long transferredBytes )
+ {
+ this.transferredBytes = transferredBytes;
+ }
+
+ public byte[] getDataBuffer()
+ {
+ return dataBuffer;
+ }
+
+ public void setDataBuffer( byte[] dataBuffer )
+ {
+ this.dataBuffer = dataBuffer;
+ }
+
+ public int getDataOffset()
+ {
+ return dataOffset;
+ }
+
+ public void setDataOffset( int dataOffset )
+ {
+ this.dataOffset = dataOffset;
+ }
+
+ public int getDataLength()
+ {
+ return dataLength;
+ }
+
+ public void setDataLength( int dataLength )
+ {
+ this.dataLength = dataLength;
+ }
+
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( "TransferEvent[" );
+
+ switch ( this.getRequestType() )
+ {
+ case REQUEST_GET:
+ sb.append( "GET" );
+ break;
+ case REQUEST_PUT:
+ sb.append( "PUT" );
+ break;
+ default:
+ sb.append( this.getRequestType() );
+ break;
+ }
+
+ sb.append( "|" );
+ switch ( this.getEventType() )
+ {
+ case TRANSFER_COMPLETED:
+ sb.append( "COMPLETED" );
+ break;
+ case TRANSFER_ERROR:
+ sb.append( "ERROR" );
+ break;
+ case TRANSFER_INITIATED:
+ sb.append( "INITIATED" );
+ break;
+ case TRANSFER_PROGRESS:
+ sb.append( "PROGRESS" );
+ break;
+ case TRANSFER_STARTED:
+ sb.append( "STARTED" );
+ break;
+ default:
+ sb.append( this.getEventType() );
+ break;
+ }
+
+ sb.append( "|" );
+ sb.append( this.getLocalFile() ).append( "|" );
+ sb.append( "]" );
+
+ return sb.toString();
+ }
+
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + eventType;
+ result = prime * result + ( ( exception == null ) ? 0 : exception.hashCode() );
+ result = prime * result + ( ( localFile == null ) ? 0 : localFile.hashCode() );
+ result = prime * result + requestType;
+ return result;
+ }
+
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+ if ( ( obj == null ) || ( getClass() != obj.getClass() ) )
+ {
+ return false;
+ }
+ final ArtifactTransferEvent other = (ArtifactTransferEvent) obj;
+ if ( eventType != other.eventType )
+ {
+ return false;
+ }
+ if ( exception == null )
+ {
+ if ( other.exception != null )
+ {
+ return false;
+ }
+ }
+ else if ( !exception.getClass().equals( other.exception.getClass() ) )
+ {
+ return false;
+ }
+ if ( requestType != other.requestType )
+ {
+ return false;
+ }
+ else if ( !source.equals( other.source ) )
+ {
+ return false;
+ }
+ return true;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferFailedException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferFailedException.java
new file mode 100644
index 00000000..9315f4c7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferFailedException.java
@@ -0,0 +1,35 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public class ArtifactTransferFailedException
+ extends Exception
+{
+ public ArtifactTransferFailedException( final String message )
+ {
+ super( message );
+ }
+
+ public ArtifactTransferFailedException( final String message, final Throwable cause )
+ {
+ super( message, cause );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferListener.java
new file mode 100644
index 00000000..72a56cf0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferListener.java
@@ -0,0 +1,36 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public interface ArtifactTransferListener
+{
+ boolean isShowChecksumEvents();
+
+ void setShowChecksumEvents( boolean showChecksumEvents );
+
+ void transferInitiated( ArtifactTransferEvent transferEvent );
+
+ void transferStarted( ArtifactTransferEvent transferEvent );
+
+ void transferProgress( ArtifactTransferEvent transferEvent );
+
+ void transferCompleted( ArtifactTransferEvent transferEvent );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferResource.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferResource.java
new file mode 100644
index 00000000..8ed081ff
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferResource.java
@@ -0,0 +1,66 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Describes a resource being uploaded or downloaded by the repository system.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ArtifactTransferResource
+{
+
+ /**
+ * The base URL of the repository, e.g. "http://repo1.maven.org/maven2/". Unless the URL is unknown, it will be
+ * terminated by a trailing slash.
+ *
+ * @return The base URL of the repository or an empty string if unknown, never {@code null}.
+ */
+ String getRepositoryUrl();
+
+ /**
+ * The path of the artifact relative to the repository's base URL.
+ *
+ * @return The path of the artifact, never {@code null}.
+ */
+ String getName();
+
+ /**
+ * Gets the full URL of the artifact.
+ *
+ * @return The full URL of the artifact, never {@code null}.
+ */
+ String getUrl();
+
+ /**
+ * The size of the artifact in bytes.
+ *
+ * @return The of the artifact in bytes or a negative value if unknown.
+ */
+ long getContentLength();
+
+ /**
+ * Gets the timestamp when the transfer of this artifact was started.
+ *
+ * @return The timestamp when the transfer of this artifact was started.
+ */
+ long getTransferStartTime();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java
new file mode 100644
index 00000000..f47cb4b1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java
@@ -0,0 +1,195 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.MavenArtifactRepository;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+
+/**
+ * Delegating local artifact repository chains the reactor, IDE workspace
+ * and user local repository.
+ */
+@Deprecated
+public class DelegatingLocalArtifactRepository
+ extends MavenArtifactRepository
+{
+ private LocalArtifactRepository buildReactor;
+
+ private LocalArtifactRepository ideWorkspace;
+
+ private ArtifactRepository userLocalArtifactRepository;
+
+ public DelegatingLocalArtifactRepository( ArtifactRepository artifactRepository )
+ {
+ this.userLocalArtifactRepository = artifactRepository;
+ }
+
+ public void setBuildReactor( LocalArtifactRepository localRepository )
+ {
+ this.buildReactor = localRepository;
+ }
+
+ public void setIdeWorkspace( LocalArtifactRepository localRepository )
+ {
+ this.ideWorkspace = localRepository;
+ }
+
+ public LocalArtifactRepository getIdeWorspace()
+ {
+ return ideWorkspace;
+ }
+
+ @Override
+ public Artifact find( Artifact artifact )
+ {
+ if ( !artifact.isRelease() && buildReactor != null )
+ {
+ artifact = buildReactor.find( artifact );
+ }
+
+ if ( !artifact.isResolved() && ideWorkspace != null )
+ {
+ artifact = ideWorkspace.find( artifact );
+ }
+
+ if ( !artifact.isResolved() )
+ {
+ artifact = userLocalArtifactRepository.find( artifact );
+ }
+
+ return artifact;
+ }
+
+ @Override
+ public List<String> findVersions( Artifact artifact )
+ {
+ Collection<String> versions = new LinkedHashSet<String>();
+
+ if ( buildReactor != null )
+ {
+ versions.addAll( buildReactor.findVersions( artifact ) );
+ }
+
+ if ( ideWorkspace != null )
+ {
+ versions.addAll( ideWorkspace.findVersions( artifact ) );
+ }
+
+ versions.addAll( userLocalArtifactRepository.findVersions( artifact ) );
+
+ return Collections.unmodifiableList( new ArrayList<String>( versions ) );
+ }
+
+ public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+ {
+ return userLocalArtifactRepository.pathOfLocalRepositoryMetadata( metadata, repository );
+ }
+
+ public String getId()
+ {
+ return userLocalArtifactRepository.getId();
+ }
+
+ @Override
+ public String pathOf( Artifact artifact )
+ {
+ return userLocalArtifactRepository.pathOf( artifact );
+ }
+
+ @Override
+ public String getBasedir()
+ {
+ return ( userLocalArtifactRepository != null ) ? userLocalArtifactRepository.getBasedir() : null;
+ }
+
+ @Override
+ public ArtifactRepositoryLayout getLayout()
+ {
+ return userLocalArtifactRepository.getLayout();
+ }
+
+ @Override
+ public ArtifactRepositoryPolicy getReleases()
+ {
+ return userLocalArtifactRepository.getReleases();
+ }
+
+ @Override
+ public ArtifactRepositoryPolicy getSnapshots()
+ {
+ return userLocalArtifactRepository.getSnapshots();
+ }
+
+ @Override
+ public String getKey()
+ {
+ return userLocalArtifactRepository.getKey();
+ }
+
+ @Override
+ public String getUrl()
+ {
+ return userLocalArtifactRepository.getUrl();
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int hash = 17;
+ hash = hash * 31 + ( buildReactor == null ? 0 : buildReactor.hashCode() );
+ hash = hash * 31 + ( ideWorkspace == null ? 0 : ideWorkspace.hashCode() );
+ hash = hash * 31 + ( userLocalArtifactRepository == null ? 0 : userLocalArtifactRepository.hashCode() );
+
+ return hash;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+ if ( obj == null )
+ {
+ return false;
+ }
+ if ( getClass() != obj.getClass() )
+ {
+ return false;
+ }
+
+ DelegatingLocalArtifactRepository other = (DelegatingLocalArtifactRepository) obj;
+
+ return eq( buildReactor, other.buildReactor )
+ && eq( ideWorkspace, other.ideWorkspace )
+ && eq( userLocalArtifactRepository, other.userLocalArtifactRepository );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/LocalArtifactRepository.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/LocalArtifactRepository.java
new file mode 100644
index 00000000..e33789e3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/LocalArtifactRepository.java
@@ -0,0 +1,33 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.MavenArtifactRepository;
+
+public abstract class LocalArtifactRepository
+ extends MavenArtifactRepository
+{
+ public static final String IDE_WORKSPACE = "ide-workspace";
+
+ public abstract Artifact find( Artifact artifact );
+
+ public abstract boolean hasLocalMetadata();
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/LocalRepositoryNotAccessibleException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/LocalRepositoryNotAccessibleException.java
new file mode 100644
index 00000000..54e4ef4b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/LocalRepositoryNotAccessibleException.java
@@ -0,0 +1,44 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+
+/**
+ * Signals a failure to store files within the local repository.
+ *
+ * @author Benjamin Bentmann
+ */
+public class LocalRepositoryNotAccessibleException
+ extends IOException
+{
+
+ public LocalRepositoryNotAccessibleException( String message, Throwable cause )
+ {
+ super( message );
+ initCause( cause );
+ }
+
+ public LocalRepositoryNotAccessibleException( String message )
+ {
+ super( message );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/RepositorySystem.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/RepositorySystem.java
new file mode 100644
index 00000000..fcc0f777
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/RepositorySystem.java
@@ -0,0 +1,164 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.Repository;
+import org.apache.maven.settings.Mirror;
+import org.apache.maven.settings.Server;
+import org.eclipse.aether.RepositorySystemSession;
+
+/**
+ * @author Jason van Zyl
+ * @since 3.0-alpha
+ */
+public interface RepositorySystem
+{
+ String DEFAULT_LOCAL_REPO_ID = "local";
+
+ String userHome = System.getProperty( "user.home" );
+
+ File userMavenConfigurationHome = new File( userHome, ".m2" );
+
+ File defaultUserLocalRepository = new File( userMavenConfigurationHome, "repository" );
+
+ String DEFAULT_REMOTE_REPO_ID = "central";
+
+ String DEFAULT_REMOTE_REPO_URL = "https://repo.maven.apache.org/maven2";
+
+ Artifact createArtifact( String groupId, String artifactId, String version, String packaging );
+
+ Artifact createArtifact( String groupId, String artifactId, String version, String scope, String type );
+
+ Artifact createProjectArtifact( String groupId, String artifactId, String version );
+
+ Artifact createArtifactWithClassifier( String groupId, String artifactId, String version, String type,
+ String classifier );
+
+ Artifact createPluginArtifact( Plugin plugin );
+
+ Artifact createDependencyArtifact( Dependency dependency );
+
+ ArtifactRepository buildArtifactRepository( Repository repository )
+ throws InvalidRepositoryException;
+
+ ArtifactRepository createDefaultRemoteRepository()
+ throws InvalidRepositoryException;
+
+ ArtifactRepository createDefaultLocalRepository()
+ throws InvalidRepositoryException;
+
+ ArtifactRepository createLocalRepository( File localRepository )
+ throws InvalidRepositoryException;
+
+ ArtifactRepository createArtifactRepository( String id, String url, ArtifactRepositoryLayout repositoryLayout,
+ ArtifactRepositoryPolicy snapshots,
+ ArtifactRepositoryPolicy releases );
+
+ /**
+ * Calculates the effective repositories for the given input repositories which are assumed to be already mirrored
+ * (if applicable). This process will essentially remove duplicate repositories by merging them into one equivalent
+ * repository. It is worth to point out that merging does not simply choose one of the input repositories and
+ * discards the others but actually combines their possibly different policies.
+ *
+ * @param repositories The original repositories, may be {@code null}.
+ * @return The effective repositories or {@code null} if the input was {@code null}.
+ */
+ List<ArtifactRepository> getEffectiveRepositories( List<ArtifactRepository> repositories );
+
+ /**
+ * Determines the mirror for the specified repository.
+ *
+ * @param repository The repository to determine the mirror for, must not be {@code null}.
+ * @param mirrors The available mirrors, may be {@code null}.
+ * @return The mirror specification for the repository or {@code null} if no mirror matched.
+ */
+ Mirror getMirror( ArtifactRepository repository, List<Mirror> mirrors );
+
+ /**
+ * Injects the mirroring information into the specified repositories. For each repository that is matched by a
+ * mirror, its URL and ID will be updated to match the values from the mirror specification. Repositories without a
+ * matching mirror will pass through unchanged. <em>Note:</em> This method must be called before
+ * {@link #injectAuthentication(List, List)} or the repositories will end up with the wrong credentials.
+ *
+ * @param repositories The repositories into which to inject the mirror information, may be {@code null}.
+ * @param mirrors The available mirrors, may be {@code null}.
+ */
+ void injectMirror( List<ArtifactRepository> repositories, List<Mirror> mirrors );
+
+ /**
+ * Injects the proxy information into the specified repositories. For each repository that is matched by a proxy,
+ * its proxy data will be set accordingly. Repositories without a matching proxy will have their proxy cleared.
+ * <em>Note:</em> This method must be called after {@link #injectMirror(List, List)} or the repositories will end up
+ * with the wrong proxies.
+ *
+ * @param repositories The repositories into which to inject the proxy information, may be {@code null}.
+ * @param proxies The available proxies, may be {@code null}.
+ */
+ void injectProxy( List<ArtifactRepository> repositories, List<org.apache.maven.settings.Proxy> proxies );
+
+ /**
+ * Injects the authentication information into the specified repositories. For each repository that is matched by a
+ * server, its credentials will be updated to match the values from the server specification. Repositories without a
+ * matching server will have their credentials cleared. <em>Note:</em> This method must be called after
+ * {@link #injectMirror(List, List)} or the repositories will end up with the wrong credentials.
+ *
+ * @param repositories The repositories into which to inject the authentication information, may be {@code null}.
+ * @param servers The available servers, may be {@code null}.
+ */
+ void injectAuthentication( List<ArtifactRepository> repositories, List<Server> servers );
+
+ void injectMirror( RepositorySystemSession session, List<ArtifactRepository> repositories );
+
+ void injectProxy( RepositorySystemSession session, List<ArtifactRepository> repositories );
+
+ void injectAuthentication( RepositorySystemSession session, List<ArtifactRepository> repositories );
+
+ ArtifactResolutionResult resolve( ArtifactResolutionRequest request );
+
+ // Install
+
+ // Deploy
+
+ // Map types of artifacts
+
+ //
+ // Raw file transfers
+ //
+ void publish( ArtifactRepository repository, File source, String remotePath,
+ ArtifactTransferListener transferListener )
+ throws ArtifactTransferFailedException;
+
+ void retrieve( ArtifactRepository repository, File destination, String remotePath,
+ ArtifactTransferListener transferListener )
+ throws ArtifactTransferFailedException, ArtifactDoesNotExistException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/AbstractArtifactMetadata.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/AbstractArtifactMetadata.java
new file mode 100644
index 00000000..352e5bbb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/AbstractArtifactMetadata.java
@@ -0,0 +1,65 @@
+package org.apache.maven.repository.legacy.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * Common elements of artifact metadata.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public abstract class AbstractArtifactMetadata
+ implements ArtifactMetadata
+{
+ protected Artifact artifact;
+
+ protected AbstractArtifactMetadata( Artifact artifact )
+ {
+ this.artifact = artifact;
+ }
+
+ public boolean storedInGroupDirectory()
+ {
+ return false;
+ }
+
+ public String getGroupId()
+ {
+ return artifact.getGroupId();
+ }
+
+ public String getArtifactId()
+ {
+ return artifact.getArtifactId();
+ }
+
+ public String extendedToString()
+ {
+ StringBuilder buffer = new StringBuilder();
+
+ buffer.append( "\nArtifact Metadata\n--------------------------" );
+ buffer.append( "\nGroupId: " ).append( getGroupId() );
+ buffer.append( "\nArtifactId: " ).append( getArtifactId() );
+ buffer.append( "\nMetadata Type: " ).append( getClass().getName() );
+
+ return buffer.toString();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataRetrievalException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataRetrievalException.java
new file mode 100644
index 00000000..67b4080b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataRetrievalException.java
@@ -0,0 +1,68 @@
+package org.apache.maven.repository.legacy.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * Error while retrieving repository metadata from the repository.
+ *
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ */
+public class ArtifactMetadataRetrievalException
+ extends Exception
+{
+ private Artifact artifact;
+
+ /** @deprecated use {@link #ArtifactMetadataRetrievalException(String, Throwable, Artifact)} */
+ @Deprecated
+ public ArtifactMetadataRetrievalException( String message )
+ {
+ this( message, null, null );
+ }
+
+ /** @deprecated use {@link #ArtifactMetadataRetrievalException(String, Throwable, Artifact)} */
+ @Deprecated
+ public ArtifactMetadataRetrievalException( Throwable cause )
+ {
+ this( null, cause, null );
+ }
+
+ /** @deprecated use {@link #ArtifactMetadataRetrievalException(String, Throwable, Artifact)} */
+ @Deprecated
+ public ArtifactMetadataRetrievalException( String message,
+ Throwable cause )
+ {
+ this( message, cause, null );
+ }
+
+ public ArtifactMetadataRetrievalException( String message,
+ Throwable cause,
+ Artifact artifact )
+ {
+ super( message, cause );
+ this.artifact = artifact;
+ }
+
+ public Artifact getArtifact()
+ {
+ return artifact;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataSource.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataSource.java
new file mode 100644
index 00000000..aaa0ee34
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataSource.java
@@ -0,0 +1,78 @@
+package org.apache.maven.repository.legacy.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+
+/**
+ * Provides some metadata operations, like querying the remote repository for a list of versions available for an
+ * artifact.
+ *
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
+ */
+public interface ArtifactMetadataSource
+{
+
+ ResolutionGroup retrieve( MetadataResolutionRequest request )
+ throws ArtifactMetadataRetrievalException;
+
+ ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException;
+
+ /**
+ * Get a list of available versions for an artifact in the remote repository
+ *
+ * @param artifact artifact we are interested in. Only <code>groupid</code> and <code>artifactId</code>
+ * are needed, for instance the following code will work
+ * <code>artifactFactory.createProjectArtifact( "org.apache.maven", "maven", "" )</code>
+ * @param localRepository local repository
+ * @param remoteRepositories remote repositories, {@link List} $lt; {@link ArtifactRepository} >
+ * @return {@link List} $lt; {@link ArtifactVersion} >
+ * @throws ArtifactMetadataRetrievalException
+ * in case of error while retrieving repository metadata from the repository.
+ */
+ List<ArtifactVersion> retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException;
+
+ /**
+ * Get a list of available versions for an artifact in the remote deployment repository. This ignores any update
+ * policy checks and mirrors and always retrieves the latest information from the given repository.
+ *
+ * @param artifact artifact we are interested in. Only <code>groupid</code> and <code>artifactId</code> are
+ * needed, for instance the following code will work
+ * <code>artifactFactory.createProjectArtifact( "org.apache.maven", "maven", "" )</code>
+ * @param localRepository local repository
+ * @param remoteRepository remote repository
+ * @return {@link List} $lt; {@link ArtifactVersion} >
+ * @throws ArtifactMetadataRetrievalException
+ * in case of error while retrieving repository metadata from the repository.
+ */
+ List<ArtifactVersion> retrieveAvailableVersionsFromDeploymentRepository( Artifact artifact,
+ ArtifactRepository localRepository,
+ ArtifactRepository remoteRepository )
+ throws ArtifactMetadataRetrievalException;
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/DefaultMetadataResolutionRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/DefaultMetadataResolutionRequest.java
new file mode 100644
index 00000000..93b9d5da
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/DefaultMetadataResolutionRequest.java
@@ -0,0 +1,132 @@
+package org.apache.maven.repository.legacy.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
+import org.apache.maven.artifact.repository.RepositoryRequest;
+import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
+
+/**
+ * Forms a request to retrieve artifact metadata.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DefaultMetadataResolutionRequest
+ implements MetadataResolutionRequest
+{
+
+ private Artifact artifact;
+
+ private boolean resolveManagedVersions;
+
+ private RepositoryRequest repositoryRequest;
+
+ public DefaultMetadataResolutionRequest()
+ {
+ repositoryRequest = new DefaultRepositoryRequest();
+ }
+
+ public DefaultMetadataResolutionRequest( RepositoryRequest repositoryRequest )
+ {
+ this.repositoryRequest = new DefaultRepositoryRequest( repositoryRequest );
+ }
+
+ public DefaultMetadataResolutionRequest( ArtifactResolutionRequest resolutionRequest )
+ {
+ this.repositoryRequest = new DefaultRepositoryRequest( resolutionRequest );
+ }
+
+ public Artifact getArtifact()
+ {
+ return artifact;
+ }
+
+ public DefaultMetadataResolutionRequest setArtifact( Artifact artifact )
+ {
+ this.artifact = artifact;
+
+ return this;
+ }
+
+ public ArtifactRepository getLocalRepository()
+ {
+ return repositoryRequest.getLocalRepository();
+ }
+
+ public DefaultMetadataResolutionRequest setLocalRepository( ArtifactRepository localRepository )
+ {
+ repositoryRequest.setLocalRepository( localRepository );
+
+ return this;
+ }
+
+ public List<ArtifactRepository> getRemoteRepositories()
+ {
+ return repositoryRequest.getRemoteRepositories();
+ }
+
+ public DefaultMetadataResolutionRequest setRemoteRepositories( List<ArtifactRepository> remoteRepositories )
+ {
+ repositoryRequest.setRemoteRepositories( remoteRepositories );
+
+ return this;
+ }
+
+ public boolean isResolveManagedVersions()
+ {
+ return resolveManagedVersions;
+ }
+
+ public DefaultMetadataResolutionRequest setResolveManagedVersions( boolean resolveManagedVersions )
+ {
+ this.resolveManagedVersions = resolveManagedVersions;
+
+ return this;
+ }
+
+ public boolean isOffline()
+ {
+ return repositoryRequest.isOffline();
+ }
+
+ public DefaultMetadataResolutionRequest setOffline( boolean offline )
+ {
+ repositoryRequest.setOffline( offline );
+
+ return this;
+ }
+
+ public boolean isForceUpdate()
+ {
+ return repositoryRequest.isForceUpdate();
+ }
+
+ public DefaultMetadataResolutionRequest setForceUpdate( boolean forceUpdate )
+ {
+ repositoryRequest.setForceUpdate( forceUpdate );
+
+ return this;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/MetadataResolutionRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/MetadataResolutionRequest.java
new file mode 100644
index 00000000..a652c977
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/MetadataResolutionRequest.java
@@ -0,0 +1,113 @@
+package org.apache.maven.repository.legacy.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.RepositoryRequest;
+
+/**
+ * Forms a request to retrieve artifact metadata.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface MetadataResolutionRequest
+ extends RepositoryRequest
+{
+
+ /**
+ * Indicates whether network access to remote repositories has been disabled.
+ *
+ * @return {@code true} if remote access has been disabled, {@code false} otherwise.
+ */
+ boolean isOffline();
+
+ /**
+ * Enables/disables network access to remote repositories.
+ *
+ * @param offline {@code true} to disable remote access, {@code false} to allow network access.
+ * @return This request, never {@code null}.
+ */
+ MetadataResolutionRequest setOffline( boolean offline );
+
+ /**
+ * Gets the artifact to resolve metadata for.
+ *
+ * @return The artifact to resolve metadata for or {@code null} if not set.
+ */
+ Artifact getArtifact();
+
+ /**
+ * Sets the artifact for which to resolve metadata.
+ *
+ * @param artifact The artifact for which to resolve metadata.
+ * @return This request, never {@code null}.
+ */
+ MetadataResolutionRequest setArtifact( Artifact artifact );
+
+ /**
+ * Gets the local repository to use for the resolution.
+ *
+ * @return The local repository to use for the resolution or {@code null} if not set.
+ */
+ ArtifactRepository getLocalRepository();
+
+ /**
+ * Sets the local repository to use for the resolution.
+ *
+ * @param localRepository The local repository to use for the resolution.
+ * @return This request, never {@code null}.
+ */
+ MetadataResolutionRequest setLocalRepository( ArtifactRepository localRepository );
+
+ /**
+ * Gets the remote repositories to use for the resolution.
+ *
+ * @return The remote repositories to use for the resolution, never {@code null}.
+ */
+ List<ArtifactRepository> getRemoteRepositories();
+
+ /**
+ * Sets the remote repositories to use for the resolution.
+ *
+ * @param remoteRepositories The remote repositories to use for the resolution.
+ * @return This request, never {@code null}.
+ */
+ MetadataResolutionRequest setRemoteRepositories( List<ArtifactRepository> remoteRepositories );
+
+ /**
+ * Determines whether the managed version information should be retrieved.
+ *
+ * @return {@code true} if the dependency management information should be retrieved, {@code false} otherwise.
+ */
+ boolean isResolveManagedVersions();
+
+ /**
+ * Enables/disables resolution of the dependency manageemnt information.
+ *
+ * @param resolveManagedVersions {@code true} if the dependency management information should be retrieved, {@code
+ * false} otherwise.
+ * @return This request, never {@code null}.
+ */
+ MetadataResolutionRequest setResolveManagedVersions( boolean resolveManagedVersions );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ResolutionGroup.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ResolutionGroup.java
new file mode 100644
index 00000000..e942f70a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ResolutionGroup.java
@@ -0,0 +1,83 @@
+package org.apache.maven.repository.legacy.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+public class ResolutionGroup
+{
+
+ private final Set<Artifact> artifacts;
+
+ private final List<ArtifactRepository> resolutionRepositories;
+
+ private final Artifact pomArtifact;
+
+ private final Artifact relocatedArtifact;
+
+ private final Map<String, Artifact> managedVersions;
+
+ public ResolutionGroup( Artifact pomArtifact, Set<Artifact> artifacts,
+ List<ArtifactRepository> resolutionRepositories )
+ {
+ this( pomArtifact, null, artifacts, null, resolutionRepositories );
+ }
+
+ public ResolutionGroup( Artifact pomArtifact, Artifact relocatedArtifact, Set<Artifact> artifacts,
+ Map<String, Artifact> managedVersions, List<ArtifactRepository> resolutionRepositories )
+ {
+ this.pomArtifact = pomArtifact;
+ this.relocatedArtifact = relocatedArtifact;
+ this.artifacts = artifacts;
+ this.managedVersions = managedVersions;
+ this.resolutionRepositories = resolutionRepositories;
+ }
+
+ public Artifact getPomArtifact()
+ {
+ return pomArtifact;
+ }
+
+ public Artifact getRelocatedArtifact()
+ {
+ return relocatedArtifact;
+ }
+
+ public Set<Artifact> getArtifacts()
+ {
+ return artifacts;
+ }
+
+ public List<ArtifactRepository> getResolutionRepositories()
+ {
+ return resolutionRepositories;
+ }
+
+ public Map<String, Artifact> getManagedVersions()
+ {
+ return managedVersions;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/rtinfo/RuntimeInformation.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/rtinfo/RuntimeInformation.java
new file mode 100644
index 00000000..4e3520db
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/rtinfo/RuntimeInformation.java
@@ -0,0 +1,49 @@
+package org.apache.maven.rtinfo;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Provides information about the current Maven runtime.
+ *
+ * @since 3.0.2
+ */
+public interface RuntimeInformation
+{
+
+ /**
+ * Retrieves the current Maven version, for example "3.0.2".
+ *
+ * @return The current Maven version or an empty string if unknown, never {@code null}.
+ */
+ String getMavenVersion();
+
+ /**
+ * Checks whether the current Maven runtime matches the specified version range. A version range can either use the
+ * usual mathematical syntax "[2.0.10,2.1.0),[3.0,)" or use a single version "2.2.1". The latter is a short form for
+ * "[2.2.1,)", i.e. denotes the minimum version required.
+ *
+ * @param versionRange The version range to match the current Maven runtime against, must not be {@code null}.
+ * @return {@code true} if the current Maven runtime matches the specified version range, {@code false} otherwise.
+ * @throws IllegalArgumentException If the specified version range is {@code null}, empty or otherwise not a valid
+ * version specification.
+ */
+ boolean isMavenVersion( String versionRange );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformation.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformation.java
new file mode 100644
index 00000000..6a733f9b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformation.java
@@ -0,0 +1,150 @@
+package org.apache.maven.rtinfo.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import org.apache.maven.rtinfo.RuntimeInformation;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.StringUtils;
+import org.eclipse.aether.util.version.GenericVersionScheme;
+import org.eclipse.aether.version.InvalidVersionSpecificationException;
+import org.eclipse.aether.version.Version;
+import org.eclipse.aether.version.VersionConstraint;
+import org.eclipse.aether.version.VersionScheme;
+
+/**
+ * Provides information about the current Maven runtime.
+ */
+@Component( role = RuntimeInformation.class )
+public class DefaultRuntimeInformation
+ implements RuntimeInformation
+{
+
+ @Requirement
+ private Logger logger;
+
+ private String mavenVersion;
+
+ public String getMavenVersion()
+ {
+ if ( mavenVersion == null )
+ {
+ Properties props = new Properties();
+
+ String resource = "META-INF/maven/org.apache.maven/maven-core/pom.properties";
+
+ InputStream is = DefaultRuntimeInformation.class.getResourceAsStream( "/" + resource );
+ if ( is != null )
+ {
+ try
+ {
+ props.load( is );
+ }
+ catch ( IOException e )
+ {
+ String msg = "Could not parse " + resource + ", Maven runtime information not available";
+ if ( logger.isDebugEnabled() )
+ {
+ logger.warn( msg, e );
+ }
+ else
+ {
+ logger.warn( msg );
+ }
+ }
+ finally
+ {
+ IOUtil.close( is );
+ }
+ }
+ else
+ {
+ logger.warn( "Could not locate " + resource
+ + " on classpath, Maven runtime information not available" );
+ }
+
+ String version = props.getProperty( "version", "" ).trim();
+
+ if ( !version.startsWith( "${" ) )
+ {
+ mavenVersion = version;
+ }
+ else
+ {
+ mavenVersion = "";
+ }
+ }
+
+ return mavenVersion;
+ }
+
+ public boolean isMavenVersion( String versionRange )
+ {
+ VersionScheme versionScheme = new GenericVersionScheme();
+
+ if ( versionRange == null )
+ {
+ throw new IllegalArgumentException( "Version range must not be null" );
+ }
+ if ( StringUtils.isBlank( versionRange ) )
+ {
+ throw new IllegalArgumentException( "Version range must not be empty" );
+ }
+
+ VersionConstraint constraint;
+ try
+ {
+ constraint = versionScheme.parseVersionConstraint( versionRange );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ throw new IllegalArgumentException( e.getMessage(), e );
+ }
+
+ Version current;
+ try
+ {
+ String mavenVersion = getMavenVersion();
+ if ( mavenVersion.length() <= 0 )
+ {
+ throw new IllegalStateException( "Could not determine current Maven version" );
+ }
+
+ current = versionScheme.parseVersion( mavenVersion );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ throw new IllegalStateException( "Could not parse current Maven version: " + e.getMessage(), e );
+ }
+
+ if ( constraint.getRange() == null )
+ {
+ return constraint.getVersion().compareTo( current ) <= 0;
+ }
+ return constraint.containsVersion( current );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScope.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScope.java
new file mode 100644
index 00000000..6d8913f5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScope.java
@@ -0,0 +1,169 @@
+package org.apache.maven.session.scope.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.Map;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import com.google.inject.Key;
+import com.google.inject.OutOfScopeException;
+import com.google.inject.Provider;
+import com.google.inject.Scope;
+import com.google.inject.util.Providers;
+
+public class SessionScope
+ implements Scope
+{
+ /**
+ * @since 3.3.0
+ */
+ public static class Memento
+ {
+ final Map<Key<?>, Provider<?>> seeded;
+
+ Memento( final Map<Key<?>, Provider<?>> seeded )
+ {
+ this.seeded = ImmutableMap.copyOf( seeded );
+ }
+ }
+
+ private static final Provider<Object> SEEDED_KEY_PROVIDER = new Provider<Object>()
+ {
+ public Object get()
+ {
+ throw new IllegalStateException();
+ }
+ };
+
+ private static final class ScopeState
+ {
+ public final Map<Key<?>, Provider<?>> seeded = Maps.newHashMap();
+
+ public final Map<Key<?>, Object> provided = Maps.newHashMap();
+ }
+
+ private final ThreadLocal<LinkedList<ScopeState>> values = new ThreadLocal<LinkedList<ScopeState>>();
+
+ public void enter()
+ {
+ LinkedList<ScopeState> stack = values.get();
+ if ( stack == null )
+ {
+ stack = new LinkedList<ScopeState>();
+ values.set( stack );
+ }
+ stack.addFirst( new ScopeState() );
+ }
+
+ /**
+ * @since 3.3.0
+ */
+ public void enter( Memento memento )
+ {
+ enter();
+ getScopeState().seeded.putAll( memento.seeded );
+ }
+
+ private ScopeState getScopeState()
+ {
+ LinkedList<ScopeState> stack = values.get();
+ if ( stack == null || stack.isEmpty() )
+ {
+ throw new IllegalStateException();
+ }
+ return stack.getFirst();
+ }
+
+ public void exit()
+ {
+ final LinkedList<ScopeState> stack = values.get();
+ if ( stack == null || stack.isEmpty() )
+ {
+ throw new IllegalStateException();
+ }
+ stack.removeFirst();
+ if ( stack.isEmpty() )
+ {
+ values.remove();
+ }
+ }
+
+ /**
+ * @since 3.3.0
+ */
+ public Memento memento()
+ {
+ LinkedList<ScopeState> stack = values.get();
+ return new Memento( stack != null ? stack.getFirst().seeded : Collections.<Key<?>, Provider<?>>emptyMap() );
+ }
+
+ public <T> void seed( Class<T> clazz, Provider<T> value )
+ {
+ getScopeState().seeded.put( Key.get( clazz ), value );
+ }
+
+ public <T> void seed( Class<T> clazz, final T value )
+ {
+ getScopeState().seeded.put( Key.get( clazz ), Providers.of( value ) );
+ }
+
+ public <T> Provider<T> scope( final Key<T> key, final Provider<T> unscoped )
+ {
+ return new Provider<T>()
+ {
+ @SuppressWarnings( "unchecked" )
+ public T get()
+ {
+ LinkedList<ScopeState> stack = values.get();
+ if ( stack == null || stack.isEmpty() )
+ {
+ throw new OutOfScopeException( "Cannot access " + key + " outside of a scoping block" );
+ }
+
+ ScopeState state = stack.getFirst();
+
+ Provider<?> seeded = state.seeded.get( key );
+
+ if ( seeded != null )
+ {
+ return (T) seeded.get();
+ }
+
+ T provided = (T) state.provided.get( key );
+ if ( provided == null && unscoped != null )
+ {
+ provided = unscoped.get();
+ state.provided.put( key, provided );
+ }
+
+ return provided;
+ }
+ };
+ }
+
+ @SuppressWarnings( { "unchecked" } )
+ public static <T> Provider<T> seededKeyProvider()
+ {
+ return (Provider<T>) SEEDED_KEY_PROVIDER;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScopeModule.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScopeModule.java
new file mode 100644
index 00000000..585d683a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScopeModule.java
@@ -0,0 +1,63 @@
+package org.apache.maven.session.scope.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.maven.SessionScoped;
+import org.apache.maven.execution.MavenSession;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+
+import com.google.inject.AbstractModule;
+
+@Named
+public class SessionScopeModule
+ extends AbstractModule
+{
+ private final SessionScope scope;
+
+ @Inject
+ public SessionScopeModule()
+ {
+ this( new SessionScope() );
+ }
+
+ public SessionScopeModule( PlexusContainer container )
+ throws ComponentLookupException
+ {
+ this( container.lookup( SessionScope.class ) );
+ }
+
+ private SessionScopeModule( SessionScope scope )
+ {
+ this.scope = scope;
+ }
+
+ @Override
+ protected void configure()
+ {
+ bindScope( SessionScoped.class, scope );
+ bind( SessionScope.class ).toInstance( scope );
+
+ bind( MavenSession.class ).toProvider( SessionScope.<MavenSession>seededKeyProvider() ).in( scope );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
new file mode 100644
index 00000000..820d886e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
@@ -0,0 +1,158 @@
+package org.apache.maven.settings;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.properties.internal.SystemProperties;
+import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
+import org.apache.maven.settings.building.SettingsBuilder;
+import org.apache.maven.settings.building.SettingsBuildingException;
+import org.apache.maven.settings.building.SettingsBuildingRequest;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * @author jdcasey
+ */
+@Component( role = MavenSettingsBuilder.class )
+public class DefaultMavenSettingsBuilder
+ extends AbstractLogEnabled
+ implements MavenSettingsBuilder
+{
+
+ @Requirement
+ private SettingsBuilder settingsBuilder;
+
+ public Settings buildSettings()
+ throws IOException, XmlPullParserException
+ {
+ File userSettingsFile =
+ getFile( "${user.home}/.m2/settings.xml", "user.home",
+ MavenSettingsBuilder.ALT_USER_SETTINGS_XML_LOCATION );
+
+ return buildSettings( userSettingsFile );
+ }
+
+ public Settings buildSettings( boolean useCachedSettings )
+ throws IOException, XmlPullParserException
+ {
+ return buildSettings();
+ }
+
+ public Settings buildSettings( File userSettingsFile )
+ throws IOException, XmlPullParserException
+ {
+ File globalSettingsFile =
+ getFile( "${maven.home}/conf/settings.xml", "maven.home",
+ MavenSettingsBuilder.ALT_GLOBAL_SETTINGS_XML_LOCATION );
+
+ SettingsBuildingRequest request = new DefaultSettingsBuildingRequest();
+ request.setUserSettingsFile( userSettingsFile );
+ request.setGlobalSettingsFile( globalSettingsFile );
+ request.setSystemProperties( SystemProperties.getSystemProperties() );
+ return build( request );
+ }
+
+ public Settings buildSettings( File userSettingsFile, boolean useCachedSettings )
+ throws IOException, XmlPullParserException
+ {
+ return buildSettings( userSettingsFile );
+ }
+
+ private Settings build( SettingsBuildingRequest request )
+ throws IOException, XmlPullParserException
+ {
+ try
+ {
+ return settingsBuilder.build( request ).getEffectiveSettings();
+ }
+ catch ( SettingsBuildingException e )
+ {
+ throw (IOException) new IOException( e.getMessage() ).initCause( e );
+ }
+ }
+
+ /** @since 2.1 */
+ public Settings buildSettings( MavenExecutionRequest request )
+ throws IOException, XmlPullParserException
+ {
+ SettingsBuildingRequest settingsRequest = new DefaultSettingsBuildingRequest();
+ settingsRequest.setUserSettingsFile( request.getUserSettingsFile() );
+ settingsRequest.setGlobalSettingsFile( request.getGlobalSettingsFile() );
+ settingsRequest.setUserProperties( request.getUserProperties() );
+ settingsRequest.setSystemProperties( request.getSystemProperties() );
+
+ return build( settingsRequest );
+ }
+
+ private File getFile( String pathPattern, String basedirSysProp, String altLocationSysProp )
+ {
+ // -------------------------------------------------------------------------------------
+ // Alright, here's the justification for all the regexp wizardry below...
+ //
+ // Continuum and other server-like apps may need to locate the user-level and
+ // global-level settings somewhere other than ${user.home} and ${maven.home},
+ // respectively. Using a simple replacement of these patterns will allow them
+ // to specify the absolute path to these files in a customized components.xml
+ // file. Ideally, we'd do full pattern-evaluation against the sysprops, but this
+ // is a first step. There are several replacements below, in order to normalize
+ // the path character before we operate on the string as a regex input, and
+ // in order to avoid surprises with the File construction...
+ // -------------------------------------------------------------------------------------
+
+ String path = System.getProperty( altLocationSysProp );
+
+ if ( StringUtils.isEmpty( path ) )
+ {
+ // TODO: This replacing shouldn't be necessary as user.home should be in the
+ // context of the container and thus the value would be interpolated by Plexus
+ String basedir = System.getProperty( basedirSysProp );
+ if ( basedir == null )
+ {
+ basedir = System.getProperty( "user.dir" );
+ }
+
+ basedir = basedir.replaceAll( "\\\\", "/" );
+ basedir = basedir.replaceAll( "\\$", "\\\\\\$" );
+
+ path = pathPattern.replaceAll( "\\$\\{" + basedirSysProp + "\\}", basedir );
+ path = path.replaceAll( "\\\\", "/" );
+ // ---------------------------------------------------------------------------------
+ // I'm not sure if this last regexp was really intended to disallow the usage of
+ // network paths as user.home directory. Unfortunately it did. I removed it and
+ // have not detected any problems yet.
+ // ---------------------------------------------------------------------------------
+ // path = path.replaceAll( "//", "/" );
+
+ return new File( path ).getAbsoluteFile();
+ }
+ else
+ {
+ return new File( path ).getAbsoluteFile();
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java
new file mode 100644
index 00000000..c79a843d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java
@@ -0,0 +1,81 @@
+package org.apache.maven.settings;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * @author jdcasey
+ * @author Jason van Zyl
+ */
+@Deprecated
+public interface MavenSettingsBuilder
+{
+
+ String ROLE = MavenSettingsBuilder.class.getName();
+
+ String ALT_USER_SETTINGS_XML_LOCATION = "org.apache.maven.user-settings";
+ String ALT_GLOBAL_SETTINGS_XML_LOCATION = "org.apache.maven.global-settings";
+ String ALT_LOCAL_REPOSITORY_LOCATION = "maven.repo.local";
+
+ Settings buildSettings( MavenExecutionRequest request )
+ throws IOException, XmlPullParserException;
+
+ /**
+ * @return a <code>Settings</code> object from the user settings file.
+ * @throws IOException if any
+ * @throws XmlPullParserException if any
+ */
+ Settings buildSettings()
+ throws IOException, XmlPullParserException;
+
+ /**
+ * @param useCachedSettings if true, doesn't reload the user settings
+ * @return a <code>Settings</code> object from the user settings file.
+ * @throws IOException if any
+ * @throws XmlPullParserException if any
+ */
+ Settings buildSettings( boolean useCachedSettings )
+ throws IOException, XmlPullParserException;
+
+ /**
+ * @param userSettingsFile a given user settings file
+ * @return a <code>Settings</code> object from the user settings file.
+ * @throws IOException if any
+ * @throws XmlPullParserException if any
+ */
+ Settings buildSettings( File userSettingsFile )
+ throws IOException, XmlPullParserException;
+
+ /**
+ * @param userSettingsFile a given user settings file
+ * @param useCachedSettings if true, doesn't reload the user settings
+ * @return a <code>Settings</code> object from the user settings file.
+ * @throws IOException if any
+ * @throws XmlPullParserException if any
+ */
+ Settings buildSettings( File userSettingsFile, boolean useCachedSettings )
+ throws IOException, XmlPullParserException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/SettingsConfigurationException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/SettingsConfigurationException.java
new file mode 100644
index 00000000..6fab6501
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/SettingsConfigurationException.java
@@ -0,0 +1,63 @@
+package org.apache.maven.settings;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * If there was an error in the settings file.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class SettingsConfigurationException
+ extends Exception
+{
+ private int lineNumber;
+
+ private int columnNumber;
+
+ public SettingsConfigurationException( String message )
+ {
+ super( message );
+ }
+
+ public SettingsConfigurationException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ public SettingsConfigurationException( String message, Throwable cause, int lineNumber, int columnNumber )
+ {
+ super( message + ( lineNumber > 0 ? "\n Line: " + lineNumber : "" )
+ + ( columnNumber > 0 ? "\n Column: " + columnNumber : "" ), cause );
+ this.lineNumber = lineNumber;
+ this.columnNumber = columnNumber;
+ }
+
+ public int getColumnNumber()
+ {
+ return columnNumber;
+ }
+
+ public int getLineNumber()
+ {
+ return lineNumber;
+ }
+
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/SettingsUtils.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/SettingsUtils.java
new file mode 100644
index 00000000..8da696e8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/SettingsUtils.java
@@ -0,0 +1,321 @@
+package org.apache.maven.settings;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.ActivationFile;
+import org.apache.maven.settings.merge.MavenSettingsMerger;
+
+import java.util.List;
+
+/**
+ * Several convenience methods to handle settings
+ *
+ * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
+ */
+public final class SettingsUtils
+{
+
+ private SettingsUtils()
+ {
+ // don't allow construction.
+ }
+
+ /**
+ * @param dominant
+ * @param recessive
+ * @param recessiveSourceLevel
+ */
+ public static void merge( Settings dominant, Settings recessive, String recessiveSourceLevel )
+ {
+ new MavenSettingsMerger().merge( dominant, recessive, recessiveSourceLevel );
+ }
+
+ /**
+ * @param modelProfile
+ * @return a profile
+ */
+ public static Profile convertToSettingsProfile( org.apache.maven.model.Profile modelProfile )
+ {
+ Profile profile = new Profile();
+
+ profile.setId( modelProfile.getId() );
+
+ org.apache.maven.model.Activation modelActivation = modelProfile.getActivation();
+
+ if ( modelActivation != null )
+ {
+ Activation activation = new Activation();
+
+ activation.setActiveByDefault( modelActivation.isActiveByDefault() );
+
+ activation.setJdk( modelActivation.getJdk() );
+
+ org.apache.maven.model.ActivationProperty modelProp = modelActivation.getProperty();
+
+ if ( modelProp != null )
+ {
+ ActivationProperty prop = new ActivationProperty();
+ prop.setName( modelProp.getName() );
+ prop.setValue( modelProp.getValue() );
+ activation.setProperty( prop );
+ }
+
+ org.apache.maven.model.ActivationOS modelOs = modelActivation.getOs();
+
+ if ( modelOs != null )
+ {
+ ActivationOS os = new ActivationOS();
+
+ os.setArch( modelOs.getArch() );
+ os.setFamily( modelOs.getFamily() );
+ os.setName( modelOs.getName() );
+ os.setVersion( modelOs.getVersion() );
+
+ activation.setOs( os );
+ }
+
+ ActivationFile modelFile = modelActivation.getFile();
+
+ if ( modelFile != null )
+ {
+ org.apache.maven.settings.ActivationFile file = new org.apache.maven.settings.ActivationFile();
+
+ file.setExists( modelFile.getExists() );
+ file.setMissing( modelFile.getMissing() );
+
+ activation.setFile( file );
+ }
+
+ profile.setActivation( activation );
+ }
+
+ profile.setProperties( modelProfile.getProperties() );
+
+ List<org.apache.maven.model.Repository> repos = modelProfile.getRepositories();
+ if ( repos != null )
+ {
+ for ( org.apache.maven.model.Repository repo : repos )
+ {
+ profile.addRepository( convertToSettingsRepository( repo ) );
+ }
+ }
+
+ List<org.apache.maven.model.Repository> pluginRepos = modelProfile.getPluginRepositories();
+ if ( pluginRepos != null )
+ {
+ for ( org.apache.maven.model.Repository pluginRepo : pluginRepos )
+ {
+ profile.addPluginRepository( convertToSettingsRepository( pluginRepo ) );
+ }
+ }
+
+ return profile;
+ }
+
+ /**
+ * @param settingsProfile
+ * @return a profile
+ */
+ public static org.apache.maven.model.Profile convertFromSettingsProfile( Profile settingsProfile )
+ {
+ org.apache.maven.model.Profile profile = new org.apache.maven.model.Profile();
+
+ profile.setId( settingsProfile.getId() );
+
+ profile.setSource( "settings.xml" );
+
+ Activation settingsActivation = settingsProfile.getActivation();
+
+ if ( settingsActivation != null )
+ {
+ org.apache.maven.model.Activation activation = new org.apache.maven.model.Activation();
+
+ activation.setActiveByDefault( settingsActivation.isActiveByDefault() );
+
+ activation.setJdk( settingsActivation.getJdk() );
+
+ ActivationProperty settingsProp = settingsActivation.getProperty();
+
+ if ( settingsProp != null )
+ {
+ org.apache.maven.model.ActivationProperty prop = new org.apache.maven.model.ActivationProperty();
+
+ prop.setName( settingsProp.getName() );
+ prop.setValue( settingsProp.getValue() );
+
+ activation.setProperty( prop );
+ }
+
+ ActivationOS settingsOs = settingsActivation.getOs();
+
+ if ( settingsOs != null )
+ {
+ org.apache.maven.model.ActivationOS os = new org.apache.maven.model.ActivationOS();
+
+ os.setArch( settingsOs.getArch() );
+ os.setFamily( settingsOs.getFamily() );
+ os.setName( settingsOs.getName() );
+ os.setVersion( settingsOs.getVersion() );
+
+ activation.setOs( os );
+ }
+
+ org.apache.maven.settings.ActivationFile settingsFile = settingsActivation.getFile();
+
+ if ( settingsFile != null )
+ {
+ ActivationFile file = new ActivationFile();
+
+ file.setExists( settingsFile.getExists() );
+ file.setMissing( settingsFile.getMissing() );
+
+ activation.setFile( file );
+ }
+
+ profile.setActivation( activation );
+ }
+
+ profile.setProperties( settingsProfile.getProperties() );
+
+ List<Repository> repos = settingsProfile.getRepositories();
+ if ( repos != null )
+ {
+ for ( Repository repo : repos )
+ {
+ profile.addRepository( convertFromSettingsRepository( repo ) );
+ }
+ }
+
+ List<Repository> pluginRepos = settingsProfile.getPluginRepositories();
+ if ( pluginRepos != null )
+ {
+ for ( Repository pluginRepo : pluginRepos )
+ {
+ profile.addPluginRepository( convertFromSettingsRepository( pluginRepo ) );
+ }
+ }
+
+ return profile;
+ }
+
+ /**
+ * @param settingsRepo
+ * @return a repository
+ */
+ private static org.apache.maven.model.Repository convertFromSettingsRepository( Repository settingsRepo )
+ {
+ org.apache.maven.model.Repository repo = new org.apache.maven.model.Repository();
+
+ repo.setId( settingsRepo.getId() );
+ repo.setLayout( settingsRepo.getLayout() );
+ repo.setName( settingsRepo.getName() );
+ repo.setUrl( settingsRepo.getUrl() );
+
+ if ( settingsRepo.getSnapshots() != null )
+ {
+ repo.setSnapshots( convertRepositoryPolicy( settingsRepo.getSnapshots() ) );
+ }
+ if ( settingsRepo.getReleases() != null )
+ {
+ repo.setReleases( convertRepositoryPolicy( settingsRepo.getReleases() ) );
+ }
+
+ return repo;
+ }
+
+ /**
+ * @param settingsPolicy
+ * @return a RepositoryPolicy
+ */
+ private static org.apache.maven.model.RepositoryPolicy convertRepositoryPolicy( RepositoryPolicy settingsPolicy )
+ {
+ org.apache.maven.model.RepositoryPolicy policy = new org.apache.maven.model.RepositoryPolicy();
+ policy.setEnabled( settingsPolicy.isEnabled() );
+ policy.setUpdatePolicy( settingsPolicy.getUpdatePolicy() );
+ policy.setChecksumPolicy( settingsPolicy.getChecksumPolicy() );
+ return policy;
+ }
+
+ /**
+ * @param modelRepo
+ * @return a repository
+ */
+ private static Repository convertToSettingsRepository( org.apache.maven.model.Repository modelRepo )
+ {
+ Repository repo = new Repository();
+
+ repo.setId( modelRepo.getId() );
+ repo.setLayout( modelRepo.getLayout() );
+ repo.setName( modelRepo.getName() );
+ repo.setUrl( modelRepo.getUrl() );
+
+ if ( modelRepo.getSnapshots() != null )
+ {
+ repo.setSnapshots( convertRepositoryPolicy( modelRepo.getSnapshots() ) );
+ }
+ if ( modelRepo.getReleases() != null )
+ {
+ repo.setReleases( convertRepositoryPolicy( modelRepo.getReleases() ) );
+ }
+
+ return repo;
+ }
+
+ /**
+ * @param modelPolicy
+ * @return a RepositoryPolicy
+ */
+ private static RepositoryPolicy convertRepositoryPolicy( org.apache.maven.model.RepositoryPolicy modelPolicy )
+ {
+ RepositoryPolicy policy = new RepositoryPolicy();
+ policy.setEnabled( modelPolicy.isEnabled() );
+ policy.setUpdatePolicy( modelPolicy.getUpdatePolicy() );
+ policy.setChecksumPolicy( modelPolicy.getChecksumPolicy() );
+ return policy;
+ }
+
+ /**
+ * @param settings could be null
+ * @return a new instance of settings or null if settings was null.
+ */
+ public static Settings copySettings( Settings settings )
+ {
+ if ( settings == null )
+ {
+ return null;
+ }
+
+ Settings clone = new Settings();
+ clone.setActiveProfiles( settings.getActiveProfiles() );
+ clone.setInteractiveMode( settings.isInteractiveMode() );
+ clone.setLocalRepository( settings.getLocalRepository() );
+ clone.setMirrors( settings.getMirrors() );
+ clone.setModelEncoding( settings.getModelEncoding() );
+ clone.setOffline( settings.isOffline() );
+ clone.setPluginGroups( settings.getPluginGroups() );
+ clone.setProfiles( settings.getProfiles() );
+ clone.setProxies( settings.getProxies() );
+ clone.setServers( settings.getServers() );
+ clone.setSourceLevel( settings.getSourceLevel() );
+ clone.setUsePluginRegistry( settings.isUsePluginRegistry() );
+
+ return clone;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchain.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchain.java
new file mode 100644
index 00000000..043e5e68
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchain.java
@@ -0,0 +1,190 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.maven.toolchain.model.ToolchainModel;
+import org.codehaus.plexus.logging.Logger;
+
+/**
+ * Default abstract toolchain implementation, to be used as base class for any toolchain implementation
+ * to avoid rewriting usual code.
+ *
+ * @author mkleint
+ * @since 2.0.9
+ */
+public abstract class DefaultToolchain // should have been AbstractToolchain...
+ implements Toolchain, ToolchainPrivate
+{
+
+ private String type;
+
+ private Map<String, RequirementMatcher> provides = new HashMap<String, RequirementMatcher>();
+
+ public static final String KEY_TYPE = "type"; //NOI18N
+
+ private ToolchainModel model;
+
+ private Logger logger;
+
+ /**
+ *
+ * @param model the model, must not be {@code null}
+ * @param logger the logger, must not be {@code null}
+ */
+ protected DefaultToolchain( ToolchainModel model, Logger logger )
+ {
+ this.model = model;
+
+ this.logger = logger;
+ }
+
+ /**
+ *
+ * @param model the model, must not be {@code null}
+ * @param type the type
+ * @param logger the logger, must not be {@code null}
+ */
+ protected DefaultToolchain( ToolchainModel model, String type, Logger logger )
+ {
+ this( model, logger );
+ this.type = type;
+ }
+
+ @Override
+ public final String getType()
+ {
+ return type != null ? type : model.getType();
+ }
+
+ @Override
+ public final ToolchainModel getModel()
+ {
+ return model;
+ }
+
+ public final void addProvideToken( String type, RequirementMatcher matcher )
+ {
+ provides.put( type, matcher );
+ }
+
+ @Override
+ public boolean matchesRequirements( Map<String, String> requirements )
+ {
+ for ( Map.Entry<String, String> requirement : requirements.entrySet() )
+ {
+ String key = requirement.getKey();
+
+ RequirementMatcher matcher = provides.get( key );
+
+ if ( matcher == null )
+ {
+ getLog().debug( "Toolchain " + this + " is missing required property: " + key );
+ return false;
+ }
+ if ( !matcher.matches( requirement.getValue() ) )
+ {
+ getLog().debug( "Toolchain " + this + " doesn't match required property: " + key );
+ return false;
+ }
+ }
+ return true;
+ }
+
+ protected Logger getLog()
+ {
+ return logger;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( obj == null )
+ {
+ return false;
+ }
+
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ if ( !( obj instanceof DefaultToolchain ) )
+ {
+ return false;
+ }
+
+ DefaultToolchain other = (DefaultToolchain) obj;
+
+ if ( type == null ? other.type != null : !type.equals( other.type ) )
+ {
+ return false;
+ }
+
+ Properties thisProvides = this.getModel().getProvides();
+ Properties otherProvides = other.getModel().getProvides();
+
+ if ( thisProvides == null ? otherProvides != null : !thisProvides.equals( otherProvides ) )
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int hashCode = ( type == null ) ? 0 : type.hashCode();
+
+ if ( this.getModel().getProvides() != null )
+ {
+ hashCode = 31 * hashCode + this.getModel().getProvides().hashCode();
+ }
+ return hashCode;
+ }
+
+ @Override
+ public String toString()
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.append( "type:" ).append( getType() );
+ builder.append( '{' );
+
+ Iterator<Map.Entry<String, RequirementMatcher>> providesIter = provides.entrySet().iterator();
+ while ( providesIter.hasNext() )
+ {
+ Map.Entry<String, RequirementMatcher> provideEntry = providesIter.next();
+ builder.append( provideEntry.getKey() ).append( " = " ).append( provideEntry.getValue() );
+ if ( providesIter.hasNext() )
+ {
+ builder.append( ';' );
+ }
+ }
+
+ builder.append( '}' );
+
+ return builder.toString();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java
new file mode 100644
index 00000000..8093bbd6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java
@@ -0,0 +1,140 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.toolchain.model.ToolchainModel;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+
+/**
+ * @author mkleint
+ */
+@Component( role = ToolchainManager.class )
+public class DefaultToolchainManager
+ implements ToolchainManager
+{
+ @Requirement
+ Logger logger;
+
+ @Requirement( role = ToolchainFactory.class )
+ Map<String, ToolchainFactory> factories;
+
+ @Override
+ public Toolchain getToolchainFromBuildContext( String type, MavenSession session )
+ {
+ Map<String, Object> context = retrieveContext( session );
+
+ ToolchainModel model = (ToolchainModel) context.get( getStorageKey( type ) );
+
+ if ( model != null )
+ {
+ List<Toolchain> toolchains = selectToolchains( Collections.singletonList( model ), type, null );
+
+ if ( !toolchains.isEmpty() )
+ {
+ return toolchains.get( 0 );
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public List<Toolchain> getToolchains( MavenSession session, String type, Map<String, String> requirements )
+ {
+ List<ToolchainModel> models = session.getRequest().getToolchains().get( type );
+
+ return selectToolchains( models, type, requirements );
+ }
+
+ private List<Toolchain> selectToolchains( List<ToolchainModel> models, String type,
+ Map<String, String> requirements )
+ {
+ List<Toolchain> toolchains = new ArrayList<Toolchain>();
+
+ if ( models != null )
+ {
+ ToolchainFactory fact = factories.get( type );
+
+ if ( fact == null )
+ {
+ logger.error( "Missing toolchain factory for type: " + type
+ + ". Possibly caused by misconfigured project." );
+ }
+ else
+ {
+ for ( ToolchainModel model : models )
+ {
+ try
+ {
+ ToolchainPrivate toolchain = fact.createToolchain( model );
+ if ( requirements == null || toolchain.matchesRequirements( requirements ) )
+ {
+ toolchains.add( toolchain );
+ }
+ }
+ catch ( MisconfiguredToolchainException ex )
+ {
+ logger.error( "Misconfigured toolchain.", ex );
+ }
+ }
+ }
+ }
+ return toolchains;
+ }
+
+ Map<String, Object> retrieveContext( MavenSession session )
+ {
+ Map<String, Object> context = null;
+
+ if ( session != null )
+ {
+ PluginDescriptor desc = new PluginDescriptor();
+ desc.setGroupId( PluginDescriptor.getDefaultPluginGroupId() );
+ desc.setArtifactId( PluginDescriptor.getDefaultPluginArtifactId( "toolchains" ) );
+
+ MavenProject current = session.getCurrentProject();
+
+ if ( current != null )
+ {
+ //TODO: why is this using the context
+ context = session.getPluginContext( desc, current );
+ }
+ }
+
+ return ( context != null ) ? context : new HashMap<String, Object>();
+ }
+
+ public static final String getStorageKey( String type )
+ {
+ return "toolchain-" + type; // NOI18N
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java
new file mode 100644
index 00000000..cac8e297
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java
@@ -0,0 +1,82 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.toolchain.model.ToolchainModel;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * @author mkleint
+ * @author Robert Scholte
+ */
+@Component( role = ToolchainManagerPrivate.class )
+public class DefaultToolchainManagerPrivate
+ extends DefaultToolchainManager
+ implements ToolchainManagerPrivate
+{
+
+ @Override
+ public ToolchainPrivate[] getToolchainsForType( String type, MavenSession context )
+ throws MisconfiguredToolchainException
+ {
+ List<ToolchainPrivate> toRet = new ArrayList<ToolchainPrivate>();
+
+ ToolchainFactory fact = factories.get( type );
+ if ( fact == null )
+ {
+ logger.error( "Missing toolchain factory for type: " + type
+ + ". Possibly caused by misconfigured project." );
+ }
+ else
+ {
+ List<ToolchainModel> availableToolchains = context.getRequest().getToolchains().get( type );
+
+ if ( availableToolchains != null )
+ {
+ for ( ToolchainModel toolchainModel : availableToolchains )
+ {
+ toRet.add( fact.createToolchain( toolchainModel ) );
+ }
+ }
+
+ // add default toolchain
+ ToolchainPrivate tool = fact.createDefaultToolchain();
+ if ( tool != null )
+ {
+ toRet.add( tool );
+ }
+ }
+
+ return toRet.toArray( new ToolchainPrivate[toRet.size()] );
+ }
+
+ @Override
+ public void storeToolchainToBuildContext( ToolchainPrivate toolchain, MavenSession session )
+ {
+ Map<String, Object> context = retrieveContext( session );
+ context.put( getStorageKey( toolchain.getType() ), toolchain.getModel() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java
new file mode 100644
index 00000000..5bd3e82a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java
@@ -0,0 +1,78 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.Reader;
+
+import org.apache.maven.toolchain.model.PersistedToolchains;
+import org.apache.maven.toolchain.model.io.xpp3.MavenToolchainsXpp3Reader;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+
+/**
+ * @author Benjamin Bentmann
+ *
+ * @deprecated instead use {@link org.apache.maven.toolchain.building.DefaultToolchainsBuilder}
+ */
+@Deprecated
+@Component( role = ToolchainsBuilder.class, hint = "default" )
+public class DefaultToolchainsBuilder
+ implements ToolchainsBuilder
+{
+
+ @Requirement
+ private Logger logger;
+
+ public PersistedToolchains build( File userToolchainsFile )
+ throws MisconfiguredToolchainException
+ {
+ PersistedToolchains toolchains = null;
+
+ if ( userToolchainsFile != null && userToolchainsFile.isFile() )
+ {
+ Reader in = null;
+ try
+ {
+ in = ReaderFactory.newXmlReader( userToolchainsFile );
+ toolchains = new MavenToolchainsXpp3Reader().read( in );
+ }
+ catch ( Exception e )
+ {
+ throw new MisconfiguredToolchainException( "Cannot read toolchains file at "
+ + userToolchainsFile.getAbsolutePath(), e );
+ }
+ finally
+ {
+ IOUtil.close( in );
+ }
+ }
+ else if ( userToolchainsFile != null )
+ {
+ logger.debug( "Toolchains configuration was not found at " + userToolchainsFile );
+ }
+
+ return toolchains;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/MisconfiguredToolchainException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/MisconfiguredToolchainException.java
new file mode 100644
index 00000000..140bc804
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/MisconfiguredToolchainException.java
@@ -0,0 +1,39 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ *
+ * @author mkleint
+ */
+public class MisconfiguredToolchainException
+ extends Exception
+{
+
+ public MisconfiguredToolchainException( String message )
+ {
+ super( message );
+ }
+
+ public MisconfiguredToolchainException( String message, Throwable orig )
+ {
+ super( message, orig );
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/RequirementMatcher.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/RequirementMatcher.java
new file mode 100644
index 00000000..26390e40
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/RequirementMatcher.java
@@ -0,0 +1,30 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ *
+ * @author mkleint
+ */
+public interface RequirementMatcher
+{
+
+ boolean matches( String requirement );
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/RequirementMatcherFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/RequirementMatcherFactory.java
new file mode 100644
index 00000000..3d6917bd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/RequirementMatcherFactory.java
@@ -0,0 +1,109 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+
+/**
+ *
+ * @author mkleint
+ */
+public final class RequirementMatcherFactory
+{
+ private RequirementMatcherFactory()
+ {
+ }
+
+ public static RequirementMatcher createExactMatcher( String provideValue )
+ {
+ return new ExactMatcher( provideValue );
+ }
+
+ public static RequirementMatcher createVersionMatcher( String provideValue )
+ {
+ return new VersionMatcher( provideValue );
+ }
+
+ private static final class ExactMatcher
+ implements RequirementMatcher
+ {
+
+ private String provides;
+
+ private ExactMatcher( String provides )
+ {
+ this.provides = provides;
+ }
+
+ @Override
+ public boolean matches( String requirement )
+ {
+ return provides.equalsIgnoreCase( requirement );
+ }
+
+ @Override
+ public String toString()
+ {
+ return provides;
+ }
+ }
+
+ private static final class VersionMatcher
+ implements RequirementMatcher
+ {
+ DefaultArtifactVersion version;
+
+ private VersionMatcher( String version )
+ {
+ this.version = new DefaultArtifactVersion( version );
+ }
+
+ @Override
+ public boolean matches( String requirement )
+ {
+ try
+ {
+ VersionRange range = VersionRange.createFromVersionSpec( requirement );
+ if ( range.hasRestrictions() )
+ {
+ return range.containsVersion( version );
+ }
+ else
+ {
+ return range.getRecommendedVersion().compareTo( version ) == 0;
+ }
+ }
+ catch ( InvalidVersionSpecificationException ex )
+ {
+ //TODO error reporting
+ ex.printStackTrace();
+ return false;
+ }
+ }
+
+ @Override
+ public String toString()
+ {
+ return version.toString();
+ }
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/Toolchain.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/Toolchain.java
new file mode 100644
index 00000000..2a713465
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/Toolchain.java
@@ -0,0 +1,46 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Toolchain interface.
+ *
+ * @author Milos Kleint
+ * @author Jason van Zyl
+ * @since 2.0.9
+ */
+public interface Toolchain
+{
+
+ /**
+ * get the type of toolchain.
+ *
+ * @return the toolchain type
+ */
+ String getType();
+
+ /**
+ * Gets the platform tool executable.
+ *
+ * @param toolName the tool platform independent tool name.
+ * @return file representing the tool executable, or null if the tool can not be found
+ */
+ String findTool( String toolName );
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainFactory.java
new file mode 100644
index 00000000..115eede3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainFactory.java
@@ -0,0 +1,44 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.toolchain.model.ToolchainModel;
+
+/**
+ * Internal toolchain factory, to prepare toolchains instances.
+ *
+ * @author mkleint
+ * @since 2.0.9
+ */
+public interface ToolchainFactory
+{
+ /**
+ * Create instance of toolchain.
+ **/
+ ToolchainPrivate createToolchain( ToolchainModel model )
+ throws MisconfiguredToolchainException;
+
+ /**
+ * Returns the default instance of the particular type of toolchain, can return <code>null</code>
+ * if not applicable.
+ * TODO keep around??
+ **/
+ ToolchainPrivate createDefaultToolchain();
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainManager.java
new file mode 100644
index 00000000..8eddac54
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainManager.java
@@ -0,0 +1,64 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.execution.MavenSession;
+
+
+/**
+ * Public API for a toolchain-aware plugin to get expected toolchain instance.
+ *
+ * @author mkleint
+ * @author Robert Scholte
+ * @since 2.0.9
+ */
+public interface ToolchainManager
+{
+
+ // NOTE: Some plugins like Surefire access this field directly!
+ @Deprecated
+ String ROLE = ToolchainManager.class.getName();
+
+ /**
+ * Retrieve toolchain of specified type from build context. It is expected that
+ * <code>maven-toolchains-plugin</code> contains the configuration to select the appropriate
+ * toolchain and is executed at the beginning of the build.
+ *
+ * @param session the Maven session, must not be {@code null}
+ * @param type the type, must not be {@code null}
+ * @return the toolchain selected by <code>maven-toolchains-plugin</code>
+ */
+ Toolchain getToolchainFromBuildContext( String type, MavenSession context );
+
+ /**
+ * Select all toolchains available in user settings matching the type and requirements,
+ * independently from <code>maven-toolchains-plugin</code>.
+ *
+ * @param session the Maven session, must not be {@code null}
+ * @param type the type, must not be {@code null}
+ * @param requirements the requirements, may be {@code null}
+ * @return the matching toolchains, never {@code null}
+ * @since 3.3.0
+ */
+ List<Toolchain> getToolchains( MavenSession session, String type, Map<String, String> requirements );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainManagerPrivate.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainManagerPrivate.java
new file mode 100644
index 00000000..6836bf1c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainManagerPrivate.java
@@ -0,0 +1,58 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+
+/**
+ * Component for use by the <code>maven-toolchains-plugin</code> only.
+ * It provides API: <ol>
+ * <li>to retrieve every toolchains available in user settings,</li>
+ * <li>to store chosen toolchain into build context for later use by toolchain-aware plugins.</li>
+ * </ol>
+ *
+ * @author mkleint
+ * @since 2.0.9
+ * @see ToolchainManager#getToolchainFromBuildContext(String, MavenSession)
+ */
+public interface ToolchainManagerPrivate
+{
+
+ /**
+ * Retrieves every toolchains of given type available in user settings.
+ *
+ * @param type the type, must not be {@code null}
+ * @param context the Maven session, must not be {@code null}
+ * @since 3.0 (addition of the <code>MavenSession</code> parameter)
+ */
+ ToolchainPrivate[] getToolchainsForType( String type, MavenSession context )
+ throws MisconfiguredToolchainException;
+
+ /**
+ * Stores the toolchain into build context for later use by toolchain-aware plugins.
+ *
+ * @param toolchain the toolchain to store, must not be {@code null}
+ * @param context the Maven session, must not be {@code null}
+ * @since 2.0.9
+ * @see ToolchainManager#getToolchainFromBuildContext(String, MavenSession)
+ */
+ void storeToolchainToBuildContext( ToolchainPrivate toolchain, MavenSession context );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainPrivate.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainPrivate.java
new file mode 100644
index 00000000..756cd957
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainPrivate.java
@@ -0,0 +1,48 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Map;
+
+import org.apache.maven.toolchain.model.ToolchainModel;
+
+/**
+ * a private contract between the toolchains plugin and the components.
+ * @author mkleint
+ */
+public interface ToolchainPrivate
+ extends Toolchain
+{
+
+ /**
+ * Let the toolchain decide if it matches requirements defined
+ * in the toolchain plugin configuration.
+ * @param requirements Map<String, String> key value pair, may not be {@code null}
+ * @return {@code true} if the requirements match, otherwise {@code false}
+ */
+ boolean matchesRequirements( Map<String, String> requirements );
+
+ /**
+ *
+ * @return the original model wrapped by this interface
+ */
+ ToolchainModel getModel();
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainsBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainsBuilder.java
new file mode 100644
index 00000000..4bb4052a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainsBuilder.java
@@ -0,0 +1,46 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.toolchain.model.PersistedToolchains;
+
+/**
+ * Builds the toolchains model from a previously configured filesystem path to the toolchains file.
+ * <strong>Note:</strong> This is an internal component whose interface can change without prior notice.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ToolchainsBuilder
+{
+
+ /**
+ * Builds the toolchains model from the configured toolchain files.
+ *
+ * @param userToolchainsFile The path to the toolchains file, may be <code>null</code> to disable parsing.
+ * @return The toolchains model or <code>null</code> if no toolchain file was configured or the configured file does
+ * not exist.
+ * @throws MisconfiguredToolchainException If the toolchain file exists but cannot be parsed.
+ */
+ PersistedToolchains build( File userToolchainsFile )
+ throws MisconfiguredToolchainException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuilder.java
new file mode 100644
index 00000000..7983388b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuilder.java
@@ -0,0 +1,138 @@
+package org.apache.maven.toolchain.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.apache.maven.building.Problem;
+import org.apache.maven.building.ProblemCollector;
+import org.apache.maven.building.ProblemCollectorFactory;
+import org.apache.maven.building.Source;
+import org.apache.maven.toolchain.io.ToolchainsParseException;
+import org.apache.maven.toolchain.io.ToolchainsReader;
+import org.apache.maven.toolchain.merge.MavenToolchainMerger;
+import org.apache.maven.toolchain.model.PersistedToolchains;
+import org.apache.maven.toolchain.model.TrackableBase;
+
+/**
+ *
+ * @author Robert Scholte
+ * @since 3.3.0
+ */
+@Named
+@Singleton
+public class DefaultToolchainsBuilder
+ implements ToolchainsBuilder
+{
+ private MavenToolchainMerger toolchainsMerger = new MavenToolchainMerger();
+
+ @Inject
+ private ToolchainsReader toolchainsReader;
+
+ @Override
+ public ToolchainsBuildingResult build( ToolchainsBuildingRequest request )
+ throws ToolchainsBuildingException
+ {
+ ProblemCollector problems = ProblemCollectorFactory.newInstance( null );
+
+ PersistedToolchains globalToolchains = readToolchains( request.getGlobalToolchainsSource(), request, problems );
+
+ PersistedToolchains userToolchains = readToolchains( request.getUserToolchainsSource(), request, problems );
+
+ toolchainsMerger.merge( userToolchains, globalToolchains, TrackableBase.GLOBAL_LEVEL );
+
+ problems.setSource( "" );
+
+ if ( hasErrors( problems.getProblems() ) )
+ {
+ throw new ToolchainsBuildingException( problems.getProblems() );
+ }
+
+
+ return new DefaultToolchainsBuildingResult( userToolchains, problems.getProblems() );
+ }
+
+ private PersistedToolchains readToolchains( Source toolchainsSource, ToolchainsBuildingRequest request,
+ ProblemCollector problems )
+ {
+ if ( toolchainsSource == null )
+ {
+ return new PersistedToolchains();
+ }
+
+ PersistedToolchains toolchains;
+
+ try
+ {
+ Map<String, ?> options = Collections.singletonMap( ToolchainsReader.IS_STRICT, Boolean.TRUE );
+
+ try
+ {
+ toolchains = toolchainsReader.read( toolchainsSource.getInputStream(), options );
+ }
+ catch ( ToolchainsParseException e )
+ {
+ options = Collections.singletonMap( ToolchainsReader.IS_STRICT, Boolean.FALSE );
+
+ toolchains = toolchainsReader.read( toolchainsSource.getInputStream(), options );
+
+ problems.add( Problem.Severity.WARNING, e.getMessage(), e.getLineNumber(), e.getColumnNumber(),
+ e );
+ }
+ }
+ catch ( ToolchainsParseException e )
+ {
+ problems.add( Problem.Severity.FATAL, "Non-parseable toolchains " + toolchainsSource.getLocation()
+ + ": " + e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
+ return new PersistedToolchains();
+ }
+ catch ( IOException e )
+ {
+ problems.add( Problem.Severity.FATAL, "Non-readable toolchains " + toolchainsSource.getLocation()
+ + ": " + e.getMessage(), -1, -1, e );
+ return new PersistedToolchains();
+ }
+
+ return toolchains;
+ }
+
+ private boolean hasErrors( List<Problem> problems )
+ {
+ if ( problems != null )
+ {
+ for ( Problem problem : problems )
+ {
+ if ( Problem.Severity.ERROR.compareTo( problem.getSeverity() ) >= 0 )
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuildingRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuildingRequest.java
new file mode 100644
index 00000000..144d724c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuildingRequest.java
@@ -0,0 +1,63 @@
+package org.apache.maven.toolchain.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.building.Source;
+
+/**
+ * Collects toolchains that control building of effective toolchains.
+ *
+ * @author Robert Scholte
+ * @since 3.3.0
+ */
+public class DefaultToolchainsBuildingRequest
+ implements ToolchainsBuildingRequest
+{
+ private Source globalToolchainsSource;
+
+ private Source userToolchainsSource;
+
+ @Override
+ public Source getGlobalToolchainsSource()
+ {
+ return globalToolchainsSource;
+ }
+
+ @Override
+ public ToolchainsBuildingRequest setGlobalToolchainsSource( Source globalToolchainsSource )
+ {
+ this.globalToolchainsSource = globalToolchainsSource;
+ return this;
+ }
+
+ @Override
+ public Source getUserToolchainsSource()
+ {
+ return userToolchainsSource;
+ }
+
+ @Override
+ public ToolchainsBuildingRequest setUserToolchainsSource( Source userToolchainsSource )
+ {
+ this.userToolchainsSource = userToolchainsSource;
+ return this;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuildingResult.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuildingResult.java
new file mode 100644
index 00000000..60ca2441
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuildingResult.java
@@ -0,0 +1,66 @@
+package org.apache.maven.toolchain.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.building.Problem;
+import org.apache.maven.toolchain.model.PersistedToolchains;
+
+/**
+ * Holds the result of the merged toolchains and holds the problems during this build, if any.
+ *
+ * @author Robert Scholte
+ * @since 3.3.0
+ */
+public class DefaultToolchainsBuildingResult
+ implements ToolchainsBuildingResult
+{
+
+ private PersistedToolchains effectiveToolchains;
+
+ private List<Problem> problems;
+
+ /**
+ * Default constructor
+ *
+ * @param effectiveToolchains the merged toolchains, may not be {@code null}
+ * @param problems the problems while building the effectiveToolchains, if any.
+ */
+ public DefaultToolchainsBuildingResult( PersistedToolchains effectiveToolchains, List<Problem> problems )
+ {
+ this.effectiveToolchains = effectiveToolchains;
+ this.problems = ( problems != null ) ? problems : new ArrayList<Problem>();
+ }
+
+ @Override
+ public PersistedToolchains getEffectiveToolchains()
+ {
+ return effectiveToolchains;
+ }
+
+ @Override
+ public List<Problem> getProblems()
+ {
+ return problems;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuilder.java
new file mode 100644
index 00000000..b2ef0d10
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuilder.java
@@ -0,0 +1,41 @@
+package org.apache.maven.toolchain.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Builds the effective toolchains from a user toolchains file and/or a global toolchains file.
+ *
+ * @author Robert Scholte
+ * @since 3.3.0
+ */
+public interface ToolchainsBuilder
+{
+
+ /**
+ * Builds the effective toolchains of the specified toolchains files.
+ *
+ * @param request The toolchains building request that holds the parameters, must not be {@code null}.
+ * @return The result of the toolchains building, never {@code null}.
+ * @throws ToolchainsBuildingException If the effective toolchains could not be built.
+ */
+ ToolchainsBuildingResult build( ToolchainsBuildingRequest request )
+ throws ToolchainsBuildingException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuildingException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuildingException.java
new file mode 100644
index 00000000..56ed1d3e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuildingException.java
@@ -0,0 +1,93 @@
+package org.apache.maven.toolchain.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.building.Problem;
+
+/**
+ * @author Robert Scholte
+ * @since 3.3.0
+ */
+public class ToolchainsBuildingException
+ extends Exception
+{
+
+ private final List<Problem> problems;
+
+ /**
+ * Creates a new exception with the specified problems.
+ *
+ * @param problems The problems that causes this exception, must not be {@code null}.
+ */
+ public ToolchainsBuildingException( List<Problem> problems )
+ {
+ super( toMessage( problems ) );
+
+ this.problems = new ArrayList<Problem>();
+ if ( problems != null )
+ {
+ this.problems.addAll( problems );
+ }
+ }
+
+ /**
+ * Gets the problems that caused this exception.
+ *
+ * @return The problems that caused this exception, never {@code null}.
+ */
+ public List<Problem> getProblems()
+ {
+ return problems;
+ }
+
+ private static String toMessage( List<Problem> problems )
+ {
+ StringWriter buffer = new StringWriter( 1024 );
+
+ PrintWriter writer = new PrintWriter( buffer );
+
+ writer.print( problems.size() );
+ writer.print( ( problems.size() == 1 ) ? " problem was " : " problems were " );
+ writer.print( "encountered while building the effective toolchains" );
+ writer.println();
+
+ for ( Problem problem : problems )
+ {
+ writer.print( "[" );
+ writer.print( problem.getSeverity() );
+ writer.print( "] " );
+ writer.print( problem.getMessage() );
+ String location = problem.getLocation();
+ if ( !location.isEmpty() )
+ {
+ writer.print( " @ " );
+ writer.print( location );
+ }
+ writer.println();
+ }
+
+ return buffer.toString();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuildingRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuildingRequest.java
new file mode 100644
index 00000000..cf65d4cd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuildingRequest.java
@@ -0,0 +1,64 @@
+package org.apache.maven.toolchain.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.building.Source;
+
+/**
+ * Collects toolchains that control the building of effective toolchains.
+ *
+ * @author Robert Scholte
+ * @since 3.3.0
+ */
+public interface ToolchainsBuildingRequest
+{
+
+ /**
+ * Gets the global toolchains source.
+ *
+ * @return The global toolchains source or {@code null} if none.
+ */
+ Source getGlobalToolchainsSource();
+
+ /**
+ * Sets the global toolchains source. If both user toolchains and a global toolchains are given, the user toolchains
+ * take precedence.
+ *
+ * @param globalToolchainsSource The global toolchains source, may be {@code null} to disable global toolchains.
+ * @return This request, never {@code null}.
+ */
+ ToolchainsBuildingRequest setGlobalToolchainsSource( Source globalToolchainsSource );
+
+ /**
+ * Gets the user toolchains source.
+ *
+ * @return The user toolchains source or {@code null} if none.
+ */
+ Source getUserToolchainsSource();
+
+ /**
+ * Sets the user toolchains source. If both user toolchains and a global toolchains are given, the user toolchains
+ * take precedence.
+ *
+ * @param userToolchainsSource The user toolchains source, may be {@code null} to disable user toolchains.
+ * @return This request, never {@code null}.
+ */
+ ToolchainsBuildingRequest setUserToolchainsSource( Source userToolchainsSource );
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuildingResult.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuildingResult.java
new file mode 100644
index 00000000..592fb98c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuildingResult.java
@@ -0,0 +1,50 @@
+package org.apache.maven.toolchain.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.building.Problem;
+import org.apache.maven.toolchain.model.PersistedToolchains;
+
+/**
+ * Collects the output of the toolchains builder.
+ *
+ * @author Robert Scholte
+ * @since 3.3.0
+ */
+public interface ToolchainsBuildingResult
+{
+
+ /**
+ * Gets the assembled toolchains.
+ *
+ * @return The assembled toolchains, never {@code null}.
+ */
+ PersistedToolchains getEffectiveToolchains();
+
+ /**
+ * Return a list of problems, if any.
+ *
+ * @return a list of problems, never {@code null}.
+ */
+ List<Problem> getProblems();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/io/DefaultToolchainsReader.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/io/DefaultToolchainsReader.java
new file mode 100644
index 00000000..8aeefe8b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/io/DefaultToolchainsReader.java
@@ -0,0 +1,115 @@
+package org.apache.maven.toolchain.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.Map;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.apache.maven.toolchain.model.PersistedToolchains;
+import org.apache.maven.toolchain.model.io.xpp3.MavenToolchainsXpp3Reader;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * Handles deserialization of toolchains from the default textual format.
+ *
+ * @author Robert Scholte
+ * @since 3.3.0
+ */
+@Named
+@Singleton
+public class DefaultToolchainsReader
+ implements ToolchainsReader
+{
+
+ @Override
+ public PersistedToolchains read( File input, Map<String, ?> options )
+ throws IOException
+ {
+ if ( input == null )
+ {
+ throw new IllegalArgumentException( "input file missing" );
+ }
+
+ return read( ReaderFactory.newXmlReader( input ), options );
+ }
+
+ @Override
+ public PersistedToolchains read( Reader input, Map<String, ?> options )
+ throws IOException
+ {
+ if ( input == null )
+ {
+ throw new IllegalArgumentException( "input reader missing" );
+ }
+
+ try
+ {
+ MavenToolchainsXpp3Reader r = new MavenToolchainsXpp3Reader();
+ return r.read( input, isStrict( options ) );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new ToolchainsParseException( e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
+ }
+ finally
+ {
+ IOUtil.close( input );
+ }
+ }
+
+ @Override
+ public PersistedToolchains read( InputStream input, Map<String, ?> options )
+ throws IOException
+ {
+ if ( input == null )
+ {
+ throw new IllegalArgumentException( "input stream missing" );
+ }
+
+ try
+ {
+ MavenToolchainsXpp3Reader r = new MavenToolchainsXpp3Reader();
+ return r.read( input, isStrict( options ) );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new ToolchainsParseException( e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
+ }
+ finally
+ {
+ IOUtil.close( input );
+ }
+ }
+
+ private boolean isStrict( Map<String, ?> options )
+ {
+ Object value = ( options != null ) ? options.get( IS_STRICT ) : null;
+ return value == null || Boolean.parseBoolean( value.toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/io/ToolchainsParseException.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/io/ToolchainsParseException.java
new file mode 100644
index 00000000..95c2aed8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/io/ToolchainsParseException.java
@@ -0,0 +1,94 @@
+package org.apache.maven.toolchain.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+
+/**
+ * Signals a failure to parse the toolchains due to invalid syntax (e.g. non-wellformed XML or unknown elements).
+ *
+ * @author Robert Scholte
+ * @since 3.3.0
+ */
+public class ToolchainsParseException
+ extends IOException
+{
+
+ /**
+ * The one-based index of the line containing the error.
+ */
+ private final int lineNumber;
+
+ /**
+ * The one-based index of the column containing the error.
+ */
+ private final int columnNumber;
+
+ /**
+ * Creates a new parser exception with the specified details.
+ *
+ * @param message The error message, may be {@code null}.
+ * @param lineNumber The one-based index of the line containing the error or {@code -1} if unknown.
+ * @param columnNumber The one-based index of the column containing the error or {@code -1} if unknown.
+ */
+ public ToolchainsParseException( String message, int lineNumber, int columnNumber )
+ {
+ super( message );
+ this.lineNumber = lineNumber;
+ this.columnNumber = columnNumber;
+ }
+
+ /**
+ * Creates a new parser exception with the specified details.
+ *
+ * @param message The error message, may be {@code null}.
+ * @param lineNumber The one-based index of the line containing the error or {@code -1} if unknown.
+ * @param columnNumber The one-based index of the column containing the error or {@code -1} if unknown.
+ * @param cause The nested cause of this error, may be {@code null}.
+ */
+ public ToolchainsParseException( String message, int lineNumber, int columnNumber, Throwable cause )
+ {
+ super( message );
+ initCause( cause );
+ this.lineNumber = lineNumber;
+ this.columnNumber = columnNumber;
+ }
+
+ /**
+ * Gets the one-based index of the line containing the error.
+ *
+ * @return The one-based index of the line containing the error or a non-positive value if unknown.
+ */
+ public int getLineNumber()
+ {
+ return lineNumber;
+ }
+
+ /**
+ * Gets the one-based index of the column containing the error.
+ *
+ * @return The one-based index of the column containing the error or non-positive value if unknown.
+ */
+ public int getColumnNumber()
+ {
+ return columnNumber;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/io/ToolchainsReader.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/io/ToolchainsReader.java
new file mode 100644
index 00000000..44dc2bdc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/io/ToolchainsReader.java
@@ -0,0 +1,83 @@
+package org.apache.maven.toolchain.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.Map;
+
+import org.apache.maven.toolchain.model.PersistedToolchains;
+
+/**
+ * Handles deserialization of toolchains from some kind of textual format like XML.
+ *
+ * @author Robert Scholte
+ * @since 3.3.0
+ */
+public interface ToolchainsReader
+{
+
+ /**
+ * The key for the option to enable strict parsing. This option is of type {@link Boolean} and defaults to {@code
+ * true}. If {@code false}, unknown elements will be ignored instead of causing a failure.
+ */
+ String IS_STRICT = "org.apache.maven.toolchains.io.isStrict";
+
+ /**
+ * Reads the toolchains from the specified file.
+ *
+ * @param input The file to deserialize the toolchains from, must not be {@code null}.
+ * @param options The options to use for deserialization, may be {@code null} to use the default values.
+ * @return The deserialized toolchains, never {@code null}.
+ * @throws IOException If the toolchains could not be deserialized.
+ * @throws ToolchainsParseException If the input format could not be parsed.
+ */
+ PersistedToolchains read( File input, Map<String, ?> options )
+ throws IOException, ToolchainsParseException;
+
+ /**
+ * Reads the toolchains from the specified character reader. The reader will be automatically closed before the
+ * method returns.
+ *
+ * @param input The reader to deserialize the toolchains from, must not be {@code null}.
+ * @param options The options to use for deserialization, may be {@code null} to use the default values.
+ * @return The deserialized toolchains, never {@code null}.
+ * @throws IOException If the toolchains could not be deserialized.
+ * @throws ToolchainsParseException If the input format could not be parsed.
+ */
+ PersistedToolchains read( Reader input, Map<String, ?> options )
+ throws IOException, ToolchainsParseException;
+
+ /**
+ * Reads the toolchains from the specified byte stream. The stream will be automatically closed before the method
+ * returns.
+ *
+ * @param input The stream to deserialize the toolchains from, must not be {@code null}.
+ * @param options The options to use for deserialization, may be {@code null} to use the default values.
+ * @return The deserialized toolchains, never {@code null}.
+ * @throws IOException If the toolchains could not be deserialized.
+ * @throws ToolchainsParseException If the input format could not be parsed.
+ */
+ PersistedToolchains read( InputStream input, Map<String, ?> options )
+ throws IOException, ToolchainsParseException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/DefaultJavaToolChain.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/DefaultJavaToolChain.java
new file mode 100644
index 00000000..9cfcff38
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/DefaultJavaToolChain.java
@@ -0,0 +1,55 @@
+package org.apache.maven.toolchain.java;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.toolchain.model.ToolchainModel;
+import org.codehaus.plexus.logging.Logger;
+
+/**
+ * Provides backwards compatibility with Maven 3.2.3 and earlier. Clients that do not require compatibility with Maven
+ * 3.2.3 and earlier are encouraged to use {@link JavaToolchainImpl}.
+ * <strong>Note:</strong> This is an internal component whose interface can change without prior notice.
+ *
+ * @deprecated clients that do not require compatibility with Maven 3.2.3 and earlier should link to
+ * {@link JavaToolchainImpl} instead.
+ */
+public class DefaultJavaToolChain
+ extends JavaToolchainImpl
+{
+ public static final String KEY_JAVAHOME = JavaToolchainImpl.KEY_JAVAHOME;
+
+ public DefaultJavaToolChain( ToolchainModel model, Logger logger )
+ {
+ super( model, logger );
+ }
+
+ @Override
+ public String getJavaHome()
+ {
+ return super.getJavaHome();
+ }
+
+ @Override
+ public void setJavaHome( String javaHome )
+ {
+ super.setJavaHome( javaHome );
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchain.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchain.java
new file mode 100644
index 00000000..cb14ada1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchain.java
@@ -0,0 +1,67 @@
+package org.apache.maven.toolchain.java;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.toolchain.Toolchain;
+
+/**
+ * JDK toolchain interface.
+ *
+ * @author Jason van Zyl
+ * @author Milos Kleint
+ * @since 2.0.9, renamed from JavaToolChain in 3.2.4
+ */
+public interface JavaToolchain
+ extends Toolchain
+{
+// /**
+// * Returns a list of {@link java.io.File}s which represents the bootstrap libraries for the
+// * runtime environment. The Bootstrap libraries include libraries in JRE's
+// * extension directory, if there are any.
+// *
+// * @return List
+// */
+// List getBootstrapLibraries();
+//
+// /**
+// * Returns a list of {@link java.io.File}s which represent the libraries recognized by
+// * default by the platform. Usually it corresponds to contents of CLASSPATH
+// * environment variable.
+// *
+// * @return List
+// */
+// List getStandardLibraries();
+//
+// /**
+// * Returns a {@link java.io.File}s which represent the locations of the source of the JDK,
+// * or an empty collection when the location is not set or is invalid.
+// *
+// * @return List
+// */
+// List getSourceDirectories();
+//
+// /**
+// * Returns a {@link java.io.File}s which represent the locations of the Javadoc for this platform,
+// * or empty collection if the location is not set or invalid
+// *
+// * @return List
+// */
+// List getJavadocFolders();
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchainFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchainFactory.java
new file mode 100644
index 00000000..cd4aef01
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchainFactory.java
@@ -0,0 +1,127 @@
+package org.apache.maven.toolchain.java;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Map.Entry;
+import java.util.Properties;
+
+import org.apache.maven.toolchain.MisconfiguredToolchainException;
+import org.apache.maven.toolchain.RequirementMatcher;
+import org.apache.maven.toolchain.RequirementMatcherFactory;
+import org.apache.maven.toolchain.ToolchainFactory;
+import org.apache.maven.toolchain.ToolchainPrivate;
+import org.apache.maven.toolchain.model.ToolchainModel;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * JDK toolchain factory.
+ * This is a <code>ToolchainFactory</code> Plexus component registered with
+ * <code>jdk</code> hint.
+ *
+ * @author mkleint
+ * @since 2.0.9, renamed from <code>DefaultJavaToolchainFactory</code> in 3.2.4
+ */
+@Component( role = ToolchainFactory.class, hint = "jdk" )
+public class JavaToolchainFactory
+ implements ToolchainFactory
+{
+
+ @Requirement
+ private Logger logger;
+
+ public ToolchainPrivate createToolchain( ToolchainModel model )
+ throws MisconfiguredToolchainException
+ {
+ if ( model == null )
+ {
+ return null;
+ }
+
+ // use DefaultJavaToolChain for compatibility with maven 3.2.3 and earlier
+
+ @SuppressWarnings( "deprecation" )
+ JavaToolchainImpl jtc = new DefaultJavaToolChain( model, logger );
+
+ // populate the provides section
+ Properties provides = model.getProvides();
+ for ( Entry<Object, Object> provide : provides.entrySet() )
+ {
+ String key = (String) provide.getKey();
+ String value = (String) provide.getValue();
+
+ if ( value == null )
+ {
+ throw new MisconfiguredToolchainException(
+ "Provides token '" + key + "' doesn't have any value configured." );
+ }
+
+ RequirementMatcher matcher;
+ if ( "version".equals( key ) )
+ {
+ matcher = RequirementMatcherFactory.createVersionMatcher( value );
+ }
+ else
+ {
+ matcher = RequirementMatcherFactory.createExactMatcher( value );
+ }
+
+ jtc.addProvideToken( key, matcher );
+ }
+
+ // populate the configuration section
+ Xpp3Dom dom = (Xpp3Dom) model.getConfiguration();
+ Xpp3Dom javahome = dom.getChild( JavaToolchainImpl.KEY_JAVAHOME );
+ if ( javahome == null )
+ {
+ throw new MisconfiguredToolchainException( "Java toolchain without the "
+ + JavaToolchainImpl.KEY_JAVAHOME + " configuration element." );
+ }
+ File normal = new File( FileUtils.normalize( javahome.getValue() ) );
+ if ( normal.exists() )
+ {
+ jtc.setJavaHome( FileUtils.normalize( javahome.getValue() ) );
+ }
+ else
+ {
+ throw new MisconfiguredToolchainException( "Non-existing JDK home configuration at "
+ + normal.getAbsolutePath() );
+ }
+
+ return jtc;
+ }
+
+ public ToolchainPrivate createDefaultToolchain()
+ {
+ //not sure it's necessary to provide a default toolchain here.
+ //only version can be eventually supplied, and
+ return null;
+ }
+
+ protected Logger getLogger()
+ {
+ return logger;
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchainImpl.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchainImpl.java
new file mode 100644
index 00000000..4a09ee06
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchainImpl.java
@@ -0,0 +1,87 @@
+package org.apache.maven.toolchain.java;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.toolchain.DefaultToolchain;
+import org.apache.maven.toolchain.model.ToolchainModel;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.Os;
+
+/**
+ * JDK toolchain implementation.
+ *
+ * @author Milos Kleint
+ * @since 2.0.9, renamed from DefaultJavaToolChain in 3.2.4
+ */
+class JavaToolchainImpl
+ extends DefaultToolchain
+ implements JavaToolchain
+{
+ private String javaHome;
+
+ public static final String KEY_JAVAHOME = "jdkHome"; //NOI18N
+
+ public JavaToolchainImpl( ToolchainModel model, Logger logger )
+ {
+ super( model, "jdk", logger );
+ }
+
+ public String getJavaHome()
+ {
+ return javaHome;
+ }
+
+ public void setJavaHome( String javaHome )
+ {
+ this.javaHome = javaHome;
+ }
+
+ public String toString()
+ {
+ return "JDK[" + getJavaHome() + "]";
+ }
+
+ public String findTool( String toolName )
+ {
+ File toRet = findTool( toolName, new File( FileUtils.normalize( getJavaHome() ) ) );
+ if ( toRet != null )
+ {
+ return toRet.getAbsolutePath();
+ }
+ return null;
+ }
+
+ private static File findTool( String toolName, File installFolder )
+ {
+ File bin = new File( installFolder, "bin" ); //NOI18N
+ if ( bin.exists() )
+ {
+ File tool = new File( bin, toolName + ( Os.isFamily( "windows" ) ? ".exe" : "" ) ); // NOI18N
+ if ( tool.exists() )
+ {
+ return tool;
+ }
+ }
+ return null;
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/merge/MavenToolchainMerger.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/merge/MavenToolchainMerger.java
new file mode 100644
index 00000000..538f79b3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/merge/MavenToolchainMerger.java
@@ -0,0 +1,103 @@
+package org.apache.maven.toolchain.merge;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.toolchain.model.PersistedToolchains;
+import org.apache.maven.toolchain.model.ToolchainModel;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ *
+ * @author Robert Scholte
+ * @since 3.2.4
+ */
+public class MavenToolchainMerger
+{
+
+ public void merge( PersistedToolchains dominant, PersistedToolchains recessive, String recessiveSourceLevel )
+ {
+ if ( dominant == null || recessive == null )
+ {
+ return;
+ }
+
+ recessive.setSourceLevel( recessiveSourceLevel );
+
+ shallowMerge( dominant.getToolchains(), recessive.getToolchains(), recessiveSourceLevel );
+ }
+
+ private void shallowMerge( List<ToolchainModel> dominant, List<ToolchainModel> recessive,
+ String recessiveSourceLevel )
+ {
+ Map<Object, ToolchainModel> merged = new LinkedHashMap<Object, ToolchainModel>();
+
+ for ( ToolchainModel dominantModel : dominant )
+ {
+ Object key = getToolchainModelKey( dominantModel );
+
+ merged.put( key, dominantModel );
+ }
+
+ for ( ToolchainModel recessiveModel : recessive )
+ {
+ Object key = getToolchainModelKey( recessiveModel );
+
+ ToolchainModel dominantModel = merged.get( key );
+ if ( dominantModel == null )
+ {
+ recessiveModel.setSourceLevel( recessiveSourceLevel );
+ dominant.add( recessiveModel );
+ }
+ else
+ {
+ mergeToolchainModel_Configuration( dominantModel, recessiveModel );
+ }
+ }
+ }
+
+ protected void mergeToolchainModel_Configuration( ToolchainModel target,
+ ToolchainModel source )
+ {
+ Xpp3Dom src = (Xpp3Dom) source.getConfiguration();
+ if ( src != null )
+ {
+ Xpp3Dom tgt = (Xpp3Dom) target.getConfiguration();
+ if ( tgt == null )
+ {
+ tgt = Xpp3Dom.mergeXpp3Dom( new Xpp3Dom( src ), tgt );
+ }
+ else
+ {
+ tgt = Xpp3Dom.mergeXpp3Dom( tgt, src );
+ }
+ target.setConfiguration( tgt );
+ }
+ }
+
+ protected Object getToolchainModelKey( ToolchainModel model )
+ {
+ return model;
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/mdo/extension.mdo b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/mdo/extension.mdo
new file mode 100644
index 00000000..4b2e4604
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/mdo/extension.mdo
@@ -0,0 +1,65 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0 http://modello.codehaus.org/xsd/modello-1.4.0.xsd">
+ <id>extension</id>
+ <name>ExtensionDescriptor</name>
+ <description><![CDATA[
+ Extension descriptor, stored in <code>META-INF/maven/extension.xml</code> in an extension's jar artifact to
+ precisely control parts of the extension and dependencies to expose.
+ <p><i>Notice:</i> this documentation is generated from a Modello model but the code executed is not generated
+ from this descriptor. Please report if you find anything wrong.</p>
+ ]]></description>
+ <defaults>
+ <default>
+ <key>package</key>
+ <value>extension descriptor XML documentation (no java generation)</value><!-- intentionally non-buildable value -->
+ </default>
+ </defaults>
+ <classes>
+ <class rootElement="true" xml.tagName="extension">
+ <name>ExtensionDescriptor</name>
+ <version>1.0.0</version>
+ <description><![CDATA[Root element of the <code>extension.xml</code> file.]]></description>
+ <fields>
+ <field>
+ <name>exportedPackages</name>
+ <version>1.0.0</version>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ <description>Packages from the artifact that are exposed.</description>
+ <!-- TODO explain package vs package.class vs package.* -->
+ </field>
+ <field>
+ <name>exportedArtifacts</name>
+ <version>1.0.0</version>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ <description><![CDATA[Artifacts that are exposed: <code>groupId:artifactId</code> file.]]>
+ </description>
+ </field>
+ </fields>
+ </class>
+ </classes>
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/mdo/toolchains.mdo b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/mdo/toolchains.mdo
new file mode 100644
index 00000000..830a5275
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/mdo/toolchains.mdo
@@ -0,0 +1,231 @@
+<?xml version="1.0"?>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<model xmlns="http://modello.codehaus.org/MODELLO/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.0.0 http://modello.codehaus.org/xsd/modello-1.0.0.xsd"
+ xml.namespace="http://maven.apache.org/TOOLCHAINS/${version}"
+ xml.schemaLocation="http://maven.apache.org/xsd/toolchains-${version}.xsd">
+ <id>toolchains</id>
+ <name>MavenToolchains</name>
+ <description><![CDATA[
+ <p>This is a reference for the Maven Toolchains descriptor.</p>
+ <p>The default location for the toolchains file is <code>~/.m2/toolchains.xml</code></p>
+ <p>A Toolchain is a preconfigured object that Maven plugins can use for tool configuration retrieval (location and other information).</p>
+ <p>The <a href="/plugins/maven-toolchains-plugin/">toolchains-plugin</a> can read available toolchains on the user's computer
+ and match them against the toolchain requirements of the project (as configured in <code>pom.xml</code>):
+ if match is found, the toolchain instance is made available to other Maven plugins.</p>
+ <p>With <code>jdk</code> toolchain, for example, instead of being stuck with the JDK used to run Maven, all plugins can use
+ the same other JDK instance without hardcoding absolute paths into the <code>pom.xml</code>
+ and without configuring every plugin that require path to JDK tools.</p>
+ <p>See the <a href="/guides/mini/guide-using-toolchains.html">Guide to Using Toolchains</a> for
+ more information.</p>
+ ]]></description>
+
+ <defaults>
+ <default>
+ <key>package</key>
+ <value>org.apache.maven.toolchain.model</value>
+ </default>
+ </defaults>
+
+ <classes>
+ <class java.clone="deep">
+ <name>TrackableBase</name>
+ <version>1.1.0+</version>
+ <description>
+ common base class that contains code to track the source for
+ this instance (USER|GLOBAL)
+ </description>
+ <codeSegments>
+ <codeSegment>
+ <version>1.1.0+</version>
+ <code>
+ <![CDATA[
+ public static final String USER_LEVEL = "user-level";
+ public static final String GLOBAL_LEVEL = "global-level";
+
+ private String sourceLevel = USER_LEVEL;
+ private boolean sourceLevelSet = false;
+
+ public void setSourceLevel( String sourceLevel )
+ {
+ if ( sourceLevelSet )
+ {
+ throw new IllegalStateException( "Cannot reset sourceLevel attribute; it is already set to: " + sourceLevel );
+ }
+ else if ( !( USER_LEVEL.equals( sourceLevel ) || GLOBAL_LEVEL.equals( sourceLevel ) ) )
+ {
+ throw new IllegalArgumentException( "sourceLevel must be one of: {" + USER_LEVEL + "," + GLOBAL_LEVEL + "}" );
+ }
+ else
+ {
+ this.sourceLevel = sourceLevel;
+ this.sourceLevelSet = true;
+ }
+ }
+
+ public String getSourceLevel()
+ {
+ return sourceLevel;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class rootElement="true" xml.tagName="toolchains" xsd.compositor="sequence">
+ <name>PersistedToolchains</name>
+ <superClass>TrackableBase</superClass>
+ <description><![CDATA[
+ The <code>&lt;toolchains&gt;</code> element is the root of the descriptor.
+ The following table lists all of the possible child elements.
+ ]]></description>
+ <version>1.0.0+</version>
+ <fields>
+ <field>
+ <name>toolchains</name>
+ <version>1.0.0+</version>
+ <description><![CDATA[The toolchain instance definition.]]></description>
+ <association xml.itemsStyle="flat">
+ <type>ToolchainModel</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>ToolchainModel</name>
+ <superClass>TrackableBase</superClass>
+ <version>1.0.0+</version>
+ <description>Definition of a toolchain instance.</description>
+ <fields>
+ <field>
+ <name>type</name>
+ <version>1.0.0+</version>
+ <!-- <identifier>true</identifier> -->
+ <description>
+ <![CDATA[Type of toolchain:<ul>
+ <li><code>jdk</code> for
+ <a href="http://maven.apache.org/plugins/maven-toolchains-plugin/toolchains/jdk.html">JDK Standard Toolchain</a>,</li>
+ <li>other value for
+ <a href="http://maven.apache.org/plugins/maven-toolchains-plugin/toolchains/custom.html">Custom Toolchain</a></li>
+ </ul>
+ ]]></description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>provides</name>
+ <version>1.0.0/1.0.99</version> <!-- fake upperbound, it's inclusive -->
+ <type>DOM</type> <!-- DOM for Maven 2.0.9/2.3.3 -->
+ <description>
+ <![CDATA[
+ <p>Toolchain identification information, which will be matched against project requirements.</p>
+ <p>Actual content structure is completely open: each toolchain type will define its own format and semantics.</p>
+ <p>In general, this is a properties format: <code>&lt;name&gt;value&lt;/name&gt;</code> with
+ predefined properties names.</p>
+ ]]></description>
+ </field>
+ <field>
+ <name>provides</name>
+ <version>1.1.0+</version>
+ <type>Properties</type> <!-- Properties for Maven 2.3.4+ -->
+ <association xml.mapStyle="inline">
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ <!-- <identifier>true</identifier> -->
+ <description>
+ <![CDATA[
+ <p>Toolchain identification information, which will be matched against project requirements.</p>
+ <p>For Maven 2.0.9 to 3.2.3, the actual content structure was completely open: each toolchain type would define its own format and semantics.
+ In general, this was a properties format.</p>
+ <p>Since Maven 3.2.4, the type for this field has been changed to Properties to match the de-facto format.</p>
+ <p>Each toolchain defines its own properties names and semantics.</p>
+ ]]></description>
+ </field>
+ <field>
+ <name>configuration</name>
+ <version>1.0.0+</version>
+ <type>DOM</type>
+ <description>
+ <![CDATA[
+ <p>Toolchain configuration information, like location or any information that is to be retrieved.</p>
+ <p>Actual content structure is completely open: each toochain type will define its own format and semantics.</p>
+ <p>In general, this is a properties format: <code>&lt;name&gt;value&lt;/name&gt;</code> with
+ per-toolchain defined properties names.</p>
+ ]]></description>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.1.0+</version>
+ <comment>Generated hashCode() and equals() based on identifier also calls its super, which breaks comparison</comment>
+ <code>
+ <![CDATA[
+ /**
+ * Method hashCode.
+ *
+ * @return int
+ */
+ public int hashCode()
+ {
+ int result = 17;
+
+ result = 37 * result + ( type != null ? type.hashCode() : 0 );
+ result = 37 * result + ( provides != null ? provides.hashCode() : 0 );
+
+ return result;
+ } //-- int hashCode()
+
+ /**
+ * Method equals.
+ *
+ * @param other
+ * @return boolean
+ */
+ public boolean equals( Object other )
+ {
+ if ( this == other )
+ {
+ return true;
+ }
+
+ if ( !( other instanceof ToolchainModel ) )
+ {
+ return false;
+ }
+
+ ToolchainModel that = (ToolchainModel) other;
+ boolean result = true;
+
+ result = result && ( getType() == null ? that.getType() == null : getType().equals( that.getType() ) );
+ result = result && ( getProvides() == null ? that.getProvides() == null : getProvides().equals( that.getProvides() ) );
+
+ return result;
+ } //-- boolean equals( Object )
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ </classes>
+</model>
+
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/maven/extension.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/maven/extension.xml
new file mode 100644
index 00000000..6abf2186
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/maven/extension.xml
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<extension>
+ <exportedPackages>
+ <!-- maven-* -->
+ <exportedPackage>org.apache.maven.*</exportedPackage>
+ <exportedPackage>org.apache.maven.artifact</exportedPackage>
+ <exportedPackage>org.apache.maven.classrealm</exportedPackage>
+ <exportedPackage>org.apache.maven.cli</exportedPackage>
+ <exportedPackage>org.apache.maven.configuration</exportedPackage>
+ <exportedPackage>org.apache.maven.exception</exportedPackage>
+ <exportedPackage>org.apache.maven.execution</exportedPackage>
+ <exportedPackage>org.apache.maven.execution.scope</exportedPackage>
+ <exportedPackage>org.apache.maven.lifecycle</exportedPackage>
+ <exportedPackage>org.apache.maven.model</exportedPackage>
+ <exportedPackage>org.apache.maven.monitor</exportedPackage>
+ <exportedPackage>org.apache.maven.plugin</exportedPackage>
+ <exportedPackage>org.apache.maven.profiles</exportedPackage>
+ <exportedPackage>org.apache.maven.project</exportedPackage>
+ <exportedPackage>org.apache.maven.reporting</exportedPackage>
+ <exportedPackage>org.apache.maven.repository</exportedPackage>
+ <exportedPackage>org.apache.maven.rtinfo</exportedPackage>
+ <exportedPackage>org.apache.maven.settings</exportedPackage>
+ <exportedPackage>org.apache.maven.toolchain</exportedPackage>
+ <exportedPackage>org.apache.maven.usability</exportedPackage>
+
+
+ <!-- wagon-api -->
+ <exportedPackage>org.apache.maven.wagon.*</exportedPackage>
+ <exportedPackage>org.apache.maven.wagon.authentication</exportedPackage>
+ <exportedPackage>org.apache.maven.wagon.authorization</exportedPackage>
+ <exportedPackage>org.apache.maven.wagon.events</exportedPackage>
+ <exportedPackage>org.apache.maven.wagon.observers</exportedPackage>
+ <exportedPackage>org.apache.maven.wagon.proxy</exportedPackage>
+ <exportedPackage>org.apache.maven.wagon.repository</exportedPackage>
+ <exportedPackage>org.apache.maven.wagon.resource</exportedPackage>
+
+ <!-- aether-api, aether-spi, aether-impl -->
+ <exportedPackage>org.eclipse.aether.*</exportedPackage>
+ <exportedPackage>org.eclipse.aether.artifact</exportedPackage>
+ <exportedPackage>org.eclipse.aether.collection</exportedPackage>
+ <exportedPackage>org.eclipse.aether.deployment</exportedPackage>
+ <exportedPackage>org.eclipse.aether.graph</exportedPackage>
+ <exportedPackage>org.eclipse.aether.impl</exportedPackage>
+ <exportedPackage>org.eclipse.aether.internal.impl</exportedPackage>
+ <exportedPackage>org.eclipse.aether.installation</exportedPackage>
+ <exportedPackage>org.eclipse.aether.metadata</exportedPackage>
+ <exportedPackage>org.eclipse.aether.repository</exportedPackage>
+ <exportedPackage>org.eclipse.aether.resolution</exportedPackage>
+ <exportedPackage>org.eclipse.aether.spi</exportedPackage>
+ <exportedPackage>org.eclipse.aether.transfer</exportedPackage>
+ <exportedPackage>org.eclipse.aether.version</exportedPackage>
+
+ <!-- plexus-classworlds -->
+ <exportedPackage>org.codehaus.plexus.classworlds</exportedPackage>
+
+ <!-- classworlds (for legacy code) -->
+ <exportedPackage>org.codehaus.classworlds</exportedPackage>
+
+ <!-- plexus-utils (for DOM-type fields in maven-model) -->
+ <exportedPackage>org.codehaus.plexus.util.xml.Xpp3Dom</exportedPackage>
+ <exportedPackage>org.codehaus.plexus.util.xml.pull.XmlPullParser</exportedPackage>
+ <exportedPackage>org.codehaus.plexus.util.xml.pull.XmlPullParserException</exportedPackage>
+ <exportedPackage>org.codehaus.plexus.util.xml.pull.XmlSerializer</exportedPackage>
+
+ <!-- plexus-container, plexus-component-annotations -->
+ <exportedPackage>org.codehaus.plexus.*</exportedPackage>
+ <exportedPackage>org.codehaus.plexus.component</exportedPackage>
+ <exportedPackage>org.codehaus.plexus.configuration</exportedPackage>
+ <exportedPackage>org.codehaus.plexus.container</exportedPackage>
+ <exportedPackage>org.codehaus.plexus.context</exportedPackage>
+ <exportedPackage>org.codehaus.plexus.lifecycle</exportedPackage>
+ <exportedPackage>org.codehaus.plexus.logging</exportedPackage>
+ <exportedPackage>org.codehaus.plexus.personality</exportedPackage>
+
+ <!-- javax.inject (JSR-330) -->
+ <exportedPackage>javax.inject.*</exportedPackage>
+ <!-- javax.enterprise.inject (JSR-299) -->
+ <exportedPackage>javax.enterprise.util.*</exportedPackage>
+ <exportedPackage>javax.enterprise.inject.*</exportedPackage>
+
+
+ <!--
+ | We may potentially want to export these, but right now I'm not sure that anything Guice specific needs
+ | to be made available to plugin authors. If we find people are getting fancy and want to take advantage of
+ | Guice specifics we can expose that later. Really some testing needs to be done to see full hiding
+ | of Guice has any impact on what we may categorize as a standard JSR-330 based Tesla/Maven plugin.
+
+ <exportedPackage>com.google.inject.*</exportedPackage>
+ <exportedPackage>com.google.inject.binder.*</exportedPackage>
+ <exportedPackage>com.google.inject.matcher.*</exportedPackage>
+ <exportedPackage>com.google.inject.name.*</exportedPackage>
+ <exportedPackage>com.google.inject.spi.*</exportedPackage>
+ <exportedPackage>com.google.inject.util.*</exportedPackage>
+ -->
+
+ <!-- SLF4J -->
+ <exportedPackage>org.slf4j.*</exportedPackage>
+ <exportedPackage>org.slf4j.spi.*</exportedPackage>
+
+ </exportedPackages>
+
+ <exportedArtifacts>
+ <exportedArtifact>classworlds:classworlds</exportedArtifact>
+ <exportedArtifact>org.codehaus.plexus:plexus-classworlds</exportedArtifact>
+ <exportedArtifact>org.codehaus.plexus:plexus-component-api</exportedArtifact>
+ <exportedArtifact>org.codehaus.plexus:plexus-container-default</exportedArtifact>
+ <exportedArtifact>plexus:plexus-container-default</exportedArtifact>
+ <exportedArtifact>org.sonatype.spice:spice-inject-plexus</exportedArtifact>
+ <exportedArtifact>org.sonatype.sisu:sisu-inject-plexus</exportedArtifact>
+ <exportedArtifact>org.eclipse.sisu:org.eclipse.sisu.plexus</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-artifact</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-aether-provider</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-artifact-manager</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-compat</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-core</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-error-diagnostics</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-lifecycle</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-model</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-model-builder</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-monitor</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-plugin-api</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-plugin-descriptor</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-plugin-parameter-documenter</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-plugin-registry</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-profile</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-project</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-repository-metadata</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-settings</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-settings-builder</exportedArtifact>
+ <exportedArtifact>org.apache.maven:maven-toolchain</exportedArtifact>
+ <exportedArtifact>org.apache.maven.wagon:wagon-provider-api</exportedArtifact>
+ <exportedArtifact>org.eclipse.aether:aether-api</exportedArtifact>
+ <exportedArtifact>org.eclipse.aether:aether-spi</exportedArtifact>
+ <exportedArtifact>org.eclipse.aether:aether-impl</exportedArtifact>
+
+ <exportedArtifact>javax.inject:javax.inject</exportedArtifact>
+ <exportedArtifact>org.slf4j:slf4j-api</exportedArtifact>
+
+ <!--
+ | We must also filter out the old or NoClassDefFoundErrors will surface
+ -->
+ <exportedArtifact>org.sonatype.aether:aether-api</exportedArtifact>
+ <exportedArtifact>org.sonatype.aether:aether-spi</exportedArtifact>
+ <exportedArtifact>org.sonatype.aether:aether-impl</exportedArtifact>
+
+ <!--
+ | NOTE: Don't exclude the wagons or any of their dependencies (apart from the wagon API). This would otherwise
+ | provoke linkage errors for wagons contributed by build extensions. We also don't need to exclude the wagons
+ | from plugins. Plugins that use wagons directly and declare the corresponding dependency will simply use a
+ | wagon from their plugin realm.
+ -->
+ </exportedArtifacts>
+</extension> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/plexus/artifact-handlers.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/plexus/artifact-handlers.xml
new file mode 100644
index 00000000..05795beb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/plexus/artifact-handlers.xml
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!--
+
+Artifact handlers are required by the dependency resolution mechanism.
+
+-->
+
+<component-set>
+ <components>
+ <!--
+ | POM
+ |-->
+ <component>
+ <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+ <role-hint>pom</role-hint>
+ <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+ <configuration>
+ <type>pom</type>
+ </configuration>
+ </component>
+
+ <!--
+ | JAR
+ |-->
+ <component>
+ <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+ <role-hint>jar</role-hint>
+ <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+ <configuration>
+ <type>jar</type>
+ <language>java</language>
+ <addedToClasspath>true</addedToClasspath>
+ </configuration>
+ </component>
+
+ <!--
+ | EJB
+ |-->
+ <component>
+ <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+ <role-hint>ejb</role-hint>
+ <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+ <configuration>
+ <type>ejb</type>
+ <extension>jar</extension>
+ <language>java</language>
+ <addedToClasspath>true</addedToClasspath>
+ </configuration>
+ </component>
+ <component>
+ <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+ <role-hint>ejb-client</role-hint>
+ <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+ <configuration>
+ <type>ejb-client</type>
+ <extension>jar</extension>
+ <packaging>ejb</packaging>
+ <classifier>client</classifier>
+ <language>java</language>
+ <addedToClasspath>true</addedToClasspath>
+ </configuration>
+ </component>
+ <component>
+ <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+ <role-hint>ejb3</role-hint>
+ <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+ <configuration>
+ <type>ejb3</type>
+ <includesDependencies>true</includesDependencies>
+ <language>java</language>
+ <addedToClasspath>false</addedToClasspath>
+ </configuration>
+ </component>
+
+ <!--
+ | TEST JAR
+ |-->
+ <component>
+ <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+ <role-hint>test-jar</role-hint>
+ <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+ <configuration>
+ <classifier>tests</classifier>
+ <extension>jar</extension>
+ <type>test-jar</type>
+ <packaging>jar</packaging>
+ <language>java</language>
+ <addedToClasspath>true</addedToClasspath>
+ </configuration>
+ </component>
+
+ <!--
+ | MAVEN PLUGIN
+ |-->
+ <component>
+ <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+ <role-hint>maven-plugin</role-hint>
+ <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+ <configuration>
+ <type>maven-plugin</type>
+ <extension>jar</extension>
+ <language>java</language>
+ <addedToClasspath>true</addedToClasspath>
+ </configuration>
+ </component>
+
+ <!--
+ | SOURCE JAR
+ |-->
+ <component>
+ <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+ <role-hint>java-source</role-hint>
+ <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+ <configuration>
+ <classifier>sources</classifier>
+ <type>java-source</type>
+ <extension>jar</extension>
+ <language>java</language>
+ <addedToClasspath>false</addedToClasspath>
+ </configuration>
+ </component>
+
+ <!--
+ | JAVADOC JAR
+ |-->
+ <component>
+ <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+ <role-hint>javadoc</role-hint>
+ <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+ <configuration>
+ <classifier>javadoc</classifier>
+ <type>javadoc</type>
+ <extension>jar</extension>
+ <language>java</language>
+ <addedToClasspath>true</addedToClasspath>
+ </configuration>
+ </component>
+
+ <!--
+ | WAR
+ |-->
+ <component>
+ <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+ <role-hint>war</role-hint>
+ <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+ <configuration>
+ <type>war</type>
+ <includesDependencies>true</includesDependencies>
+ <language>java</language>
+ <addedToClasspath>false</addedToClasspath>
+ </configuration>
+ </component>
+
+ <!--
+ | EAR
+ |-->
+ <component>
+ <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+ <role-hint>ear</role-hint>
+ <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+ <configuration>
+ <type>ear</type>
+ <includesDependencies>true</includesDependencies>
+ <language>java</language>
+ <addedToClasspath>false</addedToClasspath>
+ </configuration>
+ </component>
+
+ <!--
+ | RAR
+ |-->
+ <component>
+ <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+ <role-hint>rar</role-hint>
+ <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+ <configuration>
+ <type>rar</type>
+ <includesDependencies>true</includesDependencies>
+ <language>java</language>
+ <addedToClasspath>false</addedToClasspath>
+ </configuration>
+ </component>
+
+ <!--
+ | PAR
+ |-->
+ <component>
+ <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+ <role-hint>par</role-hint>
+ <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+ <configuration>
+ <type>par</type>
+ <includesDependencies>true</includesDependencies>
+ <language>java</language>
+ <addedToClasspath>false</addedToClasspath>
+ </configuration>
+ </component>
+ </components>
+</component-set>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/plexus/components.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/plexus/components.xml
new file mode 100644
index 00000000..3f099cb1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/plexus/components.xml
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!--
+ There is currently only one component descriptor that cannot be generated from annotations because of the
+ accompanying configuration. Our options are to embed this information programatically or use a configuration source
+ to pull in the lifecycle information.
+-->
+<component-set>
+ <components>
+ <!-- 'default' lifecycle, without any binding since it is dependent on packaging -->
+ <component>
+ <role>org.apache.maven.lifecycle.Lifecycle</role>
+ <implementation>org.apache.maven.lifecycle.Lifecycle</implementation>
+ <role-hint>default</role-hint>
+ <configuration>
+ <id>default</id>
+ <!-- START SNIPPET: lifecycle -->
+ <phases>
+ <phase>validate</phase>
+ <phase>initialize</phase>
+ <phase>generate-sources</phase>
+ <phase>process-sources</phase>
+ <phase>generate-resources</phase>
+ <phase>process-resources</phase>
+ <phase>compile</phase>
+ <phase>process-classes</phase>
+ <phase>generate-test-sources</phase>
+ <phase>process-test-sources</phase>
+ <phase>generate-test-resources</phase>
+ <phase>process-test-resources</phase>
+ <phase>test-compile</phase>
+ <phase>process-test-classes</phase>
+ <phase>test</phase>
+ <phase>prepare-package</phase>
+ <phase>package</phase>
+ <phase>pre-integration-test</phase>
+ <phase>integration-test</phase>
+ <phase>post-integration-test</phase>
+ <phase>verify</phase>
+ <phase>install</phase>
+ <phase>deploy</phase>
+ </phases>
+ <!-- END SNIPPET: lifecycle -->
+ </configuration>
+ </component>
+
+ <!-- 'clean' lifecycle, with default binding -->
+ <component>
+ <role>org.apache.maven.lifecycle.Lifecycle</role>
+ <implementation>org.apache.maven.lifecycle.Lifecycle</implementation>
+ <role-hint>clean</role-hint>
+ <configuration>
+ <id>clean</id>
+ <!-- START SNIPPET: clean -->
+ <phases>
+ <phase>pre-clean</phase>
+ <phase>clean</phase>
+ <phase>post-clean</phase>
+ </phases>
+ <default-phases>
+ <clean>
+ org.apache.maven.plugins:maven-clean-plugin:2.5:clean
+ </clean>
+ </default-phases>
+ <!-- END SNIPPET: clean -->
+ </configuration>
+ </component>
+
+ <!-- 'site' lifecycle, with default bindings -->
+ <component>
+ <role>org.apache.maven.lifecycle.Lifecycle</role>
+ <implementation>org.apache.maven.lifecycle.Lifecycle</implementation>
+ <role-hint>site</role-hint>
+ <configuration>
+ <id>site</id>
+ <!-- START SNIPPET: site -->
+ <phases>
+ <phase>pre-site</phase>
+ <phase>site</phase>
+ <phase>post-site</phase>
+ <phase>site-deploy</phase>
+ </phases>
+ <default-phases>
+ <site>
+ org.apache.maven.plugins:maven-site-plugin:3.3:site
+ </site>
+ <site-deploy>
+ org.apache.maven.plugins:maven-site-plugin:3.3:deploy
+ </site-deploy>
+ </default-phases>
+ <!-- END SNIPPET: site -->
+ </configuration>
+ </component>
+
+ <component>
+ <role>org.sonatype.plexus.components.sec.dispatcher.SecDispatcher</role>
+ <role-hint>maven</role-hint>
+ <implementation>org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher</implementation>
+ <description>Maven Security dispatcher</description>
+ <requirements>
+ <requirement>
+ <role>org.sonatype.plexus.components.cipher.PlexusCipher</role>
+ <field-name>_cipher</field-name>
+ </requirement>
+ <requirement>
+ <role>org.sonatype.plexus.components.sec.dispatcher.PasswordDecryptor</role>
+ <field-name>_decryptors</field-name>
+ </requirement>
+ </requirements>
+ <configuration>
+ <_configuration-file>~/.m2/settings-security.xml</_configuration-file>
+ </configuration>
+ </component>
+ </components>
+</component-set>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/plexus/default-bindings.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/plexus/default-bindings.xml
new file mode 100644
index 00000000..79d6c52e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/plexus/default-bindings.xml
@@ -0,0 +1,399 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!--
+
+Mappings to default lifecycle, specific for each packaging.
+
+-->
+
+<component-set>
+ <components>
+ <!--
+ | POM
+ |-->
+ <component>
+ <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
+ <role-hint>pom</role-hint>
+ <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
+ <configuration>
+ <lifecycles>
+ <lifecycle>
+ <id>default</id>
+ <!-- START SNIPPET: pom-lifecycle -->
+ <phases>
+ <install>
+ org.apache.maven.plugins:maven-install-plugin:2.4:install
+ </install>
+ <deploy>
+ org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
+ </deploy>
+ </phases>
+ <!-- END SNIPPET: pom-lifecycle -->
+ </lifecycle>
+ </lifecycles>
+ </configuration>
+ </component>
+
+ <!--
+ | JAR
+ |-->
+ <component>
+ <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
+ <role-hint>jar</role-hint>
+ <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
+ <configuration>
+ <lifecycles>
+ <lifecycle>
+ <id>default</id>
+ <!-- START SNIPPET: jar-lifecycle -->
+ <phases>
+ <process-resources>
+ org.apache.maven.plugins:maven-resources-plugin:2.6:resources
+ </process-resources>
+ <compile>
+ org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
+ </compile>
+ <process-test-resources>
+ org.apache.maven.plugins:maven-resources-plugin:2.6:testResources
+ </process-test-resources>
+ <test-compile>
+ org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile
+ </test-compile>
+ <test>
+ org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
+ </test>
+ <package>
+ org.apache.maven.plugins:maven-jar-plugin:2.4:jar
+ </package>
+ <install>
+ org.apache.maven.plugins:maven-install-plugin:2.4:install
+ </install>
+ <deploy>
+ org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
+ </deploy>
+ </phases>
+ <!-- END SNIPPET: jar-lifecycle -->
+ </lifecycle>
+ </lifecycles>
+ </configuration>
+ </component>
+
+ <!--
+ | EJB
+ |-->
+ <component>
+ <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
+ <role-hint>ejb</role-hint>
+ <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
+ <configuration>
+ <lifecycles>
+ <lifecycle>
+ <id>default</id>
+ <!-- START SNIPPET: ejb-lifecycle -->
+ <phases>
+ <process-resources>
+ org.apache.maven.plugins:maven-resources-plugin:2.6:resources
+ </process-resources>
+ <compile>
+ org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
+ </compile>
+ <process-test-resources>
+ org.apache.maven.plugins:maven-resources-plugin:2.6:testResources
+ </process-test-resources>
+ <test-compile>
+ org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile
+ </test-compile>
+ <test>
+ org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
+ </test>
+ <package>
+ org.apache.maven.plugins:maven-ejb-plugin:2.3:ejb
+ </package>
+ <install>
+ org.apache.maven.plugins:maven-install-plugin:2.4:install
+ </install>
+ <deploy>
+ org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
+ </deploy>
+ </phases>
+ <!-- END SNIPPET: ejb-lifecycle -->
+ </lifecycle>
+ </lifecycles>
+ </configuration>
+ </component>
+ <component>
+ <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
+ <role-hint>ejb3</role-hint>
+ <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
+ <configuration>
+ <lifecycles>
+ <lifecycle>
+ <id>default</id>
+ <!-- START SNIPPET: ejb3-lifecycle -->
+ <phases>
+ <process-resources>
+ org.apache.maven.plugins:maven-resources-plugin:2.6:resources
+ </process-resources>
+ <compile>
+ org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
+ </compile>
+ <process-test-resources>
+ org.apache.maven.plugins:maven-resources-plugin:2.6:testResources
+ </process-test-resources>
+ <test-compile>
+ org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile
+ </test-compile>
+ <test>
+ org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
+ </test>
+ <package>
+ org.apache.maven.plugins:maven-ejb3-plugin:ejb3
+ </package>
+ <install>
+ org.apache.maven.plugins:maven-install-plugin:2.4:install
+ </install>
+ <deploy>
+ org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
+ </deploy>
+ </phases>
+ <!-- END SNIPPET: ejb3-lifecycle -->
+ </lifecycle>
+ </lifecycles>
+ </configuration>
+ </component>
+
+ <!--
+ | MAVEN PLUGIN
+ |-->
+ <component>
+ <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
+ <role-hint>maven-plugin</role-hint>
+ <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
+ <configuration>
+ <lifecycles>
+ <lifecycle>
+ <id>default</id>
+ <!-- START SNIPPET: maven-plugin-lifecycle -->
+ <phases>
+ <process-resources>
+ org.apache.maven.plugins:maven-resources-plugin:2.6:resources
+ </process-resources>
+ <compile>
+ org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
+ </compile>
+ <process-classes>
+ org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor
+ </process-classes>
+ <process-test-resources>
+ org.apache.maven.plugins:maven-resources-plugin:2.6:testResources
+ </process-test-resources>
+ <test-compile>
+ org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile
+ </test-compile>
+ <test>
+ org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
+ </test>
+ <package>
+ org.apache.maven.plugins:maven-jar-plugin:2.4:jar,
+ org.apache.maven.plugins:maven-plugin-plugin:3.2:addPluginArtifactMetadata
+ </package>
+ <install>
+ org.apache.maven.plugins:maven-install-plugin:2.4:install
+ </install>
+ <deploy>
+ org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
+ </deploy>
+ </phases>
+ <!-- END SNIPPET: maven-plugin-lifecycle -->
+ </lifecycle>
+ </lifecycles>
+ </configuration>
+ </component>
+
+ <!--
+ | WAR
+ |-->
+ <component>
+ <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
+ <role-hint>war</role-hint>
+ <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
+ <configuration>
+ <lifecycles>
+ <lifecycle>
+ <id>default</id>
+ <!-- START SNIPPET: war-lifecycle -->
+ <phases>
+ <process-resources>
+ org.apache.maven.plugins:maven-resources-plugin:2.6:resources
+ </process-resources>
+ <compile>
+ org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
+ </compile>
+ <process-test-resources>
+ org.apache.maven.plugins:maven-resources-plugin:2.6:testResources
+ </process-test-resources>
+ <test-compile>
+ org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile
+ </test-compile>
+ <test>
+ org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
+ </test>
+ <package>
+ org.apache.maven.plugins:maven-war-plugin:2.2:war
+ </package>
+ <install>
+ org.apache.maven.plugins:maven-install-plugin:2.4:install
+ </install>
+ <deploy>
+ org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
+ </deploy>
+ </phases>
+ <!-- END SNIPPET: war-lifecycle -->
+ </lifecycle>
+ </lifecycles>
+ </configuration>
+ </component>
+
+ <!--
+ | EAR
+ |-->
+ <component>
+ <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
+ <role-hint>ear</role-hint>
+ <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
+ <configuration>
+ <lifecycles>
+ <lifecycle>
+ <id>default</id>
+ <!-- START SNIPPET: ear-lifecycle -->
+ <phases>
+ <generate-resources>
+ org.apache.maven.plugins:maven-ear-plugin:2.8:generate-application-xml
+ </generate-resources>
+ <process-resources>
+ org.apache.maven.plugins:maven-resources-plugin:2.4.3:resources
+ </process-resources>
+ <package>
+ org.apache.maven.plugins:maven-ear-plugin:2.8:ear
+ </package>
+ <install>
+ org.apache.maven.plugins:maven-install-plugin:2.4:install
+ </install>
+ <deploy>
+ org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
+ </deploy>
+ </phases>
+ <!-- END SNIPPET: ear-lifecycle -->
+ </lifecycle>
+ </lifecycles>
+ </configuration>
+ </component>
+
+ <!--
+ | RAR
+ |-->
+ <component>
+ <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
+ <role-hint>rar</role-hint>
+ <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
+ <configuration>
+ <lifecycles>
+ <lifecycle>
+ <id>default</id>
+ <!-- START SNIPPET: rar-lifecycle -->
+ <phases>
+ <process-resources>
+ org.apache.maven.plugins:maven-resources-plugin:2.6:resources
+ </process-resources>
+ <compile>
+ org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
+ </compile>
+ <process-test-resources>
+ org.apache.maven.plugins:maven-resources-plugin:2.6:testResources
+ </process-test-resources>
+ <test-compile>
+ org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile
+ </test-compile>
+ <test>
+ org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
+ </test>
+ <package>
+ org.apache.maven.plugins:maven-rar-plugin:2.2:rar
+ </package>
+ <install>
+ org.apache.maven.plugins:maven-install-plugin:2.4:install
+ </install>
+ <deploy>
+ org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
+ </deploy>
+ </phases>
+ <!-- END SNIPPET: rar-lifecycle -->
+ </lifecycle>
+ </lifecycles>
+ </configuration>
+ </component>
+
+ <!--
+ | PAR
+ |-->
+ <component>
+ <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
+ <role-hint>par</role-hint>
+ <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
+ <configuration>
+ <lifecycles>
+ <lifecycle>
+ <id>default</id>
+ <!-- START SNIPPET: par-lifecycle -->
+ <phases>
+ <process-resources>
+ org.apache.maven.plugins:maven-resources-plugin:2.6:resources
+ </process-resources>
+ <compile>
+ org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
+ </compile>
+ <process-test-resources>
+ org.apache.maven.plugins:maven-resources-plugin:2.6:testResources
+ </process-test-resources>
+ <test-compile>
+ org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile
+ </test-compile>
+ <test>
+ org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
+ </test>
+ <package>
+ org.apache.maven.plugins:maven-par-plugin:par
+ </package>
+ <install>
+ org.apache.maven.plugins:maven-install-plugin:2.4:install
+ </install>
+ <deploy>
+ org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
+ </deploy>
+ </phases>
+ <!-- END SNIPPET: par-lifecycle -->
+ </lifecycle>
+ </lifecycles>
+ </configuration>
+ </component>
+ </components>
+</component-set>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/build.properties b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/build.properties
new file mode 100644
index 00000000..d15784a7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/build.properties
@@ -0,0 +1,23 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+buildNumber=${buildNumber}
+timestamp=${timestamp}
+version=${project.version}
+distributionId=${distributionId}
+distributionShortName=${distributionShortName}
+distributionName=${distributionName} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages.properties b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages.properties
new file mode 100644
index 00000000..d576d7aa
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages.properties
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# --------------------------------------------------------------------------
+# Project Verifier
+# --------------------------------------------------------------------------
+failed.download.warning=WARNING: Failed to download {0}.
+remote.repository.disabled.warning=The use of the remote repository has been disabled.
+directory.nonexistant.warning=Directory {0} does not exist. Attempting to create.
+not.directory.warning={0} is not a directory.
+not.writable.warning={0} is not writable.
+cannot.create.directory.warning=Unable to create directory {0}
+maven.repo.local.unset.warning=maven.repo.local is not set.
+single.unsatisfied.dependency.error=The build cannot continue because of the following unsatisfied dependency:
+multiple.unsatisfied.dependency.error=The build cannot continue because of the following unsatisfied dependencies:
+offline.snapshot.warning=You are working offline so the build will continue, but {0} may be out of date!
+download.message=Attempting to download {0}.
+plugin.loading.error=The plugin {0} could not be loaded.
+empty.descriptor.error=The file {0} you specified has zero length.
+checksum.verification.error=The follow artifact is corrupt: {0}.
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_de.properties b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_de.properties
new file mode 100644
index 00000000..d5c7dad0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_de.properties
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# --------------------------------------------------------------------------
+# Project Verifier
+# --------------------------------------------------------------------------
+failed.download.warning=WARNUNG: Herunterladen von {0} fehlgeschlagen.
+remote.repository.disabled.warning=Verwendung entfernter Repositories deaktiviert.
+directory.nonexistant.warning=Verzeichnis {0} existiert nicht, es wird erstellt.
+not.directory.warning={0} ist kein Verzeichnis.
+not.writable.warning=Kann {0} nicht schreiben.
+cannot.create.directory.warning=Kann Verzeichnis {0} nicht erstellen.
+maven.repo.local.unset.warning=maven.repo.local ist nicht gesetzt.
+single.unsatisfied.dependency.error=Der Vorgang wurde aufgrund der folgenden nicht erf\u00FCllten Abh\u00E4ngigkeit abgebrochen:
+multiple.unsatisfied.dependency.error=Der Vorgang wurde aufgrund der folgenden nicht erf\u00FCllten Abh\u00E4ngigkeiten abgebrochen:
+offline.snapshot.warning={0} ist unter Umst\u00E4nden veraltet. Da Sie offline arbeiten, wird der Vorgang fortgesetzt.
+download.message=Versuche {0} herunterzuladen.
+plugin.loading.error=Kann Plugin {0} nicht laden.
+empty.descriptor.error=Datei {0} ist leer.
+checksum.verification.error=Artefakt {0} ist defekt.
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_el.properties b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_el.properties
new file mode 100644
index 00000000..40a239e9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_el.properties
@@ -0,0 +1,33 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# --------------------------------------------------------------------------
+# \u00c5\u00eb\u00e5\u00e3\u00ea\u00f4\u00de\u00f2 \u00d3\u00f7\u00e5\u00e4\u00df\u00ef\u00f5
+# --------------------------------------------------------------------------
+failed.download.warning=\u00d0\u00f1\u00ef\u00f3\u00f9\u00f7\u00de! \u00c1\u00e4\u00fd\u00ed\u00e1\u00f4\u00f9\u00ed \u00e7 \u00ec\u00e5\u00f4\u00e1\u00f6\u00ef\u00f1\u00dc \u00f4\u00ef\u00f5 {0}!
+remote.repository.disabled.warning=\u00c7 \u00f7\u00f1\u00de\u00f3\u00e7 \u00e1\u00f0\u00ef\u00ec\u00e1\u00ea\u00f1\u00f5\u00f3\u00ec\u00dd\u00ed\u00f9\u00ed \u00e1\u00f0\u00ef\u00e8\u00e7\u00ea\u00fe\u00ed \u00dd\u00f7\u00e5\u00e9 \u00e1\u00f0\u00e5\u00ed\u00e5\u00f1\u00e3\u00ef\u00f0\u00ef\u00e9\u00e7\u00e8\u00e5\u00df..
+directory.nonexistant.warning=\u00cf \u00ea\u00e1\u00f4\u00dc\u00eb\u00ef\u00e3\u00ef\u00f2 {0} \u00e4\u00e5\u00ed \u00f5\u00f0\u00dc\u00f1\u00f7\u00e5\u00e9! \u00c4\u00ef\u00ea\u00e9\u00ec\u00dc\u00e6\u00f9 \u00e4\u00e7\u00ec\u00e9\u00ef\u00fd\u00f1\u00e3\u00e7\u00f3\u00e7...
+not.directory.warning={0} \u00e4\u00e5\u00ed \u00e5\u00df\u00ed\u00e1\u00e9 \u00ea\u00e1\u00f4\u00dc\u00eb\u00ef\u00e3\u00ef\u00f2!
+not.writable.warning=\u00c1\u00e4\u00fd\u00ed\u00e1\u00f4\u00f9\u00ed \u00e7 \u00e4\u00e9\u00e5\u00e3\u00e3\u00f1\u00e1\u00f6\u00de \u00f3\u00f4\u00ef {0}!
+cannot.create.directory.warning=\u00c1\u00e4\u00fd\u00ed\u00e1\u00f4\u00f9\u00ed \u00e7 \u00e4\u00e7\u00ec\u00e9\u00ef\u00f5\u00f1\u00e3\u00e5\u00df\u00e1 \u00f4\u00ef\u00fd \u00ea\u00e1\u00f4\u00e1\u00eb\u00fc\u00e3\u00ef\u00f5 {0}!
+maven.repo.local.unset.warning=maven.repo.local \u00e4\u00e5\u00ed \u00dd\u00f7\u00e5\u00e9 \u00ef\u00f1\u00e9\u00f3\u00f4\u00e5\u00df.
+single.unsatisfied.dependency.error= \u00c7 \u00e4\u00e9\u00e1\u00e4\u00e9\u00ea\u00e1\u00f3\u00df\u00e1 \u00e4\u00e5\u00ed \u00ec\u00f0\u00ef\u00f1\u00e5\u00df \u00ed\u00e1 \u00f3\u00f5\u00ed\u00e5\u00f7\u00e9\u00f3\u00f4\u00e5\u00df! \u00cb\u00e5\u00df\u00f0\u00e5\u00e9 \u00e7 \u00e1\u00ea\u00fc\u00eb\u00ef\u00f5\u00e8\u00e7 \u00e5\u00ee\u00dc\u00f1\u00f4\u00e7\u00f3\u00e5\u00e9:
+multiple.unsatisfied.dependency.error=\u00c7 \u00e4\u00e9\u00e1\u00e4\u00e9\u00ea\u00e1\u00f3\u00df\u00e1 \u00e4\u00e5\u00ed \u00ec\u00f0\u00ef\u00f1\u00e5\u00df \u00ed\u00e1 \u00f3\u00f5\u00ed\u00e5\u00f7\u00e9\u00f3\u00f4\u00e5\u00df! \u00cb\u00e5\u00df\u00f0\u00ef\u00f5\u00ed \u00e7 \u00e1\u00ea\u00fc\u00eb\u00ef\u00f5\u00e8\u00e5\u00f2 \u00e5\u00ee\u00e1\u00f1\u00f4\u00de\u00f3\u00e5\u00e9\u00f2:
+offline.snapshot.warning=\u00c5\u00f1\u00e3\u00dc\u00e6\u00e5\u00f3\u00e1\u00e9 \u00e1\u00f0\u00ef\u00f3\u00f5\u00ed\u00e4\u00e5\u00e4\u00ef\u00ec\u00dd\u00ed\u00ef\u00f2! \u00c7 \u00e4\u00e9\u00e1\u00e4\u00e9\u00ea\u00e1\u00f3\u00df\u00e1 \u00e8\u00e1 \u00f3\u00f5\u00ed\u00e5\u00f7\u00df\u00f3\u00e5\u00e9 \u00e1\u00eb\u00eb\u00dc \u00e5\u00df\u00ed\u00e1\u00e9 \u00e4\u00f5\u00ed\u00e1\u00f4\u00fe\u00ed {0} \u00ed\u00e1 \u00ec\u00e7\u00ed \u00e5\u00df\u00ed\u00e1\u00e9 \u00e5\u00ed\u00e7\u00ec\u00e5\u00f1\u00f9\u00ec\u00dd\u00ed\u00ef!
+download.message=\u00d0\u00f1\u00f9\u00f3\u00f0\u00e1\u00e8\u00fe \u00ed\u00e1 \u00ec\u00e5\u00f4\u00e1\u00f6\u00dd\u00f1\u00f9 {0}.
+plugin.loading.error=\u00c1\u00e4\u00fd\u00ed\u00e1\u00f4\u00f9\u00ed \u00ed\u00e1 \u00f6\u00ef\u00f1\u00f4\u00f9\u00e8\u00e5\u00df \u00f4\u00ef plugin {0}!
+empty.descriptor.error=\u00d4\u00ef \u00e1\u00f1\u00f7\u00e5\u00df\u00ef {0} \u00f0\u00ef\u00fd \u00ea\u00e1\u00e8\u00ef\u00f1\u00df\u00f3\u00e1\u00f4\u00e5 \u00dd\u00f7\u00e5\u00e9 \u00ec\u00dd\u00e3\u00e5\u00e8\u00ef\u00f2 \u00ec\u00e7\u00e4\u00dd\u00ed.
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_en.properties b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_en.properties
new file mode 100644
index 00000000..aaf95bfd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_en.properties
@@ -0,0 +1,23 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# NOTE:
+# This bundle is intentionally empty because English strings are provided by the base bundle via the parent chain. It
+# must be provided nevertheless such that a request for locale "en" will not erroneously pick up the bundle for the
+# JVM's default locale (which need not be "en"). See the method javadoc about
+# ResourceBundle.getBundle(String, Locale, ClassLoader)
+# for a full description of the lookup strategy.
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_es.properties b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_es.properties
new file mode 100644
index 00000000..d54395e3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_es.properties
@@ -0,0 +1,33 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# --------------------------------------------------------------------------
+# Verificador de Proyecto
+# --------------------------------------------------------------------------
+failed.download.warning=\u00a1ATENCION!: \u00a1Imposible descargar {0}!
+remote.repository.disabled.warning=El uso de repositorios remotos est\u00e1 desactivado..
+directory.nonexistant.warning=\u00a1El directorio {0} no existe! Intentando crear...
+not.directory.warning=\u00a1{0} no es un directorio!
+not.writable.warning=\u00a1Imposible escribir en {0}!
+cannot.create.directory.warning=\u00a1Imposible crear el directorio {0}!
+maven.repo.local.unset.warning=\u00a1maven.repo.local no est\u00e1 definido!
+single.unsatisfied.dependency.error=\u00a1El proceso no puede seguir! Falta la siguiente dependencia:
+multiple.unsatisfied.dependency.error=\u00a1El proceso no puede seguir! Faltan las siguientes dependencias:
+offline.snapshot.warning=\u00a1Est\u00e1s trabajando fuera de linea! \u00a1El proceso seguir\u00e1, pero es posible que {0} no est\u00e9 actualizado!
+download.message=Intentando descargar {0}.
+plugin.loading.error=\u00a1No se ha podido cargar el plugin {0}!
+empty.descriptor.error=El fichero especificado, {0} , tiene longitud cero.
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_fr.properties b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_fr.properties
new file mode 100644
index 00000000..06eb48f5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_fr.properties
@@ -0,0 +1,33 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# --------------------------------------------------------------------------
+# Project Verifier
+# --------------------------------------------------------------------------
+failed.download.warning=ATTENTION: Impossible de t\u00e9l\u00e9charger {0}.
+remote.repository.disabled.warning=L'utilisation du d\u00e9p\u00f4t distant est d\u00e9sactiv\u00e9e.
+directory.nonexistant.warning=Le r\u00e9pertoire {0} n'existe pas. Tentative de cr\u00e9ation.
+not.directory.warning={0} n'est pas un r\u00e9pertoire.
+not.writable.warning=Impossible d'\u00e9crire sur {0}.
+cannot.create.directory.warning=Impossible de cr\u00e9er le r\u00e9pertoire {0}.
+maven.repo.local.unset.warning=maven.repo.local n'est pas d\u00e9fini.
+single.unsatisfied.dependency.error=Le processus ne peut continuer \u00e0 cause de la d\u00e9pendance manquante suivante:
+multiple.unsatisfied.dependency.error=Le processus ne peut continuer \u00e0 cause des d\u00e9pendances manquantes suivantes:
+offline.snapshot.warning=Vous travaillez hors-connexion, alors le processus va continuer, mais {0} peut ne pas \u00eatre \u00e0 jour!
+download.message=Tentative de t\u00e9l\u00e9chargement de {0}.
+plugin.loading.error=Impossible de charger le plugin {0}.
+empty.descriptor.error=Le fichier {0} que vous avez sp\u00e9cifi\u00e9 est vide.
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_ja.properties b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_ja.properties
new file mode 100644
index 00000000..e1b65666
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_ja.properties
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# --------------------------------------------------------------------------
+# Project Verifier
+# --------------------------------------------------------------------------
+failed.download.warning=WARNING: {0} \u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f.
+remote.repository.disabled.warning=\u30ea\u30e2\u30fc\u30c8\u30ea\u30dd\u30b8\u30c8\u30ea\u304c\u7121\u52b9\u3067\u3059.
+directory.nonexistant.warning=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea {0} \u304c\u5b58\u5728\u3057\u307e\u305b\u3093. \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3059.
+not.directory.warning={0} \u306f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u306f\u3042\u308a\u307e\u305b\u3093.
+not.writable.warning={0} \u306f\u66f8\u304d\u8fbc\u307f\u53ef\u80fd\u3067\u306f\u3042\u308a\u307e\u305b\u3093.
+cannot.create.directory.warning=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea {0} \u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093.
+maven.repo.local.unset.warning=maven.repo.local \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093.
+single.unsatisfied.dependency.error=\u4ee5\u4e0b\u306e\u4f9d\u5b58\u95a2\u4fc2\u304c\u6e80\u305f\u3055\u308c\u306a\u304b\u3063\u305f\u305f\u3081\u3001\u30d3\u30eb\u30c9\u3092\u7d9a\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093:
+multiple.unsatisfied.dependency.error=\u4ee5\u4e0b\u306e\u3044\u304f\u3064\u304b\u306e\u4f9d\u5b58\u95a2\u4fc2\u304c\u6e80\u305f\u3055\u308c\u306a\u304b\u3063\u305f\u305f\u3081\u3001\u30d3\u30eb\u30c9\u3092\u7d9a\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093:
+offline.snapshot.warning=\u30aa\u30d5\u30e9\u30a4\u30f3\u30e2\u30fc\u30c9\u3067\u30d3\u30eb\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059. {0} \u306f\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u5229\u7528\u3055\u308c\u307e\u3059.
+download.message={0} \u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059.
+plugin.loading.error=\u30d7\u30e9\u30b0\u30a4\u30f3 {0} \u3092\u30ed\u30fc\u30c9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093.
+empty.descriptor.error=\u6307\u5b9a\u3057\u305f\u30d5\u30a1\u30a4\u30eb {0} \u306f\u7a7a\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u3059.
+checksum.verification.error=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8 {0} \u304c\u4e0d\u6b63\u3067\u3059.
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_ko.properties b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_ko.properties
new file mode 100644
index 00000000..b3f1efac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_ko.properties
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# --------------------------------------------------------------------------
+# Project Verifier
+# --------------------------------------------------------------------------
+cannot.create.directory.warning = \uB514\uB809\uD130\uB9AC {0} \uC744/\uB97C \uC0DD\uC131\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
+checksum.verification.error = \uB2E4\uC74C\uC758 \uC544\uB9AC\uD329\uD2B8(artifact)\uC5D0\uC11C \uC5D0\uB7EC\uAC00 \uBC1C\uC0DD\uD569\uB2C8\uB2E4: {0}
+directory.nonexistant.warning = \uB514\uB809\uD130\uB9AC {0} \uC774/\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC0DD\uC131\uC744 \uC2DC\uB3C4\uD569\uB2C8\uB2E4.
+download.message = {0} \uC744/\uB97C \uB2E4\uC6B4\uB85C\uB4DC \uD569\uB2C8\uB2E4.
+empty.descriptor.error = \uD30C\uC77C {0} \uC758 \uAE38\uC774\uAC00 0\uC785\uB2C8\uB2E4.
+failed.download.warning = \uACBD\uACE0: {0} \uC744/\uB97C \uB2E4\uC6B4\uB85C\uB4DC \uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.
+maven.repo.local.unset.warning = maven.repo.local \uC774 \uC124\uC815\uB418\uC5B4\uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
+multiple.unsatisfied.dependency.error = \uB2E4\uC74C\uC758 \uC758\uC874\uC131\uB4E4\uC744 \uB9CC\uC871\uC2DC\uD0A4\uC9C0 \uBABB\uD588\uAE30 \uB54C\uBB38\uC5D0, \uBE4C\uB4DC\uB97C \uACC4\uC18D \uC9C4\uD589\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
+not.directory.warning = {0} \uC740/\uB294 \uB514\uB809\uD130\uB9AC\uAC00 \uC544\uB2D9\uB2C8\uB2E4.
+not.writable.warning = {0} \uC740/\uB294 \uC4F0\uAE30\uB97C \uD5C8\uC6A9\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
+offline.snapshot.warning = \uC624\uD504\uB77C\uC778\uC73C\uB85C \uC791\uC5C5\uD558\uACE0 \uC788\uAE30 \uB54C\uBB38\uC5D0 \uBE4C\uB4DC\uB294 \uACC4\uC18D \uC9C4\uD589\uD558\uC9C0\uB9CC, {0} \uC740/\uB294 \uCD5C\uC2E0 \uBC84\uC804\uC774 \uC544\uB2D0 \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4!
+plugin.loading.error = \uD50C\uB7EC\uADF8\uC778 {0} \uC744/\uB97C \uC77D\uC5B4\uC62C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
+remote.repository.disabled.warning = \uC6D0\uACA9 \uC800\uC7A5\uC18C \uC0AC\uC6A9\uC744 \uD5C8\uAC00\uD558\uC9C0 \uC54A\uC740(disabled) \uC0C1\uD0DC\uC785\uB2C8\uB2E4.
+single.unsatisfied.dependency.error = \uB2E4\uC74C\uC758 \uC758\uC874\uC131\uB4E4\uC744 \uB9CC\uC871\uC2DC\uD0A4\uC9C0 \uBABB\uD588\uAE30 \uB54C\uBB38\uC5D0, \uBE4C\uB4DC\uB97C \uACC4\uC18D \uC9C4\uD589\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_nl.properties b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_nl.properties
new file mode 100644
index 00000000..0e22d6ce
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_nl.properties
@@ -0,0 +1,33 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# --------------------------------------------------------------------------
+# Project Verifier
+# --------------------------------------------------------------------------
+failed.download.warning=WAARSCHUWING: Kan {0} niet downloaden.
+remote.repository.disabled.warning=Het gebruik van de remote repository is uitgezet.
+directory.nonexistant.warning=Directory {0} bestaat niet. Probeer hem aan te maken.
+not.directory.warning={0} is geen directory.
+not.writable.warning={0} is niet schrijfbaar.
+cannot.create.directory.warning=Kan {0} directory niet aanmaken
+maven.repo.local.unset.warning=maven.repo.local is niet ingesteld.
+single.unsatisfied.dependency.error=Het bouwen kan niet doorgaan, omdat de volgende afhankelijkheid niet achterhaald kan worden:
+multiple.unsatisfied.dependency.error=Het bouwen kan niet doorgaan, omdat de volgende afhankelijkheden niet achterhaald kunnen worden:
+offline.snapshot.warning=Je werkt offline, dus het bouwen gaat verder, maar {0} kan eventueel niet up-to-date zijn!
+download.message=Probeer {0} te downloaden.
+plugin.loading.error=De {0} plugin kan niet worden geladen.
+empty.descriptor.error=The {0} file you specified has zero length.
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_no.properties b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_no.properties
new file mode 100644
index 00000000..af320f6b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_no.properties
@@ -0,0 +1,33 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# --------------------------------------------------------------------------
+# Project Verifier
+# --------------------------------------------------------------------------
+failed.download.warning=ADVARSEL: Mislykket nedlasting av {0}.
+remote.repository.disabled.warning=Bruk av fjernlager er deaktivert.
+directory.nonexistant.warning=Mappen {0} finnes ikke. Fors\u00f8ker \u00e5 opprette.
+not.directory.warning={0} er ikke en mappe.
+not.writable.warning=Kan ikke skirve til {0}.
+cannot.create.directory.warning=Kan ikke opprette mappen {0}.
+maven.repo.local.unset.warning=maven.repo.local er ikke definert.
+single.unsatisfied.dependency.error=Byggeprosessen kan ikke fortsette p\u00e5 grunn av f\u00f8lgende mislykkede avhengighet:
+multiple.unsatisfied.dependency.error=The build cannot continue because of the following unsatisfied dependencies:
+offline.snapshot.warning=Du arbeider frakoblet. Byggeprosessen vil fortsette, men {0} kan bli utdatert!
+download.message=Fors\u00f8ker \u00e5 laste ned {0}.
+plugin.loading.error=Plugin {0} kunne ikke lastes.
+empty.descriptor.error=The {0} file you specified has zero length.
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_pl.properties b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_pl.properties
new file mode 100644
index 00000000..36a292bd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_pl.properties
@@ -0,0 +1,33 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# --------------------------------------------------------------------------
+# Project Verifier
+# --------------------------------------------------------------------------
+failed.download.warning=UWAGA: Nie uda\u0142o si\u0119 sci\u0105gn\u0105\u0107 {0}.
+remote.repository.disabled.warning=Korzystanie ze zdalnego repozytorium jest wy\u0142\u0105czone.
+directory.nonexistant.warning=Katalog {0} nie istnieje. Pr\u00f3buj\u0119 utworzy\u0107.
+not.directory.warning={0} nie jest katalogiem.
+not.writable.warning=Nie mo\u017cesz zapisa\u0107 {0}.
+cannot.create.directory.warning=Nie mo\u017cesz utworzy\u0107 katalogu {0}.
+maven.repo.local.unset.warning=maven.repo.local nie jest zdefiniowane.
+single.unsatisfied.dependency.error=Budownaie przerwane z powodu nast\u0119puj\u0105cej niespe\u0142nionej zale\u017cno\u015bci:
+multiple.unsatisfied.dependency.error=Budownaie przerwane z powodu nast\u0119puj\u0105cych niespe\u0142nionych zale\u017cno\u015bci:
+offline.snapshot.warning=Pracujesz w trybie offline, wi\u0119c budowanie b\u0119dzie kontunuowane, cho\u0107 {0} mo\u017ce by\u0107 nieaktualny!
+download.message=Pr\u00f3buj\u0119 \u015bci\u0105gn\u0105\u0107 {0}.
+plugin.loading.error=Nie uda\u0142o si\u0119 za\u0142adowa\u0107 pluginu {0}.
+empty.descriptor.error=The {0} file you specified has zero length.
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_zh_CN.properties b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_zh_CN.properties
new file mode 100644
index 00000000..93695186
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_zh_CN.properties
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# --------------------------------------------------------------------------
+# \u9879\u76ee\u9a8c\u8bc1
+# --------------------------------------------------------------------------
+failed.download.warning=\u8b66\u544a\uff1a {0} \u4e0b\u8f7d\u5931\u8d25\u3002
+remote.repository.disabled.warning=\u7981\u6b62\u4f7f\u7528\u8fdc\u7a0b\u8d44\u6e90\u4ed3\u5e93\u3002
+directory.nonexistant.warning=\u76ee\u5f55 {0} \u4e0d\u5b58\u5728\u3002 \u5c1d\u8bd5\u65b0\u5efa\u4e2d\u2026\u2026
+not.directory.warning={0} \u4e0d\u662f\u76ee\u5f55\u3002
+not.writable.warning={0} \u53ea\u8bfb\u3002
+cannot.create.directory.warning=\u521b\u5efa\u76ee\u5f55 {0} \u5931\u8d25\u3002
+maven.repo.local.unset.warning=\u6ca1\u6709\u8bbe\u7f6e maven.repo.local \u5c5e\u6027\u3002
+single.unsatisfied.dependency.error=\u7531\u4e8e\u4ee5\u4e0b\u7684\u4f9d\u8d56\u7f3a\u5c11\uff0c\u521b\u5efa\u4e0d\u80fd\u8fdb\u884c\uff1a
+multiple.unsatisfied.dependency.error=\u7531\u4e8e\u4ee5\u4e0b\u7684\u4f9d\u8d56\u7f3a\u5c11\uff0c\u521b\u5efa\u4e0d\u80fd\u8fdb\u884c\uff1a
+offline.snapshot.warning=\u79bb\u7ebf\u65f6\u521b\u5efa\uff0c\u53ef\u80fd {0} \u8fc7\u671f\uff01
+download.message=\u5c1d\u8bd5\u4e0b\u8f7d {0}\u2026\u2026
+plugin.loading.error=\u88c5\u5165 plugin {0} \u5931\u8d25\u3002
+empty.descriptor.error=\u6587\u4ef6 {0} \u7684\u957f\u5ea6\u4e3a0\u3002
+checksum.verification.error=\u4ee5\u4e0b\u8d44\u6e90\u5df2\u88ab\u7834\u574f\uff1a{0}\u3002
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/project/standalone.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/project/standalone.xml
new file mode 100644
index 00000000..acb5be2d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/project/standalone.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven</groupId>
+ <artifactId>standalone-pom</artifactId>
+ <version>1</version>
+ <packaging>pom</packaging>
+ <name>Maven Stub Project (No POM)</name>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/artifact-handlers.apt b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/artifact-handlers.apt
new file mode 100644
index 00000000..916161bf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/artifact-handlers.apt
@@ -0,0 +1,59 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ ---
+ Default Artifact Handlers Reference
+ ---
+ Hervé Boutemy
+ ---
+ 2013-08-02
+ ---
+
+Default Artifact Handlers Reference
+
+ Some artifact handlers (see {{{../maven-artifact/apidocs/org/apache/maven/artifact/handler/ArtifactHandler.html} API}})
+ are configured by default in <<<META-INF/plexus/artifact-handlers.xml>>>:
+
+*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
+|| type || extension || packaging || classifier || language || added to classpath || includesDependencies ||
+*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
+| <<<pom>>> | <= type> | <= type> | | none | | |
+*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
+| <<<jar>>> | <= type> | <= type> | | java | <<<true>>> | |
+*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
+| <<<maven-plugin>>> | <<<jar>>> | <= type> | | java | <<<true>>> | |
+*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
+| <<<ejb>>> | <<<jar>>> | <= type> | | java | <<<true>>> | |
+*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
+| <<<ejb3>>> | <= type> | <= type> | | java | | <<<true>>> |
+*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
+| <<<war>>> | <= type> | <= type> | | java | | <<<true>>> |
+*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
+| <<<ear>>> | <= type> | <= type> | | java | | <<<true>>> |
+*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
+| <<<rar>>> | <= type> | <= type> | | java | | <<<true>>> |
+*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
+| <<<par>>> | <= type> | <= type> | | java | | <<<true>>> |
+*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
+| <<<java-source>>> | <<<jar>>> | <= type> | <<<sources>>> | java | | |
+*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
+| <<<javadoc>>> | <<<jar>>> | <= type> | <<<javadoc>>> | java | <<<true>>> | |
+*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
+| <<<ejb-client>>> | <<<jar>>> | <<<ejb>>> | <<<client>>> | java | <<<true>>> | |
+*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
+| <<<test-jar>>> | <<<jar>>> | <<<jar>>> | <<<tests>>> | java | <<<true>>> | |
+*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/configuration-management.apt b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/configuration-management.apt
new file mode 100644
index 00000000..4af0f0b1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/configuration-management.apt
@@ -0,0 +1,139 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ Maven configuration management
+ -----
+ The Maven Team
+ -----
+
+Configuration levels in maven
+
+ In maven configuration control happens on four differ levels: the site level, the group level,
+ the project level, and the user level. On the site level you can configure maven for all users
+ utilizing the local installation, the group level allows configuration management for all the projects
+ that belong to the same group, the project level allows configuration management at
+ the project level, and the user level allows users to override settings on
+ the site level, group level and project level.
+
+* Site configuration
+
+ At the site level all configuration is achieved by tweaking the the various files that
+ are available in the ${maven.home}/site-configuration directory
+
++-----+
+${maven.home}
+ |
+ +--- maven.properties
++-----+
+
+* Group configuration
+
+ As far as properties go for an entire build the maven.properties could be placed at
+ the top of the group but I'm not really sure how this might work. There could probably
+ also be a directory for plugins.xml and maven.properties.
+
+* Project configuration
+
+ At the project level all configuration is achieved by tweaking the POM. One of the differences between
+ maven 1.x and 2.x is that all project parameterization occurs in the POM and not from properties
+ files.
+
+ For many of the more advanced features in Maven2 it is critical that POMs be available in the local repository.
+ Features like transitive dependencies and the new parent specification mechanism. The problem we run into is
+ that currently we have information about a project scattered across the project.xml and the
+ various properties files. What needs to be done is to encapsulate all of this in the POM.
+
+ Typically users parameterize the use of plugins, or have custom values like ${user.name}
+ for use in elements like the <developerConnection/>. It would be idea if we
+ could encapsulate everything we need about the project in the POM including
+ plugin parameters and anything else.
+
+ We once had a document that Vincent and I agreed upon and I was about to
+ implement it and then I disappeared for 8 months so it never came to pass.
+
+ So I guess it's important to figure out what people are using propeties
+ files for and see if we can't incorporate it all into the POM. Or if we do
+ have properties file (something I would like to avoid) say they don't
+ contribute in any meaningful way to information in the POM. For example a
+ properties file could be used the specify $ so it can be interpolated in
+ <developerConnection/> but you couldn't use a properties file to specify the
+ version of your project say. Anyway, food for thought to begin with.
+
+ - elements that are critical for pom dissemination
+ - those that are used locally by the user like <developerConnection/>
+
+* User configuration
+
+ User configuration which is utilized site wide are controlled with the ${user.home}/.m2/maven.properties.
+
+ User configuration which is utilized at the project level are controlled with the
+ ${project.home}/maven.properties file.
+
+Plugin configuration
+
+ The configuration of plugins is of the same form as the maven {{{plugin-descriptors}plugin descriptors}}
+ themselves:
+
++-----+
+<plugins>
+ <plugin>
+ <id>xdoc</id>
+ <version>1.0</version>
+ <parameters>
+ <parameter>
+ <name>theme</name>
+ <value>classic</value>
+ </parameter>
+ </parameters>
+ </plugin>
+</plugins>
++-----+
+
+Unified source directory
+
+ Unified source directory structure that is analagous to the repository
+ itself. This way locations of intermediary artifacts of a build would be
+ in a known location. This would also help with developer setup i.e. getting
+ new developers up and running. They could run a maven command and have all
+ their source trees set up in the same way as their collegues.
+
+ here's what I do currently in the netbeans part of the mevenide project to
+ find the relevant subprojects/sibling projects. I check if the user has
+ defined the maven.multiproject.includes property in any of his properties
+ files for the current project. if yes. then I'm able to find projects that
+ can be offered to be opened together with the current project.
+ problems with the current solution are:
+ 1. information is duplicate. once in POM's dependencies and once in the
+ maven.multiproject.includes property.
+ 2. it works without problems only for projects with relative paths, eg. from
+ one CVS repository.. for projects from multiple SCM repositories it's harder
+ to maintain the same relative links on all developer computers.
+ not sure the unified source directory structure addresses this issue.
+
+ Properties
+
+ maven.user.config.dir (system,default=${user.home}/.m2)
+ maven.home (system,user,default=${user.home}/m2)
+ maven.repo.local (system,user,default=${maven.user.config.dir}/repository)
+
+ We need to define what happens in the when things are not setup correctly
+
+ o ~/.m2 directory does not exist
+ o ~/.m2/maven.properties does not exist
+ o if they once existed but now to do not exist
+ o what the installer will take care of of what we can recover from
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/default-bindings.apt.vm b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/default-bindings.apt.vm
new file mode 100644
index 00000000..02d6c4a9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/default-bindings.apt.vm
@@ -0,0 +1,67 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ ---
+ Plugin Bindings for Default Lifecycle Reference
+ ---
+ Hervé Boutemy
+ ---
+ 2013-08-02
+ ---
+
+Plugin Bindings for <<<default>>> Lifecycle Reference
+
+ The {{{./lifecycles.html}<<<default>>> lifecycle}} is defined without any plugin binding; plugin bindings are defined separately
+ in <<<META-INF/plexus/default-bindings.xml>>> because they are specific for each packaging:
+
+%{toc|fromDepth=2}
+
+* Plugin bindings for <<<pom>>> packaging
+
+%{snippet|id=pom-lifecycle|file=${project.basedir}/src/main/resources/META-INF/plexus/default-bindings.xml}
+
+* Plugin bindings for <<<jar>>> packaging
+
+%{snippet|id=jar-lifecycle|file=${project.basedir}/src/main/resources/META-INF/plexus/default-bindings.xml}
+
+* Plugin bindings for <<<ejb>>> packaging
+
+%{snippet|id=ejb-lifecycle|file=${project.basedir}/src/main/resources/META-INF/plexus/default-bindings.xml}
+
+* Plugin bindings for <<<ejb3>>> packaging
+
+%{snippet|id=ejb3-lifecycle|file=${project.basedir}/src/main/resources/META-INF/plexus/default-bindings.xml}
+
+* Plugin bindings for <<<maven-plugin>>> packaging
+
+%{snippet|id=maven-plugin-lifecycle|file=${project.basedir}/src/main/resources/META-INF/plexus/default-bindings.xml}
+
+* Plugin bindings for <<<war>>> packaging
+
+%{snippet|id=war-lifecycle|file=${project.basedir}/src/main/resources/META-INF/plexus/default-bindings.xml}
+
+* Plugin bindings for <<<ear>>> packaging
+
+%{snippet|id=ear-lifecycle|file=${project.basedir}/src/main/resources/META-INF/plexus/default-bindings.xml}
+
+* Plugin bindings for <<<rar>>> packaging
+
+%{snippet|id=rar-lifecycle|file=${project.basedir}/src/main/resources/META-INF/plexus/default-bindings.xml}
+
+* Plugin bindings for <<<par>>> packaging
+
+%{snippet|id=par-lifecycle|file=${project.basedir}/src/main/resources/META-INF/plexus/default-bindings.xml}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/getting-to-container-configured-mojos.apt b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/getting-to-container-configured-mojos.apt
new file mode 100644
index 00000000..1c4a487d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/getting-to-container-configured-mojos.apt
@@ -0,0 +1,102 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ ---
+ Getting to Plexus-configured Mojos
+ ---
+ John Casey
+ ---
+ 29-April-2005
+
+Abstract
+
+ We're moving toward integrating mojos as first-class plexus components, while
+ at the same time avoiding introducing required plexus dependencies into the
+ mojo development model.
+
+ In order to really achieve this, we need mojo configurations (which are
+ provided both in terms of static expressions that are just looked up, and
+ in terms of user-provided configuration from system properties or the POM).
+ If these mojos are to be first-class components, the configuration from these
+ various sources must be consolidated and injected using the container.
+
+ Currently, mojo configuration is done externally to the container, in the
+ DefaultPluginManager in the maven-core API. In order to get from here to
+ there, we need to do several things to add capability to the default
+ configuration of plexus. This document will detail those changes.
+
+Container Enhancements
+
+* ExpressionEvaluator
+
+ Currently, the expression evaluator used to resolve configuration values
+ is the DefaultExpressionEvaluator, which is a local variable within the
+ implementation of the BasicComponentConfigurator. This ExpressionEvaluator
+ simply returns the expression itself as the resolved value, which adds
+ very little value to the container. Things like ${project.build.resources}
+ are not resolved, and result in a type mismatch for the member injection.
+
+ We need a replacement for DefaultExpressionEvaluator that is capable of
+ traversing an object graph and extracting Object values, not just Strings.
+
+* ComponentConfigurator
+
+ Currently, the container uses BasicComponentConfigurator, to configure
+ components. This wouldn't be a problem, except for the local instance of
+ DefaultExpressionEvaluator used within. See the above discussion for more
+ on why this evaluator is bad. We need to provide either an alternative
+ implementation under a different roleHint, or else replace the
+ BasicComponentConfigurator.
+
+* Other
+
+ We may need to define a new lifecycle/phase to contextualize a mojo right
+ before it's used, and reset it's state afterward. Up to now, the approach
+ of most plexus components has been to avoid instance state like the plague.
+ With the current parameter passing model of mojos, this will not be possible,
+ particularly when we move mojos to a singleton instantiation model, and then
+ run a reactorized project...the successive calls may leave behind configuration
+ artifacts from invocation to invocation.
+
+Maven Modifications
+
+* DefaultPluginManager
+
+ s/getMojoConfiguration()/getConfiguration()/g
+
+ That should re-enable usage of mojo configuration. Ideally, we won't need any
+ of the code that references this method, since the container should provide
+ some way of recontextualizing the mojo, and all we would need to do is inject
+ POM configuration via the lookup method or something.
+
+* PluginDescriptorBuilder
+
+ s/getMojoConfiguration()/getConfiguration()/g
+
+ That should be all there is to it.
+
+* MojoDescriptor
+
+ Remove set/getMojoConfiguration(..), as it will become obsolete.
+
+* MavenSession
+
+ We may need to enable the context injection here, since this will be
+ instantiated per-project. If we always inject the same context parameters,
+ and are careful to inject nulls where things are missing, we should be
+ able to minimize reconfiguration artifacts injected from basic parameters.
+
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/index.apt b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/index.apt
new file mode 100644
index 00000000..f6c26fde
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/index.apt
@@ -0,0 +1,77 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ Introduction
+ -----
+ Hervé Boutemy
+ -----
+ 2013-07-27
+ -----
+
+Maven Core
+
+ Maven Core classes managing the whole build process.
+
+* Useful entry points
+
+ * {{{./lifecycles.html}lifecycles}} and {{{./default-bindings.html}plugin bindings to <<<default>>> lifecycle}},
+
+ * {{{./artifact-handlers.html}default artifact handlers}},
+
+ * <<<Maven>>> component ({{{./apidocs/org/apache/maven/Maven.html}javadoc}}),
+ with its <<<DefaultMaven>>> implementation ({{{./xref/org/apache/maven/DefaultMaven.html}source}}),
+
+ * <<<ProjectBuilder>>> component ({{{./apidocs/org/apache/maven/project/ProjectBuilder.html}javadoc}}),
+ with its <<<DefaultProjectBuilder>>> implementation
+ ({{{./xref/org/apache/maven/project/DefaultProjectBuilder.html}source}}),
+
+ * <<<MavenPluginManager>>> component ({{{./apidocs/org/apache/maven/plugin/MavenPluginManager.html}javadoc}}),
+ with its <<<DefaultMavenPluginManager>>> implementation
+ ({{{./xref/org/apache/maven/plugin/internal/DefaultMavenPluginManager.html}source}}),
+
+ * {{{./apidocs/org/apache/maven/plugin/PluginParameterExpressionEvaluator.html}PluginParameterExpressionEvaluator}}, used to
+ evaluate plugin parameters values during Mojo configuration,
+
+ * {{{/guides/mini/guide-maven-classloading.html}classloader hierarchy}} done by <<<ClassRealmManager>>> component
+ ({{{./apidocs/org/apache/maven/classrealm/ClassRealmManager.html}javadoc}}),
+ with its <<<DefaultClassRealmManager>>> implementation
+ ({{{./xref/org/apache/maven/classrealm/DefaultClassRealmManager.html}source}}), using
+ {{{http://plexus.codehaus.org/plexus-classworlds/}Plexus Classworlds}},
+
+ * {{{./extension.html}extension descriptor}},
+
+ * <<<ExceptionHandler>>> component ({{{./apidocs/org/apache/maven/exception/ExceptionHandler.html}javadoc}}),
+ with its <<<DefaultExceptionHandler>>> implementation
+ ({{{./xref/org/apache/maven/exception/DefaultExceptionHandler.html}source}}), use to transform exception into useful end-user messages.
+
+* Toolchains
+
+ * {{{./toolchains.html}Toolchains descriptor reference}},
+
+ * public API for toolchains-aware plugins: <<<ToolchainManager>>> component ({{{./apidocs/org/apache/maven/toolchain/ToolchainManager.html}javadoc}})
+ with its <<<DefaultToolchainManager>>> implementation ({{{./xref/org/apache/maven/toolchain/DefaultToolchainManager.html}source}}),
+ to get selected <<<Toolchain>>> ({{{./apidocs/org/apache/maven/toolchain/Toolchain.html}javadoc}}) instance,
+
+ * internal <<<ToolchainManagerPrivate>>> component ({{{./apidocs/org/apache/maven/toolchain/ToolchainManagerPrivate.html}javadoc}})
+ with its <<<DefaultToolchainManagerPrivate>>> implementation ({{{./xref/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.html}source}}),
+ to manage toolchain selection,
+
+ * internal JDK toolchain implementation: <<<JavaToolchain>>> interface ({{{./apidocs/org/apache/maven/toolchain/java/JavaToolchain.html}javadoc}}),
+ with its <<<JavaToolchainImpl>>> implementation
+ ({{{./xref/org/apache/maven/toolchain/java/JavaToolchainImpl.html}source}}) and <<<JavaToolchainFactory>>>
+ factory ({{{./xref/org/apache/maven/toolchain/java/JavaToolchainFactory.html}source}}).
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/inheritance.apt b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/inheritance.apt
new file mode 100644
index 00000000..dbf0e2c2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/inheritance.apt
@@ -0,0 +1,100 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ Inheritance in Maven
+ -----
+ The Maven Team
+ -----
+
+Inheritance in Maven
+
+ In order the understand how inheritance works in Maven there are a few notions that you must be familiar with:
+
+ * The maven super model
+
+ * how parent poms are processed
+
+ * the order in which elements in the POM are overridden
+
+ * minimum element-set for a valid project pom
+
+
+Maven super model
+
+ Inheritance is recursive in Maven but there is a special model which is the implicit super parent in the lineage
+ of models you may specify:
+
+ all of the models that you specify are collected to produce a lineage and then the super model is place at
+ the top of that lineage to provide default values.
+
+ The super model is where we place all the values which we believe to be standard, values that can be shared and
+ utilized across all your maven projects.
+
++-----+
+ m0 <- m1 <- m2
++-----+
+
+ which is transformed into
+
++-----+
+ super model <- m0 <- m1 <- m2
++-----+
+
++-----+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId></groupId>
+ <artifactId></artifactId>
+ <version></version>
+ </parent>
+</project>
++-----+
+
+Extending the POM in the future
+
+ In order to anticipate changes in the structure of the POM as new releases of
+ maven occur, the maven inheritance model must be pinned against a particular
+ modelVersion. This is required so that a change from modelVersion 4.0.0 to
+ 4.1.0 doesn't cause compatibility problems with users who have not upgraded
+ their projects. It also allows for a certain amount of legacy support into the
+ future. Therefore, we should rename this file from pom.xml in the maven-core
+ jarfile to pom-4.0.0.xml (and successive revisions to the base pom made to
+ accommodate changes in the model will be named accordingly - 4.0.1, 4.0.2, ...).
+
+Minimum Element-Set for a Project POM
+
+ In order to furnish a basic set of information which we need to distinguish one
+ project from another, maven requires a minimum set of elements to be specified
+ in each project's pom.xml.
+
+ - [modelVersion] tells maven which version of the object model this project
+ is compliant with (to support future legacy concerns)
+
+ - [artifactId] tells maven what the artifact name is for this particular
+ project. Each project should have a distinct artifactId.
+
+ - [version] tells maven what release of this artifact we're trying to produce.
+ The fact that a project has a distinct pom.xml should indicate a separate
+ release cycle that is also distinct to that project, so a concrete version
+ declaration is required.
+
+ - [name] tells maven what the user-friendly name of this project is. The name
+ element is similar to artifactId in that it is a unique descriptor for
+ this and only this project, and therefore should be concretely defined.
+
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/lifecycles.apt.vm b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/lifecycles.apt.vm
new file mode 100644
index 00000000..3e47bc90
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/lifecycles.apt.vm
@@ -0,0 +1,49 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ Lifecycles Reference
+ -----
+ Hervé Boutemy
+ -----
+ 2013-08-02
+ -----
+
+Lifecycles Reference
+
+ Maven defines 3 lifecycles in <<<META-INF/plexus/components.xml>>>:
+
+%{toc|fromDepth=2}
+
+* <<<default>>> Lifecycle
+
+ <<<default>>> lifecycle is defined <<without>> any associated plugin.
+ Plugin bindings for this lifecycle are {{{./default-bindings.html}defined separately for every packaging}}:
+
+%{snippet|id=lifecycle|file=${project.basedir}/src/main/resources/META-INF/plexus/components.xml}
+
+* <<<clean>>> Lifecycle
+
+ <<<clean>>> lifecycle is defined directly with its plugin bindings.
+
+%{snippet|id=clean|file=${project.basedir}/src/main/resources/META-INF/plexus/components.xml}
+
+* <<<site>>> Lifecycle
+
+ <<<site>>> lifecycle is defined directly with its plugin bindings.
+
+%{snippet|id=site|file=${project.basedir}/src/main/resources/META-INF/plexus/components.xml}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/offline-mode.apt b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/offline-mode.apt
new file mode 100644
index 00000000..faec70fa
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/offline-mode.apt
@@ -0,0 +1,269 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ ---
+ Offline Mode Design
+ ---
+ John Casey
+ ---
+ 08-April-2005
+ ---
+
+Offline Mode Design
+
+* UPDATE: 18-April-2005
+
+ We cannot take the approach outlined below of detecting which remote
+ repositories are "really" offline, since offline mode is more of a behavior,
+ and this will lead to counter-intuitive results. A different feature may exist
+ unimplemented, which is to detect when the network is down and provide better
+ feedback for that case. However, when offline mode is declared, nothing
+ earmarked as remote should be accessed, regardless of whether it is actually
+ a physically local resource.
+
+ NOTE: One side-effect of this design change is that all offline-mode code can
+ be isolated to maven-core, maven-plugin-descriptor, and [possibly]
+ maven-artifact. Usage of maven-wagon will be determined by an offline-aware
+ manager.
+
+* Assumptions: What is Offline?
+
+ For the purposes of determining the areas sensitive to offline status,
+ it is definitely useful to define what the offline state really means.
+
+ [[1]] This is obvious, but the network/internet is unavailable.
+
+ [[2]] Localhost (127.0.0.1) may also be unavailable if the whole
+ network stack is offline.
+
+ [[3]] "Remote" repositories referenced using the file:// protocol may
+ be available. However, if that file:// url references a
+ file-share, as in the case of an NFS or SMB mount, that will
+ be unavailable.
+
+ So, offline mode has several implications, some of which may not be
+ altogether obvious:
+
+ * Localhost may be unavailable. Therefore, even locally installed
+ server processes which work by conversing over a port may fail.
+
+ * Not all "remote" repositories will fail. Specifically, if the remote
+ repo uses the file:// protocol, and it doesn't refer to a shared
+ filesystem, it will continue to be available.
+
+ The question remaining is: Which level of offline mode will we support? It
+ seems reasonable to assume that users will be able to tell when localhost is
+ not active (in most cases, localhost should be available, even if the rest of
+ the network is not). Therefore, let's concentrate on the state where no
+ network <beyond localhost> exists, and leave the more extreme state to users
+ to diagnose and correct as necessary.
+
+* Why is Offline Mode Important?
+
+ Offline mode is essential for breaking the requirement that m2 operate in a
+ network-connected environment. It means legitimizing a development environment
+ in which there is no network connection, and providing a robust m2 service
+ offering in such circumstances. Introduction of offline mode allows m2 to
+ anticipate the inevitable network failures that accompany being physically
+ disconnected from the network, and adjust it's behavior accordingly.
+
+ It is more than simply understanding that m2 cannot go and check for the
+ latest version of some snapshot artifact. If m2 is offline, SCM operations
+ cannot succeed; no artifact downloads can take place, regardless of whether
+ they are snapshot versions; artifact deployment cannot take place; certain
+ types of tests cannot be setup, since the container used to run them cannot be
+ reached or started.
+
+ All of these operations will produce their own unique errors in the absence of
+ a coordinated offline strategy. In addition, efforts to unite these failing
+ behaviors behind a consistent user interface is much, much more difficult if
+ the system can't tell whether it has access to the network required by these
+ operations.
+
+ Offline mode really means anticipating a lack of network connectivity, and as
+ a result turning off certain services provided by m2 and providing a coherent
+ way of predicting and reporting when network-related failures will take place.
+ It means warning users that since the network is missing, certain features and
+ operations will be unavailable, rather than simply waiting for those
+ operations to fail, then trying to help users decipher the error messages they
+ get as a result.
+
+* Implications for Resolution
+
+** Dependency Resolution
+
+ This one is obvious...we only have access to the repositories using
+ the file:// protocol and living on a truly local filesystem when
+ offline.
+
+** Plugin Resolution
+
+ This is similar to dependency resolution. Plugin repositories not
+ using file:// or not residing on a local (not shared) filesystem will
+ be unavailable.
+
+
+* Implications for Mojo Execution
+
+** Deployment mojos
+
+ The concept of deployment is dependent on the availability of a some
+ remote repository. Just as above, if that repository is not using
+ file:// (which is highly likely to be the case), or the repository is
+ not on a local filesystem, deployment will fail when offline.
+
+** Testing mojos
+
+ This can be a problem if the tests are more than simple unit tests;
+ that is, if they require configuration of a server process, and
+ subsequent testing in-container.
+
+ Since we're only going to concern ourselves with states where localhost is
+ still active, we only need to worry about this case when the server container
+ is <<not>> installed on localhost. This allows the popular pattern of starting
+ a server container in-JVM, running tests against it, and shutting it down.
+
+** SCM mojos
+
+ See below for discussion on SCM-related operations. Any mojo which
+ carries out some analysis or other interaction with a SCM system
+ will likely be unavailable when in offline mode.
+
+
+* Implications for Subsystems
+
+** Maven-Wagon
+
+ Parts of Wagon will continue to function normally. These include:
+
+ * The file wagon, provided the referenced location is on a local
+ filesystem.
+
+ It is not possible to determine whether a file-based location will
+ be available except on a case-by-case basis (or a root-url by
+ root-url basis). We may want to move the offline sensitivity entirely to
+ Maven-Artifact, below, so we can be smarter about testing filesystem-based
+ repositories, etc.
+
+ * If not otherwise specified, all other wagons are assumed to be
+ remote-only, and are therefore sensitive to offline mode.
+
+** Maven-Artifact
+
+ This is wholly dependent on Maven-Wagon, above.
+
+ We could possibly use a flag on a particular Wagon to see whether it supports
+ offline mode, and then test to see if the file-based basedir for an aritfact
+ repository works...if it doesn't work, we can mark that repository offline...
+
+ OTOH, all offline-mode checks can probably be run from Wagon-based APIs.
+
+** Maven-SCM
+
+ In all but trivial examples, SCM operations cannot complete without
+ having access to the versioning server. Therefore, it is assumed that
+ any SCM-related activity will be unavailable when m2 is in offline
+ mode.
+
+** Maven-Core
+
+ We'll examine the different parts of maven-core on a case-by-case
+ basis, below:
+
+*** DefaultLifecycleExecutor
+
+ When binding goals to the project's configured lifecycle, each mojo
+ descriptor should declare whether it requires online/offline status.
+ This value should be a java.lang.Boolean, so it can implement 3VL
+ (three value logic: yes, no, don't-care). The requiresOnline
+ field in the mojo descriptor has the following semantics:
+
+ [true] Online status is required for this mojo to function
+ correctly.
+
+ [false] <<(Default)>> Either status is acceptable for the mojo to
+ execute. It doesn't care.
+
+ The majority of mojos will leave the requiresOnline == false,
+ since online/offline status will be irrelevant, provided they have
+ access to their required artifacts and other classpath elements. In the case
+ of required artifacts and other classpath elemtents, this is assumed by the
+ mojo API to be in a correct state, and will be handled by the Wagon
+ modifications.
+
+
+* Implementation Notes
+
+** Accessibility of offline status
+
+ Offline status should be indicated in the MavenSettings instance, since it
+ can conceivably be set from either the settings.xml or the command-line.
+
+ In the event the '-o' switch is the impetus for setting offline mode, this
+ should result in modification of the active profile in the MavenSettings
+ instance, just as definition of the active profile from the command-line
+ should result in similar modification. This object is not meant to be
+ static within the build process, but rather to be setup as an aggregation of
+ all settings-related information passed into the system.
+
+** Control over downloads
+
+ Find the control point for m2 using maven-wagon. At this point, inject
+ a offline status parameter which is used when retrieving the specific Wagon.
+
+ If <<<offline == true>>>:
+
+ * If the wagon is not bound to "file://", then ignore the request and print
+ a debug message.
+
+ * If the wagon is bound to "file://" then:
+
+ Retrieve the file or base-url file to be "downloaded".
+
+ * If the file (or more usefully, the base-url file) exists, proceed.
+
+ * If the file (or base-url file) doesn't exist, assume that this location
+ is part of a file-share. Ignore the request and print a debug message
+ as above.
+
+** Control over mojos in the lifecycle
+
+ When binding a mojo to the project's lifecycle instance, check the mojo
+ descriptor's requiredConnectivity field.
+
+ * If <<<(offline == true) && (requiresOnline != true)>>>, bind
+ the mojo to the lifecycle.
+
+ In this case, the client is <<offline>>, and the mojo does not require
+ online status.
+
+ * If <<<(offline == false) && (requiresOnline == true)>>>, bind
+ the mojo to the lifecycle.
+
+ In this case, the client is <<online>>, and the mojo either requires
+ <<online>> status, or else doesn't care.
+
+ * Otherwise, don't bind the mojo. Log a debug message to indicate that it is
+ sensitive the the online state of the application, and that this state is
+ currently wrong for execution.
+
+ <<NOTE:>> Do we want to fail when we cannot bind a mojo to the lifecycle
+ because of offline/online status? That would probably indicate that the user
+ was trying to do something they cannot succeed at for now...so we probably
+ should throw an exception in this case.
+
+
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/plugin-execution-isolation.apt b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/plugin-execution-isolation.apt
new file mode 100644
index 00000000..983a9fde
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/plugin-execution-isolation.apt
@@ -0,0 +1,57 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ Maven plugins
+ -----
+ The Maven Team
+ -----
+
+Maven plugin execution isolation
+
+ Maven2 takes advantage of Plexus' ability to execute a component using a
+ ClassWorlds ClassRealm that is populated with the JAR containing the
+ component in question and all of its dependencies. Using ClassWorlds
+ notation for realms we have the following:
+
++-----+
+ [plexus.core]
+ ^
+ |
+ [plexus.core.maven]
+ ^ ^
+ | |
+[plugin0] [plugin1]
++-----+
+
+ The <<<plexus.core>>> realm contains the resources required to run any
+ plexus application; The <<<plexus.core.maven>>> realm contains all of the
+ resources required to run Maven. Each subseqent plugin realm contains the
+ JAR plugin as well as its dependencies. The realms noted above are setup
+ in a hierachical structure where the resources in the parent realms are
+ available but the <<realm is searched first before a search is made in
+ the parent realm>>.
+
+ Plugins are guaranteed to be provided the resources found in
+ <<<plexus.core>>> and <<<plexus.core.maven>>> realms at run-time if required.
+ Plugins can state compile-time dependencies on any of the resources found in
+ the core realms listed above and these dependencies will be included in the
+ plugin descriptor that is generated but when running within Maven these
+ resources will be filtered out. In other words these resources will not
+ be added the realm created for the plugins execution as they are provided
+ in the parent realms.
+
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/scripting-support/marmalade-support.apt b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/scripting-support/marmalade-support.apt
new file mode 100644
index 00000000..7a809662
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/scripting-support/marmalade-support.apt
@@ -0,0 +1,196 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ ---
+ Marmalade Mojo Support - Notes
+ ---
+ John Casey
+ ---
+ 07-Feb-2005
+ ---
+
+Marmalade Support
+
+*Abstract
+
+ This document will track the design and implementation issues involved in
+ adding support to m2 for marmalade-based mojos.
+
+*Design Notes
+
+ [[1]] <<Marmalade mojo descriptor specification.>>
+
+ As in all mojo specifications, it is ideal that the descriptor for
+ a marmalade-based mojo be inline with the source code. This centralizes
+ all maintenance related to a single mojo to a single point of maintenance.
+
+ The following is what I'm thinking as of now:
+
+ - a marmalade-based mojo should look something like:
+
++---+
+ <mojo xmlns="m2:mojo" xmlns:marmalade-control="marmalade:marmalade-control" marmalade-control:el="none">
+
+ <metadata>
+ <id>mmld</id>
+ <name>mmldCompile</name>
+ <lifecyclePhase>compile</lifecyclePhase>
+ <description>Used to compile marmalade scripts into java beans.</description>
+
+ <requiresDependencyResolution/>
+ <instantiationStrategy/>
+ <executionStrategy/>
+
+ <parameters>
+
+ <parameter>
+ <name>classpath</name>
+ <description>The compilation classpath</description>
+ <type>java.util.List</type>
+ <expression>#pom.artifacts</expression>
+
+ <required/>
+ <validator/>
+ <default/>
+
+ </parameter>
+
+ </parameters>
+
+ </metadata>
+
+ <execute>
+ <!-- Do some stuff. -->
+ </execute>
+
+ </mojo>
++---+
+[NOTE] All empty elements above signify optional elements, usage specification.
+
+ [[2]] <<Marmalade mojo packager.>>
+
+ The marmalade mojo packager will:
+
+ [[a]] Locate all *.mmld files within the scripts directory of the project.
+
+ The scripts directory should be tied to the script language within
+ the POM. Until we have multiple language support in the POM, we'll
+ use something like: <<<xpath(build/marmaladeSourceDirectory)>>>.
+
+ [[b]] For each script found:
+
+ [[i]] Execute the script with "gatherMetadata=true" in the context.
+
+ [[ii]] Retrieve the mojo descriptor from the resulting "metadata"
+ variable in the context.
+
+ [[iii]] Cache the mojo descriptor in aggregator for subsequent
+ output to plugin descriptor file.
+
+ [[c]] Copy all scripts to the target directory. Preserve relative paths.
+
+ [[d]] <<Process Disjoint:>> <Allow other mojo-descriptor collectors to
+ run, aggregating their descriptors in similar fashion to [b.iii]
+ above.>
+
+ [[e]] Use the project's dependencies and other info to form the plugin
+ descriptor's header (non-mojo-specific info).
+
+ [[f]] Use the PluginGenerator from maven-plugin-tools to generate a
+ META-INF/plexus/plugin.xml to the target directory.
+
+ [[g]] Continue with lifecycle.
+
+ This may include compilation of java helper classes, etc. and
+ plugin-artifact packaging, presumably via 'jar:jar' or similar.
+
+ [[3]] <<Marmalade mojo loader.>>
+
+ The marmalade mojo loader will:
+
+ [[a]] Retrieve the implementation spec (this is the path of the script,
+ relative to the root of the plugin filesystem...jar, etc.) to
+ $path.
+
+ [[b]] Use the context classloader to retrieve a reader to $path.
+
+ [[c]] Build the ScriptBuilder corresponding to the script.
+
+ [[d]] Create a new MarmaladeMojo instance which adapts the mojo calling
+ semantics to the creation/execution of a marmalade script.
+
+ Execution involves:
+
+ [[i]] Creating a new MarmaladeScript instance.
+
+ [[ii]] Creating an execution context which references all I/O
+ from the main Maven execution thread, and embeds:
+
+ - #request == MavenExecutionRequest
+
+ - #response == MavenExecutionResponse
+
+ - Any globally configured environmental constraints, such
+ as a global preserve-whitespace setting
+
+ [[iii]] Execution of the script using the execution context.
+
+ [[iv]] Export of the resulting context, minus any surviving input
+ variables, to the MavenExecutionResponse's out-params.
+
+*Implementation Issues
+
+ [[1]] How do we make Maven smart enough to switch loader implementations based
+ on some sub-type of maven-plugin?
+
+ This is important, since the default mojo loader will not be smart
+ enough to do the job, and embedding this behavior in that loader is not
+ scalable or extensible enough to accommodate future expansion into the
+ realms of jython, groovy, etc...
+
+ <<UPDATE:07-FEB-2005>>
+
+ We'll plan on using some sort of language specification in the mojo
+ descriptor to determine which mojo loader to use, then we'll populate
+ the PluginLoader/PluginManager with a map of known languages->loaders.
+
+ [[2]] How do we make the plugin:install process smart enough to switch
+ generator implementations based on some sub-type of maven-plugin?
+
+ This is closely related to [1] above.
+
+ <<UPDATE:07-FEB-2005>>
+
+ See update in [3].
+
+ [[3]] Do we want to allow mixed-bag plugin implementations?
+
+ These might include a mix of standard-java and marmalade mojos. It
+ strikes me that many marmalade-based mojos may use beans/tags that are
+ actually adapter classes for other third-party APIs (why they wouldn't
+ implement everything as java mojos in this cases is beyond me). If they
+ have java source inside the plugin source directory, we should probably
+ compile it and bundle it with the plugin scripts; but what if this source
+ also has mojo annotations? This will have implications for [1] and [2]
+ above.
+
+ <<UPDATE:07-FEB-2005>>
+
+ We will plan on allowing this sort of implementation, and simply start
+ by applying all known generators which have a source directory set in
+ the POM (or later, have a <language/> section, maybe). At any rate,
+ helper classes will be allowed for script-based mojos.
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/resources/design/2.1-lifecycle-refactor-class-diagram.png b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/resources/design/2.1-lifecycle-refactor-class-diagram.png
new file mode 100755
index 00000000..37d666c3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/resources/design/2.1-lifecycle-refactor-class-diagram.png
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/resources/design/2.1-lifecycle-refactor-sequence-diagram.png b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/resources/design/2.1-lifecycle-refactor-sequence-diagram.png
new file mode 100755
index 00000000..30f19553
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/resources/design/2.1-lifecycle-refactor-sequence-diagram.png
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/resources/design/2.1-lifecycle-refactor.graffle b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/resources/design/2.1-lifecycle-refactor.graffle
new file mode 100755
index 00000000..722bc031
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/resources/design/2.1-lifecycle-refactor.graffle
@@ -0,0 +1,4024 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CreationDate</key>
+ <string>2007-03-15 15:23:17 -0400</string>
+ <key>Creator</key>
+ <string>John.alt</string>
+ <key>GraphDocumentVersion</key>
+ <integer>5</integer>
+ <key>GuidesLocked</key>
+ <string>NO</string>
+ <key>GuidesVisible</key>
+ <string>YES</string>
+ <key>ImageCounter</key>
+ <integer>1</integer>
+ <key>LinksVisible</key>
+ <string>NO</string>
+ <key>MagnetsVisible</key>
+ <string>NO</string>
+ <key>MasterSheets</key>
+ <array>
+ <dict>
+ <key>ActiveLayerIndex</key>
+ <integer>0</integer>
+ <key>AutoAdjust</key>
+ <true/>
+ <key>CanvasColor</key>
+ <dict>
+ <key>w</key>
+ <string>1</string>
+ </dict>
+ <key>CanvasOrigin</key>
+ <string>{0, 0}</string>
+ <key>CanvasScale</key>
+ <real>1</real>
+ <key>ColumnAlign</key>
+ <integer>1</integer>
+ <key>ColumnSpacing</key>
+ <real>36</real>
+ <key>DisplayScale</key>
+ <string>1 in = 1 in</string>
+ <key>GraphicsList</key>
+ <array/>
+ <key>GridInfo</key>
+ <dict/>
+ <key>HPages</key>
+ <integer>1</integer>
+ <key>IsPalette</key>
+ <string>NO</string>
+ <key>KeepToScale</key>
+ <false/>
+ <key>Layers</key>
+ <array>
+ <dict>
+ <key>Lock</key>
+ <string>NO</string>
+ <key>Name</key>
+ <string>Layer 1</string>
+ <key>Print</key>
+ <string>YES</string>
+ <key>View</key>
+ <string>YES</string>
+ </dict>
+ </array>
+ <key>LayoutInfo</key>
+ <dict/>
+ <key>Orientation</key>
+ <integer>2</integer>
+ <key>OutlineStyle</key>
+ <string>Basic</string>
+ <key>RowAlign</key>
+ <integer>1</integer>
+ <key>RowSpacing</key>
+ <real>36</real>
+ <key>SheetTitle</key>
+ <string>Master 1</string>
+ <key>UniqueID</key>
+ <integer>1</integer>
+ <key>VPages</key>
+ <integer>1</integer>
+ </dict>
+ </array>
+ <key>ModificationDate</key>
+ <string>2007-03-15 16:57:24 -0400</string>
+ <key>Modifier</key>
+ <string>John.alt</string>
+ <key>NotesVisible</key>
+ <string>NO</string>
+ <key>OriginVisible</key>
+ <string>NO</string>
+ <key>PageBreaks</key>
+ <string>YES</string>
+ <key>PrintInfo</key>
+ <dict>
+ <key>NSBottomMargin</key>
+ <array>
+ <string>float</string>
+ <string>0</string>
+ </array>
+ <key>NSLeftMargin</key>
+ <array>
+ <string>float</string>
+ <string>0</string>
+ </array>
+ <key>NSOrientation</key>
+ <array>
+ <string>int</string>
+ <string>1</string>
+ </array>
+ <key>NSPaperSize</key>
+ <array>
+ <string>size</string>
+ <string>{792, 612}</string>
+ </array>
+ <key>NSRightMargin</key>
+ <array>
+ <string>float</string>
+ <string>0</string>
+ </array>
+ <key>NSTopMargin</key>
+ <array>
+ <string>float</string>
+ <string>0</string>
+ </array>
+ </dict>
+ <key>ReadOnly</key>
+ <string>NO</string>
+ <key>Sheets</key>
+ <array>
+ <dict>
+ <key>ActiveLayerIndex</key>
+ <integer>0</integer>
+ <key>AutoAdjust</key>
+ <true/>
+ <key>CanvasColor</key>
+ <dict>
+ <key>w</key>
+ <string>1</string>
+ </dict>
+ <key>CanvasOrigin</key>
+ <string>{0, 0}</string>
+ <key>CanvasScale</key>
+ <real>1</real>
+ <key>ColumnAlign</key>
+ <integer>1</integer>
+ <key>ColumnSpacing</key>
+ <real>36</real>
+ <key>DisplayScale</key>
+ <string>1 in = 1 in</string>
+ <key>GraphicsList</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{607.473, 151.036}, {112, 28}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>86</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>72</integer>
+ <key>Position</key>
+ <real>0.31921392679214478</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica-Oblique;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\i\fs24 \cf0 deprecated,\
+marked for refactor}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{584.742, 252.673}, {104, 28}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>85</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>84</integer>
+ <key>Position</key>
+ <real>0.45520344376564026</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica-Oblique;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\i\fs24 \cf0 if binding spec \
+uses plugin prefix}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>39</integer>
+ </dict>
+ <key>ID</key>
+ <integer>84</integer>
+ <key>Points</key>
+ <array>
+ <string>{623.954, 304}</string>
+ <string>{652.046, 222}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HopLines</key>
+ <true/>
+ <key>HopType</key>
+ <integer>1</integer>
+ <key>Pattern</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>51</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>51</integer>
+ </dict>
+ <key>ID</key>
+ <integer>83</integer>
+ <key>Points</key>
+ <array>
+ <string>{488, 317}</string>
+ <string>{555, 317}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HopLines</key>
+ <true/>
+ <key>HopType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>48</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>54</integer>
+ </dict>
+ <key>ID</key>
+ <integer>82</integer>
+ <key>Points</key>
+ <array>
+ <string>{453.532, 330}</string>
+ <string>{575.468, 366}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HopLines</key>
+ <true/>
+ <key>HopType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>48</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>42</integer>
+ </dict>
+ <key>ID</key>
+ <integer>81</integer>
+ <key>Points</key>
+ <array>
+ <string>{83.5916, 196}</string>
+ <string>{84, 138}</string>
+ <string>{256, 138}</string>
+ <string>{466, 138}</string>
+ <string>{656, 138}</string>
+ <string>{671.008, 99}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HopLines</key>
+ <true/>
+ <key>HopType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>33</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>39</integer>
+ </dict>
+ <key>ID</key>
+ <integer>80</integer>
+ <key>Points</key>
+ <array>
+ <string>{83.6857, 196}</string>
+ <string>{84, 174}</string>
+ <string>{256, 174}</string>
+ <string>{466, 174}</string>
+ <string>{598, 198.252}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HopLines</key>
+ <true/>
+ <key>HopType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>33</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>45</integer>
+ </dict>
+ <key>ID</key>
+ <integer>66</integer>
+ <key>Points</key>
+ <array>
+ <string>{142, 221.044}</string>
+ <string>{195, 231.956}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HopLines</key>
+ <true/>
+ <key>HopType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>33</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>48</integer>
+ </dict>
+ <key>ID</key>
+ <integer>79</integer>
+ <key>Points</key>
+ <array>
+ <string>{106.976, 222}</string>
+ <string>{237, 294}</string>
+ <string>{331, 306.533}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HopLines</key>
+ <true/>
+ <key>HopType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>33</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>39</integer>
+ </dict>
+ <key>ID</key>
+ <integer>78</integer>
+ <key>Points</key>
+ <array>
+ <string>{419.845, 304}</string>
+ <string>{466, 246}</string>
+ <string>{598, 220.362}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HopLines</key>
+ <true/>
+ <key>HopType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>48</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>39</integer>
+ </dict>
+ <key>ID</key>
+ <integer>77</integer>
+ <key>Points</key>
+ <array>
+ <string>{254.456, 231}</string>
+ <string>{256, 210}</string>
+ <string>{466, 210}</string>
+ <string>{598, 209.307}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HopLines</key>
+ <true/>
+ <key>HopType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>45</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>42</integer>
+ </dict>
+ <key>ID</key>
+ <integer>72</integer>
+ <key>Points</key>
+ <array>
+ <string>{658.562, 196}</string>
+ <string>{673.948, 99}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>LineType</key>
+ <integer>1</integer>
+ <key>Pattern</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>39</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>48</integer>
+ </dict>
+ <key>ID</key>
+ <integer>71</integer>
+ <key>Points</key>
+ <array>
+ <string>{281.281, 257}</string>
+ <string>{381.719, 304}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>LineType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>45</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>TableGroup</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{524, 366}, {191, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>55</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>GradientAngle</key>
+ <real>304</real>
+ <key>GradientCenter</key>
+ <string>{-0.294118, -0.264706}</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 LegacyLifecycleMappingParser}</string>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{524, 380}, {191, 12}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>56</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>GradientAngle</key>
+ <real>304</real>
+ <key>GradientCenter</key>
+ <string>{-0.294118, -0.264706}</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ </array>
+ <key>GridH</key>
+ <array>
+ <integer>55</integer>
+ <integer>56</integer>
+ <array/>
+ </array>
+ <key>GroupConnect</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>54</integer>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>TableGroup</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{555, 304}, {129, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>52</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>GradientAngle</key>
+ <real>304</real>
+ <key>GradientCenter</key>
+ <string>{-0.294118, -0.264706}</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 MojoBindingFactory}</string>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{555, 318}, {129, 12}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>53</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>GradientAngle</key>
+ <real>304</real>
+ <key>GradientCenter</key>
+ <string>{-0.294118, -0.264706}</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ </array>
+ <key>GridH</key>
+ <array>
+ <integer>52</integer>
+ <integer>53</integer>
+ <array/>
+ </array>
+ <key>GroupConnect</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>51</integer>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>TableGroup</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{331, 304}, {157, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>49</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>GradientAngle</key>
+ <real>304</real>
+ <key>GradientCenter</key>
+ <string>{-0.294118, -0.264706}</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 LifecycleBindingManager}</string>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{331, 318}, {157, 12}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>50</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>GradientAngle</key>
+ <real>304</real>
+ <key>GradientCenter</key>
+ <string>{-0.294118, -0.264706}</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ </array>
+ <key>GridH</key>
+ <array>
+ <integer>49</integer>
+ <integer>50</integer>
+ <array/>
+ </array>
+ <key>GroupConnect</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>48</integer>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>TableGroup</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{195, 231}, {117, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>46</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>GradientAngle</key>
+ <real>304</real>
+ <key>GradientCenter</key>
+ <string>{-0.294118, -0.264706}</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 BuildPlanner}</string>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{195, 245}, {117, 12}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>47</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>GradientAngle</key>
+ <real>304</real>
+ <key>GradientCenter</key>
+ <string>{-0.294118, -0.264706}</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ </array>
+ <key>GridH</key>
+ <array>
+ <integer>46</integer>
+ <integer>47</integer>
+ <array/>
+ </array>
+ <key>GroupConnect</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>45</integer>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>TableGroup</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{617.51, 73}, {117, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>43</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>GradientAngle</key>
+ <real>304</real>
+ <key>GradientCenter</key>
+ <string>{-0.294118, -0.264706}</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 PluginManager}</string>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{617.51, 87}, {117, 12}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>44</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>GradientAngle</key>
+ <real>304</real>
+ <key>GradientCenter</key>
+ <string>{-0.294118, -0.264706}</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ </array>
+ <key>GridH</key>
+ <array>
+ <integer>43</integer>
+ <integer>44</integer>
+ <array/>
+ </array>
+ <key>GroupConnect</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>42</integer>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>TableGroup</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{598, 196}, {117, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>40</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>GradientAngle</key>
+ <real>304</real>
+ <key>GradientCenter</key>
+ <string>{-0.294118, -0.264706}</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 PluginLoader}</string>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{598, 210}, {117, 12}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>41</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>GradientAngle</key>
+ <real>304</real>
+ <key>GradientCenter</key>
+ <string>{-0.294118, -0.264706}</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ </array>
+ <key>GridH</key>
+ <array>
+ <integer>40</integer>
+ <integer>41</integer>
+ <array/>
+ </array>
+ <key>GroupConnect</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>39</integer>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>TableGroup</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{25, 196}, {117, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>34</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>GradientAngle</key>
+ <real>304</real>
+ <key>GradientCenter</key>
+ <string>{-0.294118, -0.264706}</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 LifecycleExecutor}</string>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{25, 210}, {117, 12}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>38</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>GradientAngle</key>
+ <real>304</real>
+ <key>GradientCenter</key>
+ <string>{-0.294118, -0.264706}</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ </array>
+ <key>GridH</key>
+ <array>
+ <integer>34</integer>
+ <integer>38</integer>
+ <array/>
+ </array>
+ <key>GroupConnect</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>33</integer>
+ </dict>
+ </array>
+ <key>GridInfo</key>
+ <dict/>
+ <key>HPages</key>
+ <integer>1</integer>
+ <key>IsPalette</key>
+ <string>NO</string>
+ <key>KeepToScale</key>
+ <false/>
+ <key>Layers</key>
+ <array>
+ <dict>
+ <key>Lock</key>
+ <string>NO</string>
+ <key>Name</key>
+ <string>Layer 1</string>
+ <key>Print</key>
+ <string>YES</string>
+ <key>View</key>
+ <string>YES</string>
+ </dict>
+ </array>
+ <key>LayoutInfo</key>
+ <dict>
+ <key>ChildOrdering</key>
+ <integer>0</integer>
+ <key>HierarchicalOrientation</key>
+ <integer>0</integer>
+ </dict>
+ <key>MasterSheet</key>
+ <string>Master 1</string>
+ <key>Orientation</key>
+ <integer>2</integer>
+ <key>OutlineStyle</key>
+ <string>Basic</string>
+ <key>RowAlign</key>
+ <integer>1</integer>
+ <key>RowSpacing</key>
+ <real>36</real>
+ <key>SheetTitle</key>
+ <string>Canvas 1</string>
+ <key>UniqueID</key>
+ <integer>1</integer>
+ <key>VPages</key>
+ <integer>1</integer>
+ </dict>
+ <dict>
+ <key>ActiveLayerIndex</key>
+ <integer>0</integer>
+ <key>AutoAdjust</key>
+ <true/>
+ <key>CanvasColor</key>
+ <dict>
+ <key>w</key>
+ <string>1</string>
+ </dict>
+ <key>CanvasOrigin</key>
+ <string>{0, 0}</string>
+ <key>CanvasScale</key>
+ <real>1</real>
+ <key>ColumnAlign</key>
+ <integer>1</integer>
+ <key>ColumnSpacing</key>
+ <real>36</real>
+ <key>DisplayScale</key>
+ <string>1 in = 1 in</string>
+ <key>GraphicsList</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{521.5, 182.853}, {75, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>126</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 loadPlugin()}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{437, 221.123}, {92, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>125</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>124</integer>
+ <key>Offset</key>
+ <real>18.181819915771484</real>
+ <key>Position</key>
+ <real>0.55852556228637695</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural
+
+\f0\fs24 \cf0 binding, project}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>123</integer>
+ </dict>
+ <key>ID</key>
+ <integer>124</integer>
+ <key>Points</key>
+ <array>
+ <string>{398, 209.12}</string>
+ <string>{550.5, 210.592}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HeadScale</key>
+ <real>1.4285709857940674</real>
+ <key>TailArrow</key>
+ <string>StickArrow</string>
+ <key>TailScale</key>
+ <real>1.5</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>79</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{550.5, 203.842}, {17, 27}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>123</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 0.5}</string>
+ <string>{1, -0.5}</string>
+ <string>{-1, 0.5}</string>
+ <string>{-1, -0.5}</string>
+ <string>{0.5, 1}</string>
+ <string>{-0.5, 1}</string>
+ <string>{0.5, -1}</string>
+ <string>{-0.5, -1}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{521.5, 114.705}, {75, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>122</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 loadPlugin()}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{436.814, 155.115}, {92, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>121</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>120</integer>
+ <key>Offset</key>
+ <real>18.181819915771484</real>
+ <key>Position</key>
+ <real>0.55852556228637695</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural
+
+\f0\fs24 \cf0 binding, project}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>119</integer>
+ </dict>
+ <key>ID</key>
+ <integer>120</integer>
+ <key>Points</key>
+ <array>
+ <string>{397.5, 143.273}</string>
+ <string>{550.5, 144.455}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HeadScale</key>
+ <real>1.4285709857940674</real>
+ <key>TailArrow</key>
+ <string>StickArrow</string>
+ <key>TailScale</key>
+ <real>1.5</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>73</integer>
+ <key>Info</key>
+ <integer>4</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{550.5, 137.705}, {17, 27}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>119</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 0.5}</string>
+ <string>{1, -0.5}</string>
+ <string>{-1, 0.5}</string>
+ <string>{-1, -0.5}</string>
+ <string>{0.5, 1}</string>
+ <string>{-0.5, 1}</string>
+ <string>{0.5, -1}</string>
+ <string>{-0.5, -1}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{26, 636}, {131, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>118</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural
+
+\f0\fs24 \cf0 foreach binding in plan}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>4</integer>
+ <key>Info</key>
+ <integer>5</integer>
+ </dict>
+ <key>ID</key>
+ <integer>117</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <true/>
+ <key>OrthogonalBarPosition</key>
+ <real>19.371429443359375</real>
+ <key>Points</key>
+ <array>
+ <string>{75.5, 478}</string>
+ <string>{26, 482}</string>
+ <string>{26, 575}</string>
+ <string>{79.125, 616}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>HeadScale</key>
+ <real>0.86000001430511475</real>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>FilledArrow</string>
+ <key>TailScale</key>
+ <real>0.85714292526245117</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>4</integer>
+ <key>Info</key>
+ <integer>1</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{310.653, 581.444}, {179, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>116</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>115</integer>
+ <key>Offset</key>
+ <real>18.181819915771484</real>
+ <key>Position</key>
+ <real>0.52437615394592285</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural
+
+\f0\fs24 \cf0 mojoExecution, project, session}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>113</integer>
+ <key>Info</key>
+ <integer>2</integer>
+ </dict>
+ <key>ID</key>
+ <integer>115</integer>
+ <key>Points</key>
+ <array>
+ <string>{90, 570}</string>
+ <string>{681.5, 570.5}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HeadScale</key>
+ <real>1.4285709857940674</real>
+ <key>TailArrow</key>
+ <string>StickArrow</string>
+ <key>TailScale</key>
+ <real>1.5</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>4</integer>
+ <key>Info</key>
+ <integer>12</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{646.5, 539}, {87, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>114</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>111</integer>
+ <key>Position</key>
+ <real>0.8310316801071167</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 executeMojo()}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{681.5, 559}, {17, 46}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>113</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 0.5}</string>
+ <string>{1, -0.5}</string>
+ <string>{-1, 0.5}</string>
+ <string>{-1, -0.5}</string>
+ <string>{0.5, 1}</string>
+ <string>{-0.5, 1}</string>
+ <string>{0.5, -1}</string>
+ <string>{-0.5, -1}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>Group</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>111</integer>
+ <key>Points</key>
+ <array>
+ <string>{690, 34.5}</string>
+ <string>{690, 650}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>HeadScale</key>
+ <real>1.4285709857940674</real>
+ <key>Pattern</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ <key>TailScale</key>
+ <real>0.5</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>112</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{636, 20}, {108, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>112</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 \ul \ulc0 PluginManager}</string>
+ </dict>
+ </dict>
+ </array>
+ <key>ID</key>
+ <integer>110</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{287.086, 525.522}, {92, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>109</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>108</integer>
+ <key>Offset</key>
+ <real>18.181819915771484</real>
+ <key>Position</key>
+ <real>0.52776741981506348</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural
+
+\f0\fs24 \cf0 binding, project}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>106</integer>
+ <key>Info</key>
+ <integer>2</integer>
+ </dict>
+ <key>ID</key>
+ <integer>108</integer>
+ <key>Points</key>
+ <array>
+ <string>{90, 515}</string>
+ <string>{550.5, 513.75}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HeadScale</key>
+ <real>1.4285709857940674</real>
+ <key>TailArrow</key>
+ <string>StickArrow</string>
+ <key>TailScale</key>
+ <real>1.5</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>4</integer>
+ <key>Info</key>
+ <integer>3</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{521.5, 485}, {75, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>107</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 loadPlugin()}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{550.5, 507}, {17, 27}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>106</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 0.5}</string>
+ <string>{0.5, -0.25}</string>
+ <string>{-1, 0.5}</string>
+ <string>{-1, -0.5}</string>
+ <string>{0.5, 1}</string>
+ <string>{-0.5, 1}</string>
+ <string>{0.5, -1}</string>
+ <string>{-0.5, -1}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{130.5, 275}, {33, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>105</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural
+
+\f0\fs24 \cf0 plan}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>4</integer>
+ </dict>
+ <key>ID</key>
+ <integer>66</integer>
+ <key>Points</key>
+ <array>
+ <string>{205.5, 270}</string>
+ <string>{86.375, 270}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HopLines</key>
+ <true/>
+ <key>HopType</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>19</integer>
+ <key>Info</key>
+ <integer>16</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{521.5, 302}, {75, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>104</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 loadPlugin()}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{349.413, 453.786}, {92, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>103</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>102</integer>
+ <key>Offset</key>
+ <real>18.181819915771484</real>
+ <key>Position</key>
+ <real>0.52776741981506348</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural
+
+\f0\fs24 \cf0 binding, project}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>101</integer>
+ </dict>
+ <key>ID</key>
+ <integer>102</integer>
+ <key>Points</key>
+ <array>
+ <string>{222, 443}</string>
+ <string>{550.5, 442.25}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HeadScale</key>
+ <real>1.4285709857940674</real>
+ <key>TailArrow</key>
+ <string>StickArrow</string>
+ <key>TailScale</key>
+ <real>1.5</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>86</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{550.5, 422}, {17, 27}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>101</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 0.5}</string>
+ <string>{0.5, -0.25}</string>
+ <string>{-1, 0.5}</string>
+ <string>{-1, -0.5}</string>
+ <string>{0.5, 1}</string>
+ <string>{-0.5, 1}</string>
+ <string>{0.5, -1}</string>
+ <string>{-0.5, -1}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{521.5, 396.749}, {75, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>100</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>93</integer>
+ <key>Position</key>
+ <real>0.59991699457168579</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 loadPlugin()}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{349.564, 356.057}, {92, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>99</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>98</integer>
+ <key>Offset</key>
+ <real>18.181819915771484</real>
+ <key>Position</key>
+ <real>0.52776741981506348</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural
+
+\f0\fs24 \cf0 binding, project}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>95</integer>
+ </dict>
+ <key>ID</key>
+ <integer>98</integer>
+ <key>Points</key>
+ <array>
+ <string>{222.5, 344.456}</string>
+ <string>{550.5, 345.25}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HeadScale</key>
+ <real>1.4285709857940674</real>
+ <key>TailArrow</key>
+ <string>StickArrow</string>
+ <key>TailScale</key>
+ <real>1.5</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>83</integer>
+ <key>Info</key>
+ <integer>9</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>86</integer>
+ <key>Info</key>
+ <integer>3</integer>
+ </dict>
+ <key>ID</key>
+ <integer>97</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <true/>
+ <key>OrthogonalBarPosition</key>
+ <real>-1</real>
+ <key>Points</key>
+ <array>
+ <string>{222.5, 254.5}</string>
+ <string>{309.5, 254}</string>
+ <string>{327, 344}</string>
+ <string>{222.5, 454.079}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>HeadScale</key>
+ <real>0.86000001430511475</real>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>StickArrow</string>
+ <key>TailScale</key>
+ <real>0.85714292526245117</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>19</integer>
+ <key>Info</key>
+ <integer>15</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>83</integer>
+ <key>Info</key>
+ <integer>3</integer>
+ </dict>
+ <key>ID</key>
+ <integer>96</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <true/>
+ <key>OrthogonalBarPosition</key>
+ <real>-1</real>
+ <key>Points</key>
+ <array>
+ <string>{222, 237}</string>
+ <string>{295.5, 237}</string>
+ <string>{295.5, 337}</string>
+ <string>{222.5, 356.792}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>HeadScale</key>
+ <real>0.86000001430511475</real>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>StickArrow</string>
+ <key>TailScale</key>
+ <real>0.85714292526245117</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>19</integer>
+ <key>Info</key>
+ <integer>14</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{550.5, 325}, {17, 27}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>95</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 0.5}</string>
+ <string>{1, -0.5}</string>
+ <string>{-1, 0.5}</string>
+ <string>{-1, -0.5}</string>
+ <string>{0.5, 1}</string>
+ <string>{-0.5, 1}</string>
+ <string>{0.5, -1}</string>
+ <string>{-0.5, -1}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>Group</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>93</integer>
+ <key>Points</key>
+ <array>
+ <string>{559, 34.5}</string>
+ <string>{559, 650}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>HeadScale</key>
+ <real>1.4285709857940674</real>
+ <key>Pattern</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ <key>TailScale</key>
+ <real>0.5</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>94</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{505, 20}, {108, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>94</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 \ul \ulc0 PluginLoader}</string>
+ </dict>
+ </dict>
+ </array>
+ <key>ID</key>
+ <integer>92</integer>
+ </dict>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>19</integer>
+ <key>Info</key>
+ <integer>13</integer>
+ </dict>
+ <key>ID</key>
+ <integer>91</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <true/>
+ <key>OrthogonalBarPosition</key>
+ <real>-1</real>
+ <key>Points</key>
+ <array>
+ <string>{222.5, 426.798}</string>
+ <string>{321, 420}</string>
+ <string>{301, 249}</string>
+ <string>{222.5, 248.833}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>HeadScale</key>
+ <real>0.86000001430511475</real>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>FilledArrow</string>
+ <key>TailScale</key>
+ <real>0.85714292526245117</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>86</integer>
+ <key>Info</key>
+ <integer>4</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>19</integer>
+ <key>Info</key>
+ <integer>12</integer>
+ </dict>
+ <key>ID</key>
+ <integer>10</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <true/>
+ <key>OrthogonalBarPosition</key>
+ <real>-1</real>
+ <key>Points</key>
+ <array>
+ <string>{222.5, 330.264}</string>
+ <string>{288.5, 330}</string>
+ <string>{288.5, 230}</string>
+ <string>{222.5, 230}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>HeadScale</key>
+ <real>0.86000001430511475</real>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>FilledArrow</string>
+ <key>TailScale</key>
+ <real>0.85714292526245117</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>83</integer>
+ <key>Info</key>
+ <integer>4</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{132.5, 396.158}, {163, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>87</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 addReportingPlanModifiers()}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{205.5, 413.158}, {17, 54.5618}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>86</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 0.5}</string>
+ <string>{1, -0.5}</string>
+ <string>{-1, 0.5}</string>
+ <string>{-1, -0.5}</string>
+ <string>{0.5, 1}</string>
+ <string>{-0.5, 1}</string>
+ <string>{0.5, -1}</string>
+ <string>{-0.5, -1}</string>
+ <string>{-0.529412, 0.0497093}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{139.5, 297.124}, {149, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>84</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>17</integer>
+ <key>Position</key>
+ <real>0.43805667757987976</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 addForkedPlanModifiers()}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{205.5, 317}, {17, 53.056}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>83</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 0.5}</string>
+ <string>{1, -0.5}</string>
+ <string>{-1, 0.5}</string>
+ <string>{-1, -0.5}</string>
+ <string>{0.5, 1}</string>
+ <string>{-0.5, 1}</string>
+ <string>{0.5, -1}</string>
+ <string>{-0.5, -1}</string>
+ <string>{-0.529412, 0.0185184}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{305.436, 220.259}, {47, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>82</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>81</integer>
+ <key>Offset</key>
+ <real>18.181819915771484</real>
+ <key>Position</key>
+ <real>0.67475664615631104</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural
+
+\f0\fs24 \cf0 project}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>79</integer>
+ <key>Info</key>
+ <integer>2</integer>
+ </dict>
+ <key>ID</key>
+ <integer>81</integer>
+ <key>Points</key>
+ <array>
+ <string>{222, 209}</string>
+ <string>{380.5, 209.115}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HeadScale</key>
+ <real>1.4285709857940674</real>
+ <key>TailArrow</key>
+ <string>StickArrow</string>
+ <key>TailScale</key>
+ <real>1.5</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>19</integer>
+ <key>Info</key>
+ <integer>3</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{311.5, 120.556}, {155, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>80</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 getBindingsForPackaging()}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{380.5, 203.842}, {17, 21.0909}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>79</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 0.5}</string>
+ <string>{1, -0.5}</string>
+ <string>{-1, 0.5}</string>
+ <string>{-1, -0.5}</string>
+ <string>{0.5, 1}</string>
+ <string>{-0.5, 1}</string>
+ <string>{0.5, -1}</string>
+ <string>{-0.5, -1}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{260.247, 156.369}, {47, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>76</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>75</integer>
+ <key>Offset</key>
+ <real>18.181819915771484</real>
+ <key>Position</key>
+ <real>0.38291174173355103</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural
+
+\f0\fs24 \cf0 project}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>75</integer>
+ <key>Points</key>
+ <array>
+ <string>{222.5, 145.7}</string>
+ <string>{382.054, 144.364}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HeadScale</key>
+ <real>1.4285709857940674</real>
+ <key>TailArrow</key>
+ <string>StickArrow</string>
+ <key>TailScale</key>
+ <real>1.5</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>19</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{309, 182.853}, {160, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>74</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>69</integer>
+ <key>Position</key>
+ <real>0.25240078568458557</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 getProjectCustomBindings()}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{380.5, 138}, {17, 21.0909}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>73</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 0.5}</string>
+ <string>{1, -0.5}</string>
+ <string>{-1, 0.5}</string>
+ <string>{-1, -0.5}</string>
+ <string>{0.5, 1}</string>
+ <string>{-0.5, 1}</string>
+ <string>{0.5, -1}</string>
+ <string>{-0.5, -1}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{259.56, 110.107}, {47, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>29</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>7</integer>
+ <key>Offset</key>
+ <real>18.181819915771484</real>
+ <key>Position</key>
+ <real>0.38198670744895935</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural
+
+\f0\fs24 \cf0 project}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>71</integer>
+ </dict>
+ <key>ID</key>
+ <integer>7</integer>
+ <key>Points</key>
+ <array>
+ <string>{222.5, 99.6111}</string>
+ <string>{380.5, 97.8182}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>HeadScale</key>
+ <real>1.4285709857940674</real>
+ <key>TailArrow</key>
+ <string>StickArrow</string>
+ <key>TailScale</key>
+ <real>1.5</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>19</integer>
+ <key>Info</key>
+ <integer>10</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{329.5, 75.973}, {119, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>72</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>69</integer>
+ <key>Position</key>
+ <real>0.078753873705863953</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 getDefaultBindings()}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{380.5, 92.5454}, {17, 21.0909}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>71</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 0.5}</string>
+ <string>{1, -0.5}</string>
+ <string>{-1, 0.5}</string>
+ <string>{-1, -0.5}</string>
+ <string>{0.5, 1}</string>
+ <string>{-0.5, 1}</string>
+ <string>{0.5, -1}</string>
+ <string>{-0.5, -1}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>Group</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>69</integer>
+ <key>Points</key>
+ <array>
+ <string>{389, 34.5}</string>
+ <string>{389, 650}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>HeadScale</key>
+ <real>1.4285709857940674</real>
+ <key>Pattern</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ <key>TailScale</key>
+ <real>0.5</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>70</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{313.5, 20}, {151, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>70</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 \ul \ulc0 LifecyleBindingManager}</string>
+ </dict>
+ </dict>
+ </array>
+ <key>ID</key>
+ <integer>68</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{108.828, 81.9091}, {81, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>30</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>6</integer>
+ <key>Offset</key>
+ <real>10.909090042114258</real>
+ <key>Position</key>
+ <real>0.52006888389587402</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural
+
+\f0\fs24 \cf0 tasks, project}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>6</integer>
+ <key>Points</key>
+ <array>
+ <string>{89, 78}</string>
+ <string>{205, 78}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>StickArrow</string>
+ <key>HeadScale</key>
+ <real>1.4285709857940674</real>
+ <key>TailArrow</key>
+ <string>0</string>
+ <key>TailScale</key>
+ <real>0.5</real>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{155, 53.596}, {118, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>20</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>17</integer>
+ <key>Position</key>
+ <real>0.042397733777761459</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 constructBuildPlan()}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{205.5, 74}, {17, 208}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>19</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 0.5}</string>
+ <string>{1, -0.5}</string>
+ <string>{-0.470589, 0.149038}</string>
+ <string>{-0.5, -0.197115}</string>
+ <string>{0.5, 1}</string>
+ <string>{-0.5, 1}</string>
+ <string>{0.5, -1}</string>
+ <string>{-0.5, -1}</string>
+ <string>{-0.5, -0.155288}</string>
+ <string>{-0.5, -0.37687}</string>
+ <string>{-0.5, -0.155288}</string>
+ <string>{-0.5, 0.25}</string>
+ <string>{-0.529412, 0.360577}</string>
+ <string>{-0.470589, 0.283654}</string>
+ <string>{-0.529412, 0.389423}</string>
+ <string>{0.5, 0.442308}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>Group</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>17</integer>
+ <key>Points</key>
+ <array>
+ <string>{214, 34.5002}</string>
+ <string>{214, 650}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>HeadScale</key>
+ <real>1.4285709857940674</real>
+ <key>Pattern</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ <key>TailScale</key>
+ <real>0.5</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>18</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{160, 20.0002}, {108, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>18</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 \ul \ulc0 BuildPlanner}</string>
+ </dict>
+ </dict>
+ </array>
+ <key>ID</key>
+ <integer>16</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{53.5, 46.7192}, {61, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>5</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>2</integer>
+ <key>Position</key>
+ <real>0.031224979087710381</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 execute()}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{75.5, 64}, {14.5, 552}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>HFlip</key>
+ <string>YES</string>
+ <key>ID</key>
+ <integer>4</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{1, 0.5}</string>
+ <string>{1, -0.5}</string>
+ <string>{-0.5, 0.317029}</string>
+ <string>{-1, -0.5}</string>
+ <string>{0.5, 1}</string>
+ <string>{-0.5, 1}</string>
+ <string>{0.5, -1}</string>
+ <string>{-0.5, -1}</string>
+ <string>{-0.25, -0.126812}</string>
+ <string>{-0.568965, 0.302536}</string>
+ <string>{-0.637931, 0.400362}</string>
+ <string>{-0.5, 0.416667}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Align</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>Group</string>
+ <key>Graphics</key>
+ <array>
+ <dict>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>2</integer>
+ <key>Points</key>
+ <array>
+ <string>{84, 34.5003}</string>
+ <string>{84, 650}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>HeadScale</key>
+ <real>1.4285709857940674</real>
+ <key>Pattern</key>
+ <integer>1</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ <key>TailScale</key>
+ <real>0.5</real>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>3</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{26, 20.0002}, {116, 14}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>Vertical</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>ID</key>
+ <integer>3</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Text</key>
+ <dict>
+ <key>Text</key>
+ <string>{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410
+{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\b\fs24 \cf0 \ul \ulc0 LifecycleExecutor}</string>
+ </dict>
+ </dict>
+ </array>
+ <key>ID</key>
+ <integer>1</integer>
+ </dict>
+ </array>
+ <key>GridInfo</key>
+ <dict/>
+ <key>HPages</key>
+ <integer>2</integer>
+ <key>IsPalette</key>
+ <string>NO</string>
+ <key>KeepToScale</key>
+ <false/>
+ <key>Layers</key>
+ <array>
+ <dict>
+ <key>Lock</key>
+ <string>NO</string>
+ <key>Name</key>
+ <string>Layer 1</string>
+ <key>Print</key>
+ <string>YES</string>
+ <key>View</key>
+ <string>YES</string>
+ </dict>
+ </array>
+ <key>LayoutInfo</key>
+ <dict>
+ <key>ChildOrdering</key>
+ <integer>0</integer>
+ <key>HierarchicalOrientation</key>
+ <integer>0</integer>
+ </dict>
+ <key>MasterSheet</key>
+ <string>Master 1</string>
+ <key>Orientation</key>
+ <integer>2</integer>
+ <key>OutlineStyle</key>
+ <string>Basic</string>
+ <key>RowAlign</key>
+ <integer>1</integer>
+ <key>RowSpacing</key>
+ <real>36</real>
+ <key>SheetTitle</key>
+ <string>Canvas 2</string>
+ <key>UniqueID</key>
+ <integer>2</integer>
+ <key>VPages</key>
+ <integer>2</integer>
+ </dict>
+ </array>
+ <key>SmartAlignmentGuidesActive</key>
+ <string>YES</string>
+ <key>SmartDistanceGuidesActive</key>
+ <string>YES</string>
+ <key>UseEntirePage</key>
+ <true/>
+ <key>WindowInfo</key>
+ <dict>
+ <key>CurrentSheet</key>
+ <string>0</string>
+ <key>DrawerOpen</key>
+ <false/>
+ <key>DrawerTab</key>
+ <string>Outline</string>
+ <key>DrawerWidth</key>
+ <real>209</real>
+ <key>FitInWindow</key>
+ <false/>
+ <key>Frame</key>
+ <string>{{6, 123}, {956, 590}}</string>
+ <key>ShowRuler</key>
+ <false/>
+ <key>ShowStatusBar</key>
+ <true/>
+ <key>VisibleRegion</key>
+ <string>{{-94, 0}, {941, 476}}</string>
+ <key>Zoom</key>
+ <string>1</string>
+ </dict>
+</dict>
+</plist>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/site.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/site.xml
new file mode 100644
index 00000000..2c38d2a0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/site.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
+ <body>
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ <item name="JavaDocs" href="apidocs/index.html"/>
+ <item name="Source Xref" href="xref/index.html"/>
+ <!--item name="FAQ" href="faq.html"/-->
+ </menu>
+
+ <menu name="Reference">
+ <item name="Lifecycles" href="lifecycles.html"/>
+ <item name="Plugin Bindings to Default Lifecycle" href="default-bindings.html"/>
+ <item name="Artifact Handlers" href="artifact-handlers.html"/>
+ </menu>
+
+ <menu ref="parent"/>
+ <menu ref="reports"/>
+ </body>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java
new file mode 100644
index 00000000..57d374fd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java
@@ -0,0 +1,360 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.DefaultMavenExecutionResult;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Exclusion;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.RepositoryPolicy;
+import org.apache.maven.project.DefaultProjectBuildingRequest;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.repository.RepositorySystem;
+import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.util.FileUtils;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
+import org.eclipse.aether.repository.LocalRepository;
+
+public abstract class AbstractCoreMavenComponentTestCase
+ extends PlexusTestCase
+{
+ @Requirement
+ protected RepositorySystem repositorySystem;
+
+ @Requirement
+ protected org.apache.maven.project.ProjectBuilder projectBuilder;
+
+ protected void setUp()
+ throws Exception
+ {
+ repositorySystem = lookup( RepositorySystem.class );
+ projectBuilder = lookup( org.apache.maven.project.ProjectBuilder.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ repositorySystem = null;
+ projectBuilder = null;
+ super.tearDown();
+ }
+
+ abstract protected String getProjectsDirectory();
+
+ protected File getProject( String name )
+ throws Exception
+ {
+ File source = new File( new File( getBasedir(), getProjectsDirectory() ), name );
+ File target = new File( new File( getBasedir(), "target" ), name );
+ FileUtils.copyDirectoryStructureIfModified( source, target );
+ return new File( target, "pom.xml" );
+ }
+
+ /**
+ * We need to customize the standard Plexus container with the plugin discovery listener which
+ * is what looks for the META-INF/maven/plugin.xml resources that enter the system when a Maven
+ * plugin is loaded.
+ *
+ * We also need to customize the Plexus container with a standard plugin discovery listener
+ * which is the MavenPluginCollector. When a Maven plugin is discovered the MavenPluginCollector
+ * collects the plugin descriptors which are found.
+ */
+ protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration )
+ {
+ containerConfiguration.setAutoWiring( true ).setClassPathScanning( PlexusConstants.SCANNING_INDEX );
+ }
+
+ protected MavenExecutionRequest createMavenExecutionRequest( File pom )
+ throws Exception
+ {
+ MavenExecutionRequest request = new DefaultMavenExecutionRequest()
+ .setPom( pom )
+ .setProjectPresent( true )
+ .setShowErrors( true )
+ .setPluginGroups( Arrays.asList( "org.apache.maven.plugins" ) )
+ .setLocalRepository( getLocalRepository() )
+ .setRemoteRepositories( getRemoteRepositories() )
+ .setPluginArtifactRepositories( getPluginArtifactRepositories() )
+ .setGoals( Arrays.asList( "package" ) );
+
+ return request;
+ }
+
+ // layer the creation of a project builder configuration with a request, but this will need to be
+ // a Maven subclass because we don't want to couple maven to the project builder which we need to
+ // separate.
+ protected MavenSession createMavenSession( File pom )
+ throws Exception
+ {
+ return createMavenSession( pom, new Properties() );
+ }
+
+ protected MavenSession createMavenSession( File pom, Properties executionProperties )
+ throws Exception
+ {
+ MavenExecutionRequest request = createMavenExecutionRequest( pom );
+
+ ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest()
+ .setLocalRepository( request.getLocalRepository() )
+ .setRemoteRepositories( request.getRemoteRepositories() )
+ .setPluginArtifactRepositories( request.getPluginArtifactRepositories() )
+ .setSystemProperties( executionProperties );
+
+ MavenProject project = null;
+
+ if ( pom != null )
+ {
+ project = projectBuilder.build( pom, configuration ).getProject();
+ }
+ else
+ {
+ project = createStubMavenProject();
+ project.setRemoteArtifactRepositories( request.getRemoteRepositories() );
+ project.setPluginArtifactRepositories( request.getPluginArtifactRepositories() );
+ }
+
+ initRepoSession( configuration );
+
+ MavenSession session =
+ new MavenSession( getContainer(), configuration.getRepositorySession(), request,
+ new DefaultMavenExecutionResult() );
+ session.setProjects( Arrays.asList( project ) );
+
+ return session;
+ }
+
+ protected void initRepoSession( ProjectBuildingRequest request )
+ throws Exception
+ {
+ File localRepoDir = new File( request.getLocalRepository().getBasedir() );
+ LocalRepository localRepo = new LocalRepository( localRepoDir );
+ DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
+ session.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( session, localRepo ) );
+ request.setRepositorySession( session );
+ }
+
+ protected MavenProject createStubMavenProject()
+ {
+ Model model = new Model();
+ model.setGroupId( "org.apache.maven.test" );
+ model.setArtifactId( "maven-test" );
+ model.setVersion( "1.0" );
+ return new MavenProject( model );
+ }
+
+ protected List<ArtifactRepository> getRemoteRepositories()
+ throws InvalidRepositoryException
+ {
+ File repoDir = new File( getBasedir(), "src/test/remote-repo" ).getAbsoluteFile();
+
+ RepositoryPolicy policy = new RepositoryPolicy();
+ policy.setEnabled( true );
+ policy.setChecksumPolicy( "ignore" );
+ policy.setUpdatePolicy( "always" );
+
+ Repository repository = new Repository();
+ repository.setId( RepositorySystem.DEFAULT_REMOTE_REPO_ID );
+ repository.setUrl( "file://" + repoDir.toURI().getPath() );
+ repository.setReleases( policy );
+ repository.setSnapshots( policy );
+
+ return Arrays.asList( repositorySystem.buildArtifactRepository( repository ) );
+ }
+
+ protected List<ArtifactRepository> getPluginArtifactRepositories()
+ throws InvalidRepositoryException
+ {
+ return getRemoteRepositories();
+ }
+
+ protected ArtifactRepository getLocalRepository()
+ throws InvalidRepositoryException
+ {
+ File repoDir = new File( getBasedir(), "target/local-repo" ).getAbsoluteFile();
+
+ return repositorySystem.createLocalRepository( repoDir );
+ }
+
+ protected class ProjectBuilder
+ {
+ private MavenProject project;
+
+ public ProjectBuilder( MavenProject project )
+ {
+ this.project = project;
+ }
+
+ public ProjectBuilder( String groupId, String artifactId, String version )
+ {
+ Model model = new Model();
+ model.setModelVersion( "4.0.0" );
+ model.setGroupId( groupId );
+ model.setArtifactId( artifactId );
+ model.setVersion( version );
+ model.setBuild( new Build() );
+ project = new MavenProject( model );
+ }
+
+ public ProjectBuilder setGroupId( String groupId )
+ {
+ project.setGroupId( groupId );
+ return this;
+ }
+
+ public ProjectBuilder setArtifactId( String artifactId )
+ {
+ project.setArtifactId( artifactId );
+ return this;
+ }
+
+ public ProjectBuilder setVersion( String version )
+ {
+ project.setVersion( version );
+ return this;
+ }
+
+ // Dependencies
+ //
+ public ProjectBuilder addDependency( String groupId, String artifactId, String version, String scope )
+ {
+ return addDependency( groupId, artifactId, version, scope, (Exclusion)null );
+ }
+
+ public ProjectBuilder addDependency( String groupId, String artifactId, String version, String scope, Exclusion exclusion )
+ {
+ return addDependency( groupId, artifactId, version, scope, null, exclusion );
+ }
+
+ public ProjectBuilder addDependency( String groupId, String artifactId, String version, String scope, String systemPath )
+ {
+ return addDependency( groupId, artifactId, version, scope, systemPath, null );
+ }
+
+ public ProjectBuilder addDependency( String groupId, String artifactId, String version, String scope, String systemPath, Exclusion exclusion )
+ {
+ Dependency d = new Dependency();
+ d.setGroupId( groupId );
+ d.setArtifactId( artifactId );
+ d.setVersion( version );
+ d.setScope( scope );
+
+ if ( systemPath != null && scope.equals( Artifact.SCOPE_SYSTEM ) )
+ {
+ d.setSystemPath( systemPath );
+ }
+
+ if ( exclusion != null )
+ {
+ d.addExclusion( exclusion );
+ }
+
+ project.getDependencies().add( d );
+
+ return this;
+ }
+
+ // Plugins
+ //
+ public ProjectBuilder addPlugin( Plugin plugin )
+ {
+ project.getBuildPlugins().add( plugin );
+ return this;
+ }
+
+ public MavenProject get()
+ {
+ return project;
+ }
+ }
+
+ protected class PluginBuilder
+ {
+ private Plugin plugin;
+
+ public PluginBuilder( String groupId, String artifactId, String version )
+ {
+ plugin = new Plugin();
+ plugin.setGroupId( groupId );
+ plugin.setArtifactId( artifactId );
+ plugin.setVersion( version );
+ }
+
+ // Dependencies
+ //
+ public PluginBuilder addDependency( String groupId, String artifactId, String version, String scope, Exclusion exclusion )
+ {
+ return addDependency( groupId, artifactId, version, scope, exclusion );
+ }
+
+ public PluginBuilder addDependency( String groupId, String artifactId, String version, String scope, String systemPath )
+ {
+ return addDependency( groupId, artifactId, version, scope, systemPath, null );
+ }
+
+ public PluginBuilder addDependency( String groupId, String artifactId, String version, String scope, String systemPath, Exclusion exclusion )
+ {
+ Dependency d = new Dependency();
+ d.setGroupId( groupId );
+ d.setArtifactId( artifactId );
+ d.setVersion( version );
+ d.setScope( scope );
+
+ if ( systemPath != null && scope.equals( Artifact.SCOPE_SYSTEM ) )
+ {
+ d.setSystemPath( systemPath );
+ }
+
+ if ( exclusion != null )
+ {
+ d.addExclusion( exclusion );
+ }
+
+ plugin.getDependencies().add( d );
+
+ return this;
+ }
+
+ public Plugin get()
+ {
+ return plugin;
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/DefaultMavenTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/DefaultMavenTest.java
new file mode 100644
index 00000000..ab073a63
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/DefaultMavenTest.java
@@ -0,0 +1,45 @@
+package org.apache.maven;
+
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionResult;
+
+import static java.util.Arrays.asList;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+public class DefaultMavenTest extends AbstractCoreMavenComponentTestCase{
+
+ public void testThatErrorDuringProjectDependencyGraphCreationAreStored()
+ throws Exception
+ {
+ Maven maven = getContainer().lookup( Maven.class );
+ MavenExecutionRequest request = createMavenExecutionRequest( getProject( "cyclic-reference" ) ).setGoals( asList("validate") );
+
+ MavenExecutionResult result = maven.execute( request );
+
+ assertEquals( ProjectCycleException.class, result.getExceptions().get( 0 ).getClass() );
+ }
+
+ @Override
+ protected String getProjectsDirectory()
+ {
+ return "src/test/projects/default-maven";
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/MavenLifecycleParticipantTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/MavenLifecycleParticipantTest.java
new file mode 100644
index 00000000..17aeab31
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/MavenLifecycleParticipantTest.java
@@ -0,0 +1,173 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionResult;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.repository.ComponentDescriptor;
+
+public class MavenLifecycleParticipantTest
+ extends AbstractCoreMavenComponentTestCase
+{
+
+ private static final String INJECTED_ARTIFACT_ID = "injected";
+
+ public static class InjectDependencyLifecycleListener
+ extends AbstractMavenLifecycleParticipant
+ {
+
+ @Override
+ public void afterProjectsRead( MavenSession session )
+ {
+ MavenProject project = session.getProjects().get( 0 );
+
+ Dependency dependency = new Dependency();
+ dependency.setArtifactId( INJECTED_ARTIFACT_ID );
+ dependency.setGroupId( "foo" );
+ dependency.setVersion( "1.2.3" );
+ dependency.setScope( "system" );
+ try
+ {
+ dependency.setSystemPath( new File(
+ "src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/pom.xml" ).getCanonicalPath() );
+ }
+ catch ( IOException e )
+ {
+ throw new RuntimeException( e );
+ }
+
+ project.getModel().addDependency( dependency );
+ }
+
+ @Override
+ public void afterSessionStart( MavenSession session )
+ {
+ session.getUserProperties().setProperty( "injected", "bar" );
+ }
+
+ }
+
+ public static class InjectReactorDependency
+ extends AbstractMavenLifecycleParticipant
+ {
+ @Override
+ public void afterProjectsRead( MavenSession session )
+ {
+ injectReactorDependency( session.getProjects(), "module-a", "module-b" );
+ }
+
+ private void injectReactorDependency( List<MavenProject> projects, String moduleFrom, String moduleTo )
+ {
+ for ( MavenProject project : projects )
+ {
+ if ( moduleFrom.equals( project.getArtifactId() ) )
+ {
+ Dependency dependency = new Dependency();
+ dependency.setArtifactId( moduleTo );
+ dependency.setGroupId( project.getGroupId() );
+ dependency.setVersion( project.getVersion() );
+
+ project.getModel().addDependency( dependency );
+ }
+ }
+ }
+ }
+
+ @Override
+ protected void setupContainer()
+ {
+ super.setupContainer();
+ }
+
+ @Override
+ protected String getProjectsDirectory()
+ {
+ return "src/test/projects/lifecycle-listener";
+ }
+
+ public void testDependencyInjection()
+ throws Exception
+ {
+ PlexusContainer container = getContainer();
+
+ ComponentDescriptor<? extends AbstractMavenLifecycleParticipant> cd =
+ new ComponentDescriptor<InjectDependencyLifecycleListener>( InjectDependencyLifecycleListener.class,
+ container.getContainerRealm() );
+ cd.setRoleClass( AbstractMavenLifecycleParticipant.class );
+ container.addComponentDescriptor( cd );
+
+ Maven maven = container.lookup( Maven.class );
+ File pom = getProject( "lifecycle-listener-dependency-injection" );
+ MavenExecutionRequest request = createMavenExecutionRequest( pom );
+ request.setGoals( Arrays.asList( "validate" ) );
+ MavenExecutionResult result = maven.execute( request );
+
+ assertFalse( result.getExceptions().toString(), result.hasExceptions() );
+
+ MavenProject project = result.getProject();
+
+ assertEquals( "bar", project.getProperties().getProperty( "foo" ) );
+
+ ArrayList<Artifact> artifacts = new ArrayList<Artifact>( project.getArtifacts() );
+
+ assertEquals( 1, artifacts.size() );
+ assertEquals( INJECTED_ARTIFACT_ID, artifacts.get( 0 ).getArtifactId() );
+ }
+
+ public void testReactorDependencyInjection()
+ throws Exception
+ {
+ List<String> reactorOrder =
+ getReactorOrder( "lifecycle-participant-reactor-dependency-injection", InjectReactorDependency.class );
+ assertEquals( Arrays.asList( "parent", "module-b", "module-a" ), reactorOrder );
+ }
+
+ private <T> List<String> getReactorOrder( String testProject, Class<T> participant )
+ throws Exception
+ {
+ PlexusContainer container = getContainer();
+
+ ComponentDescriptor<T> cd = new ComponentDescriptor<T>( participant, container.getContainerRealm() );
+ cd.setRoleClass( AbstractMavenLifecycleParticipant.class );
+ container.addComponentDescriptor( cd );
+
+ Maven maven = container.lookup( Maven.class );
+ File pom = getProject( testProject );
+ MavenExecutionRequest request = createMavenExecutionRequest( pom );
+ request.setGoals( Arrays.asList( "validate" ) );
+ MavenExecutionResult result = maven.execute( request );
+
+ assertFalse( result.getExceptions().toString(), result.hasExceptions() );
+
+ List<String> order = new ArrayList<String>();
+ for ( MavenProject project : result.getTopologicallySortedProjects() )
+ {
+ order.add( project.getArtifactId() );
+ }
+ return order;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/MavenTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/MavenTest.java
new file mode 100644
index 00000000..3e248604
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/MavenTest.java
@@ -0,0 +1,69 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+
+import org.apache.maven.exception.ExceptionHandler;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+public class MavenTest
+ extends AbstractCoreMavenComponentTestCase
+{
+ @Requirement
+ private Maven maven;
+
+ @Requirement
+ private ExceptionHandler exceptionHandler;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ maven = lookup( Maven.class );
+ exceptionHandler = lookup( ExceptionHandler.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ maven = null;
+ exceptionHandler = null;
+ super.tearDown();
+ }
+
+ protected String getProjectsDirectory()
+ {
+ return "src/test/projects/lifecycle-executor";
+ }
+
+ public void testLifecycleExecutionUsingADefaultLifecyclePhase()
+ throws Exception
+ {
+ /*
+ File pom = getProject( "project-with-additional-lifecycle-elements" );
+ MavenExecutionRequest request = createMavenExecutionRequest( pom );
+ MavenExecutionResult result = maven.execute( request );
+ if ( result.hasExceptions() )
+ {
+ ExceptionSummary es = exceptionHandler.handleException( result.getExceptions().get( 0 ) );
+ System.out.println( es.getMessage() );
+ es.getException().printStackTrace();
+ fail( "Maven did not execute correctly." );
+ }
+ */
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/ProjectDependenciesResolverTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/ProjectDependenciesResolverTest.java
new file mode 100644
index 00000000..ca75c3f1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/ProjectDependenciesResolverTest.java
@@ -0,0 +1,114 @@
+package org.apache.maven;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import java.io.File;
+import java.util.Collections;
+import java.util.List;
+import java.util.Properties;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+public class ProjectDependenciesResolverTest
+ extends AbstractCoreMavenComponentTestCase
+{
+ @Requirement
+ private ProjectDependenciesResolver resolver;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ resolver = lookup( ProjectDependenciesResolver.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ resolver = null;
+ super.tearDown();
+ }
+
+ protected String getProjectsDirectory()
+ {
+ return "src/test/projects/project-dependencies-resolver";
+ }
+
+ /*
+ public void testExclusionsInDependencies()
+ throws Exception
+ {
+ MavenSession session = createMavenSession( null );
+ MavenProject project = session.getCurrentProject();
+
+ Exclusion exclusion = new Exclusion();
+ exclusion.setGroupId( "org.apache.maven.its" );
+ exclusion.setArtifactId( "a" );
+
+ new ProjectBuilder( project ).addDependency( "org.apache.maven.its", "b", "0.1", Artifact.SCOPE_RUNTIME,
+ exclusion );
+
+ Set<Artifact> artifactDependencies =
+ resolver.resolve( project, Collections.singleton( Artifact.SCOPE_COMPILE ), session );
+ assertEquals( 0, artifactDependencies.size() );
+
+ artifactDependencies = resolver.resolve( project, Collections.singleton( Artifact.SCOPE_RUNTIME ), session );
+ assertEquals( 1, artifactDependencies.size() );
+ assertEquals( "b", artifactDependencies.iterator().next().getArtifactId() );
+ }
+ */
+
+ public void testSystemScopeDependencies()
+ throws Exception
+ {
+ MavenSession session = createMavenSession( null );
+ MavenProject project = session.getCurrentProject();
+
+ new ProjectBuilder( project )
+ .addDependency( "com.mycompany", "system-dependency", "1.0", Artifact.SCOPE_SYSTEM, new File( getBasedir(), "pom.xml" ).getAbsolutePath() );
+
+ Set<Artifact> artifactDependencies =
+ resolver.resolve( project, Collections.singleton( Artifact.SCOPE_COMPILE ), session );
+ assertEquals( 1, artifactDependencies.size() );
+ }
+
+ public void testSystemScopeDependencyIsPresentInTheCompileClasspathElements()
+ throws Exception
+ {
+ File pom = getProject( "it0063" );
+
+ Properties eps = new Properties();
+ eps.setProperty( "jre.home", new File( pom.getParentFile(), "jdk/jre" ).getPath() );
+
+ MavenSession session = createMavenSession( pom, eps );
+ MavenProject project = session.getCurrentProject();
+
+ project.setArtifacts( resolver.resolve( project, Collections.singleton( Artifact.SCOPE_COMPILE ), session ) );
+
+ List<String> elements = project.getCompileClasspathElements();
+ assertEquals( 2, elements.size() );
+
+ @SuppressWarnings( "deprecation" )
+ List<Artifact> artifacts = project.getCompileArtifacts();
+ assertEquals( 1, artifacts.size() );
+ assertTrue( artifacts.get( 0 ).getFile().getName().endsWith( "tools.jar" ) );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/artifact/handler/ArtifactHandlerTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/artifact/handler/ArtifactHandlerTest.java
new file mode 100644
index 00000000..ac02e106
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/artifact/handler/ArtifactHandlerTest.java
@@ -0,0 +1,89 @@
+package org.apache.maven.artifact.handler;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.List;
+
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.FileUtils;
+
+public class ArtifactHandlerTest
+ extends PlexusTestCase
+{
+ public void testAptConsistency()
+ throws Exception
+ {
+ File apt = getTestFile( "src/site/apt/artifact-handlers.apt" );
+
+ @SuppressWarnings( "unchecked" )
+ List<String> lines = FileUtils.loadFile( apt );
+
+ for ( String line : lines )
+ {
+ if ( line.startsWith( "||" ) )
+ {
+ String[] cols = line.split( "\\|\\|" );
+ String[] expected =
+ new String[] { "", "type", "extension", "packaging", "classifier", "language", "added to classpath",
+ "includesDependencies", "" };
+
+ int i = 0;
+ for ( String col : cols )
+ {
+ assertEquals( "Wrong column header", expected[i++], col.trim() );
+ }
+ }
+ else if ( line.startsWith( "|" ) )
+ {
+ String[] cols = line.split( "\\|" );
+
+ String type = trimApt( cols[1] );
+ String extension = trimApt( cols[2], type );
+ String packaging = trimApt( cols[3], type );
+ String classifier = trimApt( cols[4] );
+ String language = trimApt( cols[5] );
+ String addedToClasspath = trimApt( cols[6] );
+ String includesDependencies = trimApt( cols[7] );
+
+ ArtifactHandler handler = lookup( ArtifactHandler.class, type );
+ assertEquals( type + " extension", handler.getExtension(), extension );
+ assertEquals( type + " packaging", handler.getPackaging(), packaging );
+ assertEquals( type + " classifier", handler.getClassifier(), classifier );
+ assertEquals( type + " language", handler.getLanguage(), language );
+ assertEquals( type + " addedToClasspath", handler.isAddedToClasspath() ? "true" : null, addedToClasspath );
+ assertEquals( type + " includesDependencies", handler.isIncludesDependencies() ? "true" : null, includesDependencies );
+ }
+ }
+ }
+
+ private String trimApt( String content, String type )
+ {
+ String value = trimApt( content );
+ return "= type".equals( value ) ? type : value;
+ }
+
+ private String trimApt( String content )
+ {
+ content = content.replace( '<', ' ' ).replace( '>', ' ' ).trim();
+
+ return ( content.length() == 0 ) ? null : content;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/configuration/DefaultBeanConfiguratorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/configuration/DefaultBeanConfiguratorTest.java
new file mode 100644
index 00000000..33673e3b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/configuration/DefaultBeanConfiguratorTest.java
@@ -0,0 +1,148 @@
+package org.apache.maven.configuration;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class DefaultBeanConfiguratorTest
+ extends PlexusTestCase
+{
+
+ private BeanConfigurator configurator;
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ configurator = lookup( BeanConfigurator.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ configurator = null;
+
+ super.tearDown();
+ }
+
+ private Xpp3Dom toConfig( String xml )
+ {
+ try
+ {
+ return Xpp3DomBuilder.build( new StringReader( "<configuration>" + xml + "</configuration>" ) );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new IllegalArgumentException( e );
+ }
+ catch ( IOException e )
+ {
+ throw new IllegalArgumentException( e );
+ }
+ }
+
+ public void testMinimal()
+ throws BeanConfigurationException
+ {
+ SomeBean bean = new SomeBean();
+
+ Xpp3Dom config = toConfig( "<file>test</file>" );
+
+ DefaultBeanConfigurationRequest request = new DefaultBeanConfigurationRequest();
+ request.setBean( bean ).setConfiguration( config );
+
+ configurator.configureBean( request );
+
+ assertEquals( new File( "test" ), bean.file );
+ }
+
+ public void testPreAndPostProcessing()
+ throws BeanConfigurationException
+ {
+ SomeBean bean = new SomeBean();
+
+ Xpp3Dom config = toConfig( "<file>${test}</file>" );
+
+ BeanConfigurationValuePreprocessor preprocessor = new BeanConfigurationValuePreprocessor()
+ {
+ public Object preprocessValue( String value, Class<?> type )
+ throws BeanConfigurationException
+ {
+ if ( value != null && value.startsWith( "${" ) && value.endsWith( "}" ) )
+ {
+ return value.substring( 2, value.length() - 1 );
+ }
+ return value;
+ }
+ };
+
+ BeanConfigurationPathTranslator translator = new BeanConfigurationPathTranslator()
+ {
+ public File translatePath( File path )
+ {
+ return new File( "base", path.getPath() ).getAbsoluteFile();
+ }
+ };
+
+ DefaultBeanConfigurationRequest request = new DefaultBeanConfigurationRequest();
+ request.setBean( bean ).setConfiguration( config );
+ request.setValuePreprocessor( preprocessor ).setPathTranslator( translator );
+
+ configurator.configureBean( request );
+
+ assertEquals( new File( "base/test" ).getAbsoluteFile(), bean.file );
+ }
+
+ public void testChildConfigurationElement()
+ throws BeanConfigurationException
+ {
+ SomeBean bean = new SomeBean();
+
+ Xpp3Dom config = toConfig( "<wrapper><file>test</file></wrapper>" );
+
+ DefaultBeanConfigurationRequest request = new DefaultBeanConfigurationRequest();
+ request.setBean( bean ).setConfiguration( config, "wrapper" );
+
+ configurator.configureBean( request );
+
+ assertEquals( new File( "test" ), bean.file );
+ }
+
+ static class SomeBean
+ {
+
+ File file;
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/exception/DefaultExceptionHandlerTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/exception/DefaultExceptionHandlerTest.java
new file mode 100644
index 00000000..9727bdf8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/exception/DefaultExceptionHandlerTest.java
@@ -0,0 +1,60 @@
+package org.apache.maven.exception;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.net.ConnectException;
+
+import org.apache.maven.plugin.MojoExecutionException;
+
+import junit.framework.TestCase;
+
+/**
+ * @author <a href="mailto:baerrach@apache.org">Barrie Treloar</a>
+ */
+public class DefaultExceptionHandlerTest
+ extends TestCase
+{
+ /**
+ * Running Maven under JDK7 may cause connection issues because IPv6 is used by default.
+ * <p>
+ * e.g running mvn site:run will cause Jetty to fail.
+ * </p>
+ * <p>
+ * The resolution is to add -Djava.net.preferIPv4Stack=true to the command line as documented in
+ * http://cwiki.apache.org/confluence/display/MAVEN/ConnectException
+ * </p>
+ */
+ public void testJdk7ipv6()
+ {
+ ConnectException connEx = new ConnectException( "Connection refused: connect" );
+ IOException ioEx = new IOException( "Unable to establish loopback connection" );
+ ioEx.initCause( connEx );
+ MojoExecutionException mojoEx =
+ new MojoExecutionException( "Error executing Jetty: Unable to establish loopback connection", ioEx );
+
+ ExceptionHandler exceptionHandler = new DefaultExceptionHandler();
+ ExceptionSummary exceptionSummary = exceptionHandler.handleException( mojoEx );
+
+ String expectedReference = "http://cwiki.apache.org/confluence/display/MAVEN/ConnectException";
+ assertEquals( expectedReference, exceptionSummary.getReference() );
+
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java
new file mode 100644
index 00000000..15a7a7b3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java
@@ -0,0 +1,62 @@
+package org.apache.maven.execution;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.settings.Profile;
+import org.apache.maven.settings.Repository;
+import org.apache.maven.settings.Settings;
+import org.eclipse.sisu.launch.InjectedTestCase;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public class DefaultMavenExecutionRequestPopulatorTest
+ extends InjectedTestCase
+{
+ @Inject
+ MavenExecutionRequestPopulator testee;
+
+ public void testPluginRepositoryInjection()
+ throws Exception
+ {
+ MavenExecutionRequest request = new DefaultMavenExecutionRequest();
+
+ Repository r = new Repository();
+ r.setId( "test" );
+ r.setUrl( "file:///test" );
+
+ Profile p = new Profile();
+ p.setId( "test" );
+ p.addPluginRepository( r );
+
+ Settings settings = new Settings();
+ settings.addProfile( p );
+ settings.addActiveProfile( p.getId() );
+
+ testee.populateFromSettings( request, settings );
+
+ List<ArtifactRepository> repositories = request.getPluginArtifactRepositories();
+ assertEquals( 1, repositories.size() );
+ assertEquals( r.getId(), repositories.get( 0 ).getId() );
+ assertEquals( r.getUrl(), repositories.get( 0 ).getUrl() );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionTest.java
new file mode 100644
index 00000000..fbb8b900
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionTest.java
@@ -0,0 +1,52 @@
+package org.apache.maven.execution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.project.MavenProject;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class DefaultMavenExecutionTest
+ extends TestCase
+{
+
+ public void testCopyDefault()
+ {
+ MavenExecutionRequest original = new DefaultMavenExecutionRequest();
+ MavenExecutionRequest copy = DefaultMavenExecutionRequest.copy( original );
+ assertNotNull( copy );
+ assertNotSame( copy, original );
+ }
+
+ public void testResultWithNullTopologicallySortedProjectsIsEmptyList()
+ {
+ MavenExecutionResult result = new DefaultMavenExecutionResult();
+ result.setTopologicallySortedProjects( null );
+ List<MavenProject> projects = result.getTopologicallySortedProjects();
+ assertNotNull( projects );
+ assertTrue( projects.isEmpty() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeTest.java
new file mode 100644
index 00000000..a4eb354c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeTest.java
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.maven.execution.scope.internal;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.maven.execution.MojoExecutionEvent;
+import org.apache.maven.execution.scope.WeakMojoExecutionListener;
+import org.apache.maven.plugin.MojoExecutionException;
+
+import junit.framework.TestCase;
+
+import com.google.inject.Key;
+import com.google.inject.Provider;
+
+public class MojoExecutionScopeTest
+ extends TestCase
+{
+ public void testNestedEnter()
+ throws Exception
+ {
+ MojoExecutionScope scope = new MojoExecutionScope();
+
+ scope.enter();
+
+ Object o1 = new Object();
+ scope.seed( Object.class, o1 );
+ assertSame( o1, scope.scope( Key.get( Object.class ), null ).get() );
+
+ scope.enter();
+ Object o2 = new Object();
+ scope.seed( Object.class, o2 );
+ assertSame( o2, scope.scope( Key.get( Object.class ), null ).get() );
+
+ scope.exit();
+ assertSame( o1, scope.scope( Key.get( Object.class ), null ).get() );
+
+ scope.exit();
+
+ try
+ {
+ scope.exit();
+ fail();
+ }
+ catch ( IllegalStateException expected )
+ {
+ }
+ }
+
+ public void testMultiKeyInstance()
+ throws Exception
+ {
+ MojoExecutionScope scope = new MojoExecutionScope();
+ scope.enter();
+
+ final AtomicInteger beforeExecution = new AtomicInteger();
+ final AtomicInteger afterExecutionSuccess = new AtomicInteger();
+ final AtomicInteger afterExecutionFailure = new AtomicInteger();
+ final WeakMojoExecutionListener instance = new WeakMojoExecutionListener()
+ {
+ @Override
+ public void beforeMojoExecution( MojoExecutionEvent event )
+ throws MojoExecutionException
+ {
+ beforeExecution.incrementAndGet();
+ }
+
+ @Override
+ public void afterMojoExecutionSuccess( MojoExecutionEvent event )
+ throws MojoExecutionException
+ {
+ afterExecutionSuccess.incrementAndGet();
+ }
+
+ @Override
+ public void afterExecutionFailure( MojoExecutionEvent event )
+ {
+ afterExecutionFailure.incrementAndGet();
+ }
+ };
+ assertSame( instance, scope.scope( Key.get( Object.class ), new Provider<Object>()
+ {
+ @Override
+ public Object get()
+ {
+ return instance;
+ }
+ } ).get() );
+ assertSame( instance,
+ scope.scope( Key.get( WeakMojoExecutionListener.class ), new Provider<WeakMojoExecutionListener>()
+ {
+ @Override
+ public WeakMojoExecutionListener get()
+ {
+ return instance;
+ }
+ } ).get() );
+
+ final MojoExecutionEvent event = new MojoExecutionEvent( null, null, null, null );
+ scope.beforeMojoExecution( event );
+ scope.afterMojoExecutionSuccess( event );
+ scope.afterExecutionFailure( event );
+
+ assertEquals( 1, beforeExecution.get() );
+ assertEquals( 1, afterExecutionSuccess.get() );
+ assertEquals( 1, afterExecutionFailure.get() );
+
+ scope.exit();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/graph/DefaultProjectDependencyGraphTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/graph/DefaultProjectDependencyGraphTest.java
new file mode 100644
index 00000000..e2caaeb1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/graph/DefaultProjectDependencyGraphTest.java
@@ -0,0 +1,172 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.maven.graph;
+
+import junit.framework.TestCase;
+import org.apache.maven.execution.ProjectDependencyGraph;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.project.DuplicateProjectException;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.dag.CycleDetectedException;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class DefaultProjectDependencyGraphTest
+ extends TestCase
+{
+
+ private final MavenProject aProject = createA();
+
+ private final MavenProject depender1 = createProject( Arrays.asList( toDependency( aProject ) ), "depender1" );
+
+ private final MavenProject depender2 = createProject( Arrays.asList( toDependency( aProject ) ), "depender2" );
+
+ private final MavenProject depender3 = createProject( Arrays.asList( toDependency( aProject ) ), "depender3" );
+
+ private final MavenProject depender4 =
+ createProject( Arrays.asList( toDependency( aProject ), toDependency( depender3 ) ), "depender4" );
+
+ private final MavenProject transitiveOnly =
+ createProject( Arrays.asList( toDependency( depender3 ) ), "depender5" );
+
+ public void testGetSortedProjects()
+ throws DuplicateProjectException, CycleDetectedException
+ {
+ ProjectDependencyGraph graph = new DefaultProjectDependencyGraph( Arrays.asList( depender1, aProject ) );
+ final List<MavenProject> sortedProjects = graph.getSortedProjects();
+ assertEquals( aProject, sortedProjects.get( 0 ) );
+ assertEquals( depender1, sortedProjects.get( 1 ) );
+ }
+
+ public void testVerifyExpectedParentStructure()
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ // This test verifies the baseline structure used in susequent tests. If this fails, the rest will fail.
+ ProjectDependencyGraph graph = threeProjectsDependingOnASingle();
+ final List<MavenProject> sortedProjects = graph.getSortedProjects();
+ assertEquals( aProject, sortedProjects.get( 0 ) );
+ assertEquals( depender1, sortedProjects.get( 1 ) );
+ assertEquals( depender2, sortedProjects.get( 2 ) );
+ assertEquals( depender3, sortedProjects.get( 3 ) );
+ }
+
+ public void testVerifyThatDownsteamProjectsComeInSortedOrder()
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ final List<MavenProject> downstreamProjects =
+ threeProjectsDependingOnASingle().getDownstreamProjects( aProject, true );
+ assertEquals( depender1, downstreamProjects.get( 0 ) );
+ assertEquals( depender2, downstreamProjects.get( 1 ) );
+ assertEquals( depender3, downstreamProjects.get( 2 ) );
+ }
+
+ public void testTransitivesInOrder()
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ final ProjectDependencyGraph graph =
+ new DefaultProjectDependencyGraph( Arrays.asList( depender1, depender4, depender2, depender3, aProject ) );
+
+ final List<MavenProject> downstreamProjects = graph.getDownstreamProjects( aProject, true );
+ assertEquals( depender1, downstreamProjects.get( 0 ) );
+ assertEquals( depender3, downstreamProjects.get( 1 ) );
+ assertEquals( depender4, downstreamProjects.get( 2 ) );
+ assertEquals( depender2, downstreamProjects.get( 3 ) );
+ }
+
+ public void testNonTransitivesInOrder()
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ final ProjectDependencyGraph graph =
+ new DefaultProjectDependencyGraph( Arrays.asList( depender1, depender4, depender2, depender3, aProject ) );
+
+ final List<MavenProject> downstreamProjects = graph.getDownstreamProjects( aProject, false );
+ assertEquals( depender1, downstreamProjects.get( 0 ) );
+ assertEquals( depender3, downstreamProjects.get( 1 ) );
+ assertEquals( depender4, downstreamProjects.get( 2 ) );
+ assertEquals( depender2, downstreamProjects.get( 3 ) );
+ }
+
+ public void testWithTranistiveOnly()
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ final ProjectDependencyGraph graph = new DefaultProjectDependencyGraph(
+ Arrays.asList( depender1, transitiveOnly, depender2, depender3, aProject ) );
+
+ final List<MavenProject> downstreamProjects = graph.getDownstreamProjects( aProject, true );
+ assertEquals( depender1, downstreamProjects.get( 0 ) );
+ assertEquals( depender3, downstreamProjects.get( 1 ) );
+ assertEquals( transitiveOnly, downstreamProjects.get( 2 ) );
+ assertEquals( depender2, downstreamProjects.get( 3 ) );
+ }
+
+ public void testWithMissingTranistiveOnly()
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ final ProjectDependencyGraph graph = new DefaultProjectDependencyGraph(
+ Arrays.asList( depender1, transitiveOnly, depender2, depender3, aProject ) );
+
+ final List<MavenProject> downstreamProjects = graph.getDownstreamProjects( aProject, false );
+ assertEquals( depender1, downstreamProjects.get( 0 ) );
+ assertEquals( depender3, downstreamProjects.get( 1 ) );
+ assertEquals( depender2, downstreamProjects.get( 2 ) );
+ }
+
+ public void testGetUpstreamProjects()
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ ProjectDependencyGraph graph = threeProjectsDependingOnASingle();
+ final List<MavenProject> downstreamProjects = graph.getUpstreamProjects( depender1, true );
+ assertEquals( aProject, downstreamProjects.get( 0 ) );
+ }
+
+ private ProjectDependencyGraph threeProjectsDependingOnASingle()
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ return new DefaultProjectDependencyGraph( Arrays.asList( depender1, depender2, depender3, aProject ) );
+ }
+
+ private static MavenProject createA()
+ {
+ MavenProject result = new MavenProject();
+ result.setGroupId( "org.apache" );
+ result.setArtifactId( "A" );
+ result.setVersion( "1.2" );
+ return result;
+ }
+
+ static Dependency toDependency( MavenProject mavenProject )
+ {
+ final Dependency dependency = new Dependency();
+ dependency.setArtifactId( mavenProject.getArtifactId() );
+ dependency.setGroupId( mavenProject.getGroupId() );
+ dependency.setVersion( mavenProject.getVersion() );
+ return dependency;
+ }
+
+ private static MavenProject createProject( List<Dependency> dependencies, String artifactId )
+ {
+ MavenProject result = new MavenProject();
+ result.setGroupId( "org.apache" );
+ result.setArtifactId( artifactId );
+ result.setVersion( "1.2" );
+ result.setDependencies( dependencies );
+ return result;
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/DefaultLifecyclesTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/DefaultLifecyclesTest.java
new file mode 100644
index 00000000..690532c7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/DefaultLifecyclesTest.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.maven.lifecycle;
+
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+import java.util.List;
+
+/**
+ * @author Kristian Rosenvold
+ */
+
+public class DefaultLifecyclesTest
+ extends PlexusTestCase
+{
+ @Requirement
+ private DefaultLifecycles defaultLifeCycles;
+
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ defaultLifeCycles = lookup( DefaultLifecycles.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ defaultLifeCycles = null;
+ super.tearDown();
+ }
+
+ public void testLifecycle()
+ throws Exception
+ {
+ final List<Lifecycle> cycles = defaultLifeCycles.getLifeCycles();
+ assertNotNull( cycles );
+ final Lifecycle lifecycle = cycles.get( 0 );
+ assertEquals( "default", lifecycle.getId() );
+ assertEquals( 23, lifecycle.getPhases().size() );
+
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/DelegatingMojoExecutionListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/DelegatingMojoExecutionListener.java
new file mode 100644
index 00000000..873cc7da
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/DelegatingMojoExecutionListener.java
@@ -0,0 +1,75 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.apache.maven.execution.MojoExecutionEvent;
+import org.apache.maven.execution.MojoExecutionListener;
+import org.apache.maven.plugin.MojoExecutionException;
+
+@Named
+@Singleton
+public class DelegatingMojoExecutionListener
+ implements MojoExecutionListener
+{
+ private final List<MojoExecutionListener> listeners = new CopyOnWriteArrayList<MojoExecutionListener>();
+
+ public void beforeMojoExecution( MojoExecutionEvent event )
+ throws MojoExecutionException
+ {
+ for ( MojoExecutionListener listener : listeners )
+ {
+ listener.beforeMojoExecution( event );
+ }
+ }
+
+ public void afterMojoExecutionSuccess( MojoExecutionEvent event )
+ throws MojoExecutionException
+ {
+ for ( MojoExecutionListener listener : listeners )
+ {
+ listener.afterMojoExecutionSuccess( event );
+ }
+ }
+
+ public void afterExecutionFailure( MojoExecutionEvent event )
+ {
+ for ( MojoExecutionListener listener : listeners )
+ {
+ listener.afterExecutionFailure( event );
+ }
+ }
+
+ public void addMojoExecutionListener( MojoExecutionListener listener )
+ {
+ this.listeners.add( listener );
+ }
+
+ public void removeMojoExecutionListener( MojoExecutionListener listener )
+ {
+ this.listeners.remove( listener );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/DelegatingProjectExecutionListener.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/DelegatingProjectExecutionListener.java
new file mode 100644
index 00000000..233ae256
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/DelegatingProjectExecutionListener.java
@@ -0,0 +1,82 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.apache.maven.execution.ProjectExecutionEvent;
+import org.apache.maven.execution.ProjectExecutionListener;
+
+@Named
+@Singleton
+public class DelegatingProjectExecutionListener
+ implements ProjectExecutionListener
+{
+ private final List<ProjectExecutionListener> listeners = new CopyOnWriteArrayList<ProjectExecutionListener>();
+
+ public void beforeProjectExecution( ProjectExecutionEvent event )
+ throws LifecycleExecutionException
+ {
+ for ( ProjectExecutionListener listener : listeners )
+ {
+ listener.beforeProjectExecution( event );
+ }
+ }
+
+ public void beforeProjectLifecycleExecution( ProjectExecutionEvent event )
+ throws LifecycleExecutionException
+ {
+ for ( ProjectExecutionListener listener : listeners )
+ {
+ listener.beforeProjectLifecycleExecution( event );
+ }
+ }
+
+ public void afterProjectExecutionSuccess( ProjectExecutionEvent event )
+ throws LifecycleExecutionException
+ {
+ for ( ProjectExecutionListener listener : listeners )
+ {
+ listener.afterProjectExecutionSuccess( event );
+ }
+ }
+
+ public void afterProjectExecutionFailure( ProjectExecutionEvent event )
+ {
+ for ( ProjectExecutionListener listener : listeners )
+ {
+ listener.afterProjectExecutionFailure( event );
+ }
+ }
+
+ public void addProjectExecutionListener( ProjectExecutionListener listener )
+ {
+ this.listeners.add( listener );
+ }
+
+ public void removeProjectExecutionListener( ProjectExecutionListener listener )
+ {
+ this.listeners.remove( listener );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/EmptyLifecyclePluginAnalyzer.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/EmptyLifecyclePluginAnalyzer.java
new file mode 100644
index 00000000..f9bbb2ba
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/EmptyLifecyclePluginAnalyzer.java
@@ -0,0 +1,77 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class EmptyLifecyclePluginAnalyzer
+ implements LifeCyclePluginAnalyzer
+{
+ public Set<Plugin> getPluginsBoundByDefaultToAllLifecycles( String packaging )
+ {
+ Set<Plugin> plugins;
+
+ // NOTE: The upper-case packaging name is intentional, that's a special hinting mode used for certain tests
+ if ( "JAR".equals( packaging ) )
+ {
+ plugins = new LinkedHashSet<Plugin>();
+
+ plugins.add( newPlugin( "maven-compiler-plugin", "compile", "testCompile" ) );
+ plugins.add( newPlugin( "maven-resources-plugin", "resources", "testResources" ) );
+ plugins.add( newPlugin( "maven-surefire-plugin", "test" ) );
+ plugins.add( newPlugin( "maven-jar-plugin", "jar" ) );
+ plugins.add( newPlugin( "maven-install-plugin", "install" ) );
+ plugins.add( newPlugin( "maven-deploy-plugin", "deploy" ) );
+ }
+ else
+ {
+ plugins = Collections.emptySet();
+ }
+
+ return plugins;
+ }
+
+ private Plugin newPlugin( String artifactId, String... goals )
+ {
+ Plugin plugin = new Plugin();
+
+ plugin.setGroupId( "org.apache.maven.plugins" );
+ plugin.setArtifactId( artifactId );
+
+ for ( String goal : goals )
+ {
+ PluginExecution pluginExecution = new PluginExecution();
+ pluginExecution.setId( "default-" + goal );
+ pluginExecution.addGoal( goal );
+ plugin.addExecution( pluginExecution );
+ }
+
+ return plugin;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorSubModulesTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorSubModulesTest.java
new file mode 100644
index 00000000..01ebeac0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorSubModulesTest.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+
+package org.apache.maven.lifecycle;
+
+import org.apache.maven.AbstractCoreMavenComponentTestCase;
+import org.apache.maven.exception.ExceptionHandler;
+import org.apache.maven.lifecycle.internal.LifecycleDependencyResolver;
+import org.apache.maven.lifecycle.internal.LifecycleExecutionPlanCalculator;
+import org.apache.maven.lifecycle.internal.LifecycleModuleBuilder;
+import org.apache.maven.lifecycle.internal.LifecycleTaskSegmentCalculator;
+import org.apache.maven.lifecycle.internal.MojoExecutor;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+/**
+ * Just asserts that it's able to create those components. Handy when plexus gets a nervous breakdown.
+ *
+ * @author Kristian Rosenvold
+ */
+
+public class LifecycleExecutorSubModulesTest
+ extends AbstractCoreMavenComponentTestCase
+{
+ @Requirement
+ private DefaultLifecycles defaultLifeCycles;
+
+ @Requirement
+ private MojoExecutor mojoExecutor;
+
+ @Requirement
+ private LifecycleModuleBuilder lifeCycleBuilder;
+
+ @Requirement
+ private LifecycleDependencyResolver lifeCycleDependencyResolver;
+
+ @Requirement
+ private LifecycleExecutionPlanCalculator lifeCycleExecutionPlanCalculator;
+
+ @Requirement
+ private LifeCyclePluginAnalyzer lifeCyclePluginAnalyzer;
+
+ @Requirement
+ private LifecycleTaskSegmentCalculator lifeCycleTaskSegmentCalculator;
+
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ defaultLifeCycles = lookup( DefaultLifecycles.class );
+ mojoExecutor = lookup( MojoExecutor.class );
+ lifeCycleBuilder = lookup( LifecycleModuleBuilder.class );
+ lifeCycleDependencyResolver = lookup( LifecycleDependencyResolver.class );
+ lifeCycleExecutionPlanCalculator = lookup( LifecycleExecutionPlanCalculator.class );
+ lifeCyclePluginAnalyzer = lookup( LifeCyclePluginAnalyzer.class );
+ lifeCycleTaskSegmentCalculator = lookup( LifecycleTaskSegmentCalculator.class );
+ lookup( ExceptionHandler.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ defaultLifeCycles = null;
+ super.tearDown();
+ }
+
+ protected String getProjectsDirectory()
+ {
+ return "src/test/projects/lifecycle-executor";
+ }
+
+ public void testCrweation()
+ throws Exception
+ {
+ assertNotNull( defaultLifeCycles );
+ assertNotNull( mojoExecutor );
+ assertNotNull( lifeCycleBuilder );
+ assertNotNull( lifeCycleDependencyResolver );
+ assertNotNull( lifeCycleExecutionPlanCalculator );
+ assertNotNull( lifeCyclePluginAnalyzer );
+ assertNotNull( lifeCycleTaskSegmentCalculator );
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java
new file mode 100644
index 00000000..99b07e34
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java
@@ -0,0 +1,553 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.AbstractCoreMavenComponentTestCase;
+import org.apache.maven.exception.ExceptionHandler;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.MojoExecutionEvent;
+import org.apache.maven.execution.MojoExecutionListener;
+import org.apache.maven.execution.ProjectDependencyGraph;
+import org.apache.maven.execution.ProjectExecutionEvent;
+import org.apache.maven.execution.ProjectExecutionListener;
+import org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator;
+import org.apache.maven.lifecycle.internal.ExecutionPlanItem;
+import org.apache.maven.lifecycle.internal.LifecycleExecutionPlanCalculator;
+import org.apache.maven.lifecycle.internal.LifecycleTask;
+import org.apache.maven.lifecycle.internal.LifecycleTaskSegmentCalculator;
+import org.apache.maven.lifecycle.internal.MojoDescriptorCreator;
+import org.apache.maven.lifecycle.internal.TaskSegment;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+public class LifecycleExecutorTest
+ extends AbstractCoreMavenComponentTestCase
+{
+ @Requirement
+ private DefaultLifecycleExecutor lifecycleExecutor;
+
+ @Requirement
+ private DefaultLifecycleTaskSegmentCalculator lifeCycleTaskSegmentCalculator;
+
+ @Requirement
+ private LifecycleExecutionPlanCalculator lifeCycleExecutionPlanCalculator;
+
+ @Requirement
+ private MojoDescriptorCreator mojoDescriptorCreator;
+
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ lifecycleExecutor = (DefaultLifecycleExecutor) lookup( LifecycleExecutor.class );
+ lifeCycleTaskSegmentCalculator =
+ (DefaultLifecycleTaskSegmentCalculator) lookup( LifecycleTaskSegmentCalculator.class );
+ lifeCycleExecutionPlanCalculator = lookup( LifecycleExecutionPlanCalculator.class );
+ mojoDescriptorCreator = lookup( MojoDescriptorCreator.class );
+ lookup( ExceptionHandler.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ lifecycleExecutor = null;
+ super.tearDown();
+ }
+
+ protected String getProjectsDirectory()
+ {
+ return "src/test/projects/lifecycle-executor";
+ }
+
+ // -----------------------------------------------------------------------------------------------
+ // Tests which exercise the lifecycle executor when it is dealing with default lifecycle phases.
+ // -----------------------------------------------------------------------------------------------
+
+ public void testCalculationOfBuildPlanWithIndividualTaskWherePluginIsSpecifiedInThePom()
+ throws Exception
+ {
+ // We are doing something like "mvn resources:resources" where no version is specified but this
+ // project we are working on has the version specified in the POM so the version should come from there.
+ File pom = getProject( "project-basic" );
+ MavenSession session = createMavenSession( pom );
+ assertEquals( "project-basic", session.getCurrentProject().getArtifactId() );
+ assertEquals( "1.0", session.getCurrentProject().getVersion() );
+ List<MojoExecution> executionPlan = getExecutions( calculateExecutionPlan( session, "resources:resources" ) );
+ assertEquals( 1, executionPlan.size() );
+ MojoExecution mojoExecution = executionPlan.get( 0 );
+ assertNotNull( mojoExecution );
+ assertEquals( "org.apache.maven.plugins",
+ mojoExecution.getMojoDescriptor().getPluginDescriptor().getGroupId() );
+ assertEquals( "maven-resources-plugin",
+ mojoExecution.getMojoDescriptor().getPluginDescriptor().getArtifactId() );
+ assertEquals( "0.1", mojoExecution.getMojoDescriptor().getPluginDescriptor().getVersion() );
+ }
+
+ public void testCalculationOfBuildPlanWithIndividualTaskOfTheCleanLifecycle()
+ throws Exception
+ {
+ // We are doing something like "mvn clean:clean" where no version is specified but this
+ // project we are working on has the version specified in the POM so the version should come from there.
+ File pom = getProject( "project-basic" );
+ MavenSession session = createMavenSession( pom );
+ assertEquals( "project-basic", session.getCurrentProject().getArtifactId() );
+ assertEquals( "1.0", session.getCurrentProject().getVersion() );
+ List<MojoExecution> executionPlan = getExecutions( calculateExecutionPlan( session, "clean" ) );
+ assertEquals( 1, executionPlan.size() );
+ MojoExecution mojoExecution = executionPlan.get( 0 );
+ assertNotNull( mojoExecution );
+ assertEquals( "org.apache.maven.plugins",
+ mojoExecution.getMojoDescriptor().getPluginDescriptor().getGroupId() );
+ assertEquals( "maven-clean-plugin", mojoExecution.getMojoDescriptor().getPluginDescriptor().getArtifactId() );
+ assertEquals( "0.1", mojoExecution.getMojoDescriptor().getPluginDescriptor().getVersion() );
+ }
+
+ public void testCalculationOfBuildPlanWithIndividualTaskOfTheCleanCleanGoal()
+ throws Exception
+ {
+ // We are doing something like "mvn clean:clean" where no version is specified but this
+ // project we are working on has the version specified in the POM so the version should come from there.
+ File pom = getProject( "project-basic" );
+ MavenSession session = createMavenSession( pom );
+ assertEquals( "project-basic", session.getCurrentProject().getArtifactId() );
+ assertEquals( "1.0", session.getCurrentProject().getVersion() );
+ List<MojoExecution> executionPlan = getExecutions( calculateExecutionPlan( session, "clean:clean" ) );
+ assertEquals( 1, executionPlan.size() );
+ MojoExecution mojoExecution = executionPlan.get( 0 );
+ assertNotNull( mojoExecution );
+ assertEquals( "org.apache.maven.plugins",
+ mojoExecution.getMojoDescriptor().getPluginDescriptor().getGroupId() );
+ assertEquals( "maven-clean-plugin", mojoExecution.getMojoDescriptor().getPluginDescriptor().getArtifactId() );
+ assertEquals( "0.1", mojoExecution.getMojoDescriptor().getPluginDescriptor().getVersion() );
+ }
+
+ List<MojoExecution> getExecutions( MavenExecutionPlan mavenExecutionPlan )
+ {
+ List<MojoExecution> result = new ArrayList<MojoExecution>();
+ for ( ExecutionPlanItem executionPlanItem : mavenExecutionPlan )
+ {
+ result.add( executionPlanItem.getMojoExecution() );
+ }
+ return result;
+ }
+
+ // We need to take in multiple lifecycles
+ public void testCalculationOfBuildPlanTasksOfTheCleanLifecycleAndTheInstallLifecycle()
+ throws Exception
+ {
+ File pom = getProject( "project-with-additional-lifecycle-elements" );
+ MavenSession session = createMavenSession( pom );
+ assertEquals( "project-with-additional-lifecycle-elements", session.getCurrentProject().getArtifactId() );
+ assertEquals( "1.0", session.getCurrentProject().getVersion() );
+ List<MojoExecution> executionPlan = getExecutions( calculateExecutionPlan( session, "clean", "install" ) );
+
+ //[01] clean:clean
+ //[02] resources:resources
+ //[03] compiler:compile
+ //[04] it:generate-metadata
+ //[05] resources:testResources
+ //[06] compiler:testCompile
+ //[07] it:generate-test-metadata
+ //[08] surefire:test
+ //[09] jar:jar
+ //[10] install:install
+ //
+ assertEquals( 10, executionPlan.size() );
+
+ assertEquals( "clean:clean", executionPlan.get( 0 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "resources:resources", executionPlan.get( 1 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "compiler:compile", executionPlan.get( 2 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "it:generate-metadata", executionPlan.get( 3 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "resources:testResources", executionPlan.get( 4 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "compiler:testCompile", executionPlan.get( 5 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "it:generate-test-metadata", executionPlan.get( 6 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "surefire:test", executionPlan.get( 7 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "jar:jar", executionPlan.get( 8 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "install:install", executionPlan.get( 9 ).getMojoDescriptor().getFullGoalName() );
+ }
+
+ // We need to take in multiple lifecycles
+ public void testCalculationOfBuildPlanWithMultipleExecutionsOfModello()
+ throws Exception
+ {
+ File pom = getProject( "project-with-multiple-executions" );
+ MavenSession session = createMavenSession( pom );
+ assertEquals( "project-with-multiple-executions", session.getCurrentProject().getArtifactId() );
+ assertEquals( "1.0.1", session.getCurrentProject().getVersion() );
+
+ MavenExecutionPlan plan = calculateExecutionPlan( session, "clean", "install" );
+
+ List<MojoExecution> executions = getExecutions( plan );
+
+ //[01] clean:clean
+ //[02] modello:xpp3-writer
+ //[03] modello:java
+ //[04] modello:xpp3-reader
+ //[05] modello:xpp3-writer
+ //[06] modello:java
+ //[07] modello:xpp3-reader
+ //[08] plugin:descriptor
+ //[09] resources:resources
+ //[10] compiler:compile
+ //[11] resources:testResources
+ //[12] compiler:testCompile
+ //[13] surefire:test
+ //[14] jar:jar
+ //[15] plugin:addPluginArtifactMetadata
+ //[16] install:install
+ //
+
+ assertEquals( 16, executions.size() );
+
+ assertEquals( "clean:clean", executions.get( 0 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "it:xpp3-writer", executions.get( 1 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "it:java", executions.get( 2 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "it:xpp3-reader", executions.get( 3 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "it:xpp3-writer", executions.get( 4 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "it:java", executions.get( 5 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "it:xpp3-reader", executions.get( 6 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "resources:resources", executions.get( 7 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "compiler:compile", executions.get( 8 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "plugin:descriptor", executions.get( 9 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "resources:testResources", executions.get( 10 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "compiler:testCompile", executions.get( 11 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "surefire:test", executions.get( 12 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "jar:jar", executions.get( 13 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "plugin:addPluginArtifactMetadata", executions.get( 14 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "install:install", executions.get( 15 ).getMojoDescriptor().getFullGoalName() );
+
+ assertEquals( "src/main/mdo/remote-resources.mdo",
+ new MojoExecutionXPathContainer( executions.get( 1 ) ).getValue(
+ "configuration/models[1]/model" ) );
+ assertEquals( "src/main/mdo/supplemental-model.mdo",
+ new MojoExecutionXPathContainer( executions.get( 4 ) ).getValue(
+ "configuration/models[1]/model" ) );
+ }
+
+ public void testLifecycleQueryingUsingADefaultLifecyclePhase()
+ throws Exception
+ {
+ File pom = getProject( "project-with-additional-lifecycle-elements" );
+ MavenSession session = createMavenSession( pom );
+ assertEquals( "project-with-additional-lifecycle-elements", session.getCurrentProject().getArtifactId() );
+ assertEquals( "1.0", session.getCurrentProject().getVersion() );
+ List<MojoExecution> executionPlan = getExecutions( calculateExecutionPlan( session, "package" ) );
+
+ //[01] resources:resources
+ //[02] compiler:compile
+ //[03] it:generate-metadata
+ //[04] resources:testResources
+ //[05] compiler:testCompile
+ //[06] plexus-component-metadata:generate-test-metadata
+ //[07] surefire:test
+ //[08] jar:jar
+ //
+ assertEquals( 8, executionPlan.size() );
+
+ assertEquals( "resources:resources", executionPlan.get( 0 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "compiler:compile", executionPlan.get( 1 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "it:generate-metadata", executionPlan.get( 2 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "resources:testResources", executionPlan.get( 3 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "compiler:testCompile", executionPlan.get( 4 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "it:generate-test-metadata", executionPlan.get( 5 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "surefire:test", executionPlan.get( 6 ).getMojoDescriptor().getFullGoalName() );
+ assertEquals( "jar:jar", executionPlan.get( 7 ).getMojoDescriptor().getFullGoalName() );
+ }
+
+ public void testLifecyclePluginsRetrievalForDefaultLifecycle()
+ throws Exception
+ {
+ List<Plugin> plugins =
+ new ArrayList<Plugin>( lifecycleExecutor.getPluginsBoundByDefaultToAllLifecycles( "jar" ) );
+
+ assertEquals( 8, plugins.size() );
+ }
+
+ public void testPluginConfigurationCreation()
+ throws Exception
+ {
+ File pom = getProject( "project-with-additional-lifecycle-elements" );
+ MavenSession session = createMavenSession( pom );
+ MojoDescriptor mojoDescriptor =
+ mojoDescriptorCreator.getMojoDescriptor( "org.apache.maven.its.plugins:maven-it-plugin:0.1:java", session,
+ session.getCurrentProject() );
+ Xpp3Dom dom = MojoDescriptorCreator.convert( mojoDescriptor );
+ System.out.println( dom );
+ }
+
+ MavenExecutionPlan calculateExecutionPlan( MavenSession session, String... tasks )
+ throws Exception
+ {
+ List<TaskSegment> taskSegments =
+ lifeCycleTaskSegmentCalculator.calculateTaskSegments( session, Arrays.asList( tasks ) );
+
+ TaskSegment mergedSegment = new TaskSegment( false );
+
+ for ( TaskSegment taskSegment : taskSegments )
+ {
+ mergedSegment.getTasks().addAll( taskSegment.getTasks() );
+ }
+
+ return lifeCycleExecutionPlanCalculator.calculateExecutionPlan( session, session.getCurrentProject(),
+ mergedSegment.getTasks() );
+ }
+
+ public void testInvalidGoalName()
+ throws Exception
+ {
+ File pom = getProject( "project-basic" );
+ MavenSession session = createMavenSession( pom );
+ try
+ {
+ getExecutions( calculateExecutionPlan( session, "resources:" ) );
+ fail( "expected a MojoNotFoundException" );
+ }
+ catch ( MojoNotFoundException e )
+ {
+ assertEquals( "", e.getGoal() );
+ }
+
+ try
+ {
+ getExecutions( calculateExecutionPlan( session, "org.apache.maven.plugins:maven-resources-plugin:0.1:resources:toomany" ) );
+ fail( "expected a MojoNotFoundException" );
+ }
+ catch ( MojoNotFoundException e )
+ {
+ assertEquals( "resources:toomany", e.getGoal() );
+ }
+ }
+
+
+ public void testPluginPrefixRetrieval()
+ throws Exception
+ {
+ File pom = getProject( "project-basic" );
+ MavenSession session = createMavenSession( pom );
+ Plugin plugin = mojoDescriptorCreator.findPluginForPrefix( "resources", session );
+ assertEquals( "org.apache.maven.plugins", plugin.getGroupId() );
+ assertEquals( "maven-resources-plugin", plugin.getArtifactId() );
+ }
+
+ // Prefixes
+
+ public void testFindingPluginPrefixforCleanClean()
+ throws Exception
+ {
+ File pom = getProject( "project-basic" );
+ MavenSession session = createMavenSession( pom );
+ Plugin plugin = mojoDescriptorCreator.findPluginForPrefix( "clean", session );
+ assertNotNull( plugin );
+ }
+
+ public void testSetupMojoExecution()
+ throws Exception
+ {
+ File pom = getProject( "mojo-configuration" );
+
+ MavenSession session = createMavenSession( pom );
+
+ LifecycleTask task = new LifecycleTask( "generate-sources" );
+ MavenExecutionPlan executionPlan =
+ lifeCycleExecutionPlanCalculator.calculateExecutionPlan( session, session.getCurrentProject(),
+ Arrays.asList( (Object) task ), false );
+
+ MojoExecution execution = executionPlan.getMojoExecutions().get(0);
+ assertEquals(execution.toString(), "maven-it-plugin", execution.getArtifactId());
+ assertNull(execution.getConfiguration());
+
+ lifeCycleExecutionPlanCalculator.setupMojoExecution( session, session.getCurrentProject(), execution );
+ assertNotNull(execution.getConfiguration());
+ assertEquals("1.0", execution.getConfiguration().getChild( "version" ).getAttribute( "default-value" ));
+ }
+
+ public void testExecutionListeners()
+ throws Exception
+ {
+ final File pom = getProject( "project-basic" );
+ final MavenSession session = createMavenSession( pom );
+ session.setProjectDependencyGraph( new ProjectDependencyGraph()
+ {
+ public List<MavenProject> getUpstreamProjects( MavenProject project, boolean transitive )
+ {
+ return Collections.emptyList();
+ }
+
+ public List<MavenProject> getSortedProjects()
+ {
+ return Collections.singletonList( session.getCurrentProject() );
+ }
+
+ public List<MavenProject> getDownstreamProjects( MavenProject project, boolean transitive )
+ {
+ return Collections.emptyList();
+ }
+
+ public java.util.List<MavenProject> getAllSortedProjects()
+ {
+ return Collections.emptyList();
+ }
+ } );
+
+ final List<String> log = new ArrayList<String>();
+
+ MojoExecutionListener mojoListener = new MojoExecutionListener()
+ {
+ public void beforeMojoExecution( MojoExecutionEvent event )
+ throws MojoExecutionException
+ {
+ assertNotNull( event.getSession() );
+ assertNotNull( event.getProject() );
+ assertNotNull( event.getExecution() );
+ assertNotNull( event.getMojo() );
+ assertNull( event.getCause() );
+
+ log.add( "beforeMojoExecution " + event.getProject().getArtifactId() + ":"
+ + event.getExecution().getExecutionId() );
+ }
+
+ public void afterMojoExecutionSuccess( MojoExecutionEvent event )
+ throws MojoExecutionException
+ {
+ assertNotNull( event.getSession() );
+ assertNotNull( event.getProject() );
+ assertNotNull( event.getExecution() );
+ assertNotNull( event.getMojo() );
+ assertNull( event.getCause() );
+
+ log.add( "afterMojoExecutionSuccess " + event.getProject().getArtifactId() + ":"
+ + event.getExecution().getExecutionId() );
+ }
+
+ public void afterExecutionFailure( MojoExecutionEvent event )
+ {
+ assertNotNull( event.getSession() );
+ assertNotNull( event.getProject() );
+ assertNotNull( event.getExecution() );
+ assertNotNull( event.getMojo() );
+ assertNotNull( event.getCause() );
+
+ log.add( "afterExecutionFailure " + event.getProject().getArtifactId() + ":"
+ + event.getExecution().getExecutionId() );
+ }
+ };
+ ProjectExecutionListener projectListener = new ProjectExecutionListener()
+ {
+ public void beforeProjectExecution( ProjectExecutionEvent event )
+ throws LifecycleExecutionException
+ {
+ assertNotNull( event.getSession() );
+ assertNotNull( event.getProject() );
+ assertNull( event.getExecutionPlan() );
+ assertNull( event.getCause() );
+
+ log.add( "beforeProjectExecution " + event.getProject().getArtifactId() );
+ }
+
+ public void beforeProjectLifecycleExecution( ProjectExecutionEvent event )
+ throws LifecycleExecutionException
+ {
+ assertNotNull( event.getSession() );
+ assertNotNull( event.getProject() );
+ assertNotNull( event.getExecutionPlan() );
+ assertNull( event.getCause() );
+
+ log.add( "beforeProjectLifecycleExecution " + event.getProject().getArtifactId() );
+ }
+
+ public void afterProjectExecutionSuccess( ProjectExecutionEvent event )
+ throws LifecycleExecutionException
+ {
+ assertNotNull( event.getSession() );
+ assertNotNull( event.getProject() );
+ assertNotNull( event.getExecutionPlan() );
+ assertNull( event.getCause() );
+
+ log.add( "afterProjectExecutionSuccess " + event.getProject().getArtifactId() );
+ }
+
+ public void afterProjectExecutionFailure( ProjectExecutionEvent event )
+ {
+ assertNotNull( event.getSession() );
+ assertNotNull( event.getProject() );
+ assertNull( event.getExecutionPlan() );
+ assertNotNull( event.getCause() );
+
+ log.add( "afterProjectExecutionFailure " + event.getProject().getArtifactId() );
+ }
+ };
+ lookup( DelegatingProjectExecutionListener.class ).addProjectExecutionListener( projectListener );
+ lookup( DelegatingMojoExecutionListener.class ).addMojoExecutionListener( mojoListener );
+
+ try
+ {
+ lifecycleExecutor.execute( session );
+ }
+ finally
+ {
+ lookup( DelegatingProjectExecutionListener.class ).removeProjectExecutionListener( projectListener );
+ lookup( DelegatingMojoExecutionListener.class ).removeMojoExecutionListener( mojoListener );
+ }
+
+ List<String> expectedLog = Arrays.asList( "beforeProjectExecution project-basic", //
+ "beforeProjectLifecycleExecution project-basic", //
+ "beforeMojoExecution project-basic:default-resources", //
+ "afterMojoExecutionSuccess project-basic:default-resources", //
+ "beforeMojoExecution project-basic:default-compile", //
+ "afterMojoExecutionSuccess project-basic:default-compile", //
+ "beforeMojoExecution project-basic:default-testResources", //
+ "afterMojoExecutionSuccess project-basic:default-testResources", //
+ "beforeMojoExecution project-basic:default-testCompile", //
+ "afterMojoExecutionSuccess project-basic:default-testCompile", //
+ "beforeMojoExecution project-basic:default-test", //
+ "afterMojoExecutionSuccess project-basic:default-test", //
+ "beforeMojoExecution project-basic:default-jar", //
+ "afterMojoExecutionSuccess project-basic:default-jar", //
+ "afterProjectExecutionSuccess project-basic" //
+ );
+
+ assertEventLog( expectedLog, log );
+ }
+
+ private static void assertEventLog( List<String> expectedList, List<String> actualList )
+ {
+ assertEquals( toString( expectedList ), toString( actualList ) );
+ }
+
+ private static String toString( List<String> lines )
+ {
+ StringBuilder sb = new StringBuilder();
+ for ( String line : lines )
+ {
+ sb.append( line ).append( '\n' );
+ }
+ return sb.toString();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/MavenExecutionPlanTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/MavenExecutionPlanTest.java
new file mode 100644
index 00000000..4901a65d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/MavenExecutionPlanTest.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.maven.lifecycle;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.lifecycle.internal.ExecutionPlanItem;
+import org.apache.maven.lifecycle.internal.stub.DefaultLifecyclesStub;
+import org.apache.maven.lifecycle.internal.stub.LifecycleExecutionPlanCalculatorStub;
+import org.apache.maven.model.Plugin;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class MavenExecutionPlanTest
+ extends TestCase
+{
+
+ public void testFindLastInPhase()
+ throws Exception
+ {
+ MavenExecutionPlan plan = LifecycleExecutionPlanCalculatorStub.getProjectAExceutionPlan();
+
+ ExecutionPlanItem expected = plan.findLastInPhase( "package" );
+ ExecutionPlanItem beerPhase = plan.findLastInPhase( "BEER" ); // Beer comes straight after package in stub
+ assertEquals( expected, beerPhase );
+ assertNotNull( expected );
+ }
+
+ public void testThreadSafeMojos()
+ throws Exception
+ {
+ MavenExecutionPlan plan = LifecycleExecutionPlanCalculatorStub.getProjectAExceutionPlan();
+ final Set<Plugin> unSafePlugins = plan.getNonThreadSafePlugins();
+ // There is only a single threadsafe plugin here...
+ assertEquals( plan.size() - 1, unSafePlugins.size() );
+
+ }
+
+
+ public void testFindLastWhenFirst()
+ throws Exception
+ {
+ MavenExecutionPlan plan = LifecycleExecutionPlanCalculatorStub.getProjectAExceutionPlan();
+
+ ExecutionPlanItem beerPhase = plan.findLastInPhase(
+ LifecycleExecutionPlanCalculatorStub.VALIDATE.getPhase() ); // Beer comes straight after package in stub
+ assertNull( beerPhase );
+ }
+
+ public void testFindLastInPhaseMisc()
+ throws Exception
+ {
+ MavenExecutionPlan plan = LifecycleExecutionPlanCalculatorStub.getProjectAExceutionPlan();
+
+ assertNull( plan.findLastInPhase( "pacXkage" ) );
+ // Beer comes straight after package in stub, much like real life.
+ assertNotNull( plan.findLastInPhase( LifecycleExecutionPlanCalculatorStub.INITIALIZE.getPhase() ) );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/MojoExecutionXPathContainer.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/MojoExecutionXPathContainer.java
new file mode 100644
index 00000000..6244cc91
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/MojoExecutionXPathContainer.java
@@ -0,0 +1,72 @@
+package org.apache.maven.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import org.apache.commons.jxpath.JXPathContext;
+import org.apache.commons.jxpath.JXPathNotFoundException;
+import org.apache.commons.jxpath.ri.JXPathContextReferenceImpl;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.project.harness.Xpp3DomPointerFactory;
+
+public class MojoExecutionXPathContainer
+{
+ private JXPathContext context;
+
+ static
+ {
+ JXPathContextReferenceImpl.addNodePointerFactory( new Xpp3DomPointerFactory() );
+ }
+
+ public MojoExecutionXPathContainer( MojoExecution mojoExecution )
+ throws IOException
+ {
+ context = JXPathContext.newContext( mojoExecution );
+ }
+
+ public Iterator<?> getIteratorForXPathExpression( String expression )
+ {
+ return context.iterate( expression );
+ }
+
+ public boolean containsXPathExpression( String expression )
+ {
+ return context.getValue( expression ) != null;
+ }
+
+ public Object getValue( String expression )
+ {
+ try
+ {
+ return context.getValue( expression );
+ }
+ catch ( JXPathNotFoundException e )
+ {
+ return null;
+ }
+ }
+
+ public boolean xPathExpressionEqualsValue( String expression, String value )
+ {
+ return context.getValue( expression ) != null && context.getValue( expression ).equals( value );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuildListCalculatorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuildListCalculatorTest.java
new file mode 100644
index 00000000..a0039832
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuildListCalculatorTest.java
@@ -0,0 +1,49 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import junit.framework.TestCase;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.internal.stub.LifecycleTaskSegmentCalculatorStub;
+import org.apache.maven.lifecycle.internal.stub.ProjectDependencyGraphStub;
+
+import java.util.List;
+
+public class BuildListCalculatorTest
+ extends TestCase
+{
+
+ public void testCalculateProjectBuilds()
+ throws Exception
+ {
+ LifecycleTaskSegmentCalculator lifecycleTaskSegmentCalculator = getTaskSegmentCalculator();
+ BuildListCalculator buildListCalculator = new BuildListCalculator();
+ final MavenSession session = ProjectDependencyGraphStub.getMavenSession();
+ List<TaskSegment> taskSegments = lifecycleTaskSegmentCalculator.calculateTaskSegments( session );
+ final ProjectBuildList buildList = buildListCalculator.calculateProjectBuilds( session, taskSegments );
+ final ProjectBuildList segments = buildList.getByTaskSegment( taskSegments.get( 0 ) );
+ assertEquals( "Stub data contains 3 segments", 3, taskSegments.size() );
+ assertEquals( "Stub data contains 6 items", 6, segments.size() );
+ final ProjectSegment build = segments.get( 0 );
+ assertNotNull( build );
+ }
+
+ private static LifecycleTaskSegmentCalculator getTaskSegmentCalculator()
+ {
+ return new LifecycleTaskSegmentCalculatorStub();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuilderCommonTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuilderCommonTest.java
new file mode 100644
index 00000000..6f896d85
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuilderCommonTest.java
@@ -0,0 +1,76 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import junit.framework.TestCase;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.MavenExecutionPlan;
+import org.apache.maven.lifecycle.internal.builder.BuilderCommon;
+import org.apache.maven.lifecycle.internal.stub.LifecycleExecutionPlanCalculatorStub;
+import org.apache.maven.lifecycle.internal.stub.LoggerStub;
+import org.apache.maven.lifecycle.internal.stub.ProjectDependencyGraphStub;
+
+import java.util.HashSet;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class BuilderCommonTest
+ extends TestCase
+{
+ public void testResolveBuildPlan()
+ throws Exception
+ {
+ MavenSession original = ProjectDependencyGraphStub.getMavenSession();
+
+ final TaskSegment taskSegment1 = new TaskSegment( false );
+ final MavenSession session1 = original.clone();
+ session1.setCurrentProject( ProjectDependencyGraphStub.A );
+
+ final BuilderCommon builderCommon = getBuilderCommon();
+ final MavenExecutionPlan plan =
+ builderCommon.resolveBuildPlan( session1, ProjectDependencyGraphStub.A, taskSegment1,
+ new HashSet<Artifact>() );
+ assertEquals( LifecycleExecutionPlanCalculatorStub.getProjectAExceutionPlan().size(), plan.size() );
+
+ }
+
+
+ public void testHandleBuildError()
+ throws Exception
+ {
+ }
+
+ public void testAttachToThread()
+ throws Exception
+ {
+ }
+
+ public void testGetKey()
+ throws Exception
+ {
+ }
+
+ public static BuilderCommon getBuilderCommon()
+ {
+ final LifecycleDebugLogger logger = new LifecycleDebugLogger( new LoggerStub() );
+ return new BuilderCommon( logger, new LifecycleExecutionPlanCalculatorStub(),
+ new LoggerStub() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ConcurrencyDependencyGraphTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ConcurrencyDependencyGraphTest.java
new file mode 100644
index 00000000..9ab06011
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ConcurrencyDependencyGraphTest.java
@@ -0,0 +1,94 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.ProjectDependencyGraph;
+import org.apache.maven.lifecycle.LifecycleNotFoundException;
+import org.apache.maven.lifecycle.LifecyclePhaseNotFoundException;
+import org.apache.maven.lifecycle.internal.builder.multithreaded.ConcurrencyDependencyGraph;
+import org.apache.maven.lifecycle.internal.stub.ProjectDependencyGraphStub;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.project.MavenProject;
+
+import java.util.List;
+
+import static org.apache.maven.lifecycle.internal.stub.ProjectDependencyGraphStub.*;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class ConcurrencyDependencyGraphTest
+ extends junit.framework.TestCase
+{
+ public void testConcurrencyGraphPrimaryVersion()
+ throws InvalidPluginDescriptorException, PluginVersionResolutionException, PluginDescriptorParsingException,
+ NoPluginFoundForPrefixException, MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException
+ {
+ ProjectDependencyGraph dependencyGraph = new ProjectDependencyGraphStub();
+ final MavenSession session = ProjectDependencyGraphStub.getMavenSession();
+
+ ConcurrencyDependencyGraph graph =
+ new ConcurrencyDependencyGraph( getProjectBuildList( session ), dependencyGraph );
+
+ final List<MavenProject> projectBuilds = graph.getRootSchedulableBuilds();
+ assertEquals( 1, projectBuilds.size() );
+ assertEquals( A, projectBuilds.get( 0 ) );
+
+ final List<MavenProject> subsequent = graph.markAsFinished( A );
+ assertEquals( 2, subsequent.size() );
+ assertEquals( ProjectDependencyGraphStub.B, subsequent.get( 0 ) );
+ assertEquals( C, subsequent.get( 1 ) );
+
+ final List<MavenProject> bDescendants = graph.markAsFinished( B );
+ assertEquals( 1, bDescendants.size() );
+ assertEquals( Y, bDescendants.get( 0 ) );
+
+ final List<MavenProject> cDescendants = graph.markAsFinished( C );
+ assertEquals( 2, cDescendants.size() );
+ assertEquals( X, cDescendants.get( 0 ) );
+ assertEquals( Z, cDescendants.get( 1 ) );
+ }
+
+ public void testConcurrencyGraphDifferentCompletionOrder()
+ throws InvalidPluginDescriptorException, PluginVersionResolutionException, PluginDescriptorParsingException,
+ NoPluginFoundForPrefixException, MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException
+ {
+ ProjectDependencyGraph dependencyGraph = new ProjectDependencyGraphStub();
+ final MavenSession session = ProjectDependencyGraphStub.getMavenSession();
+ ConcurrencyDependencyGraph graph =
+ new ConcurrencyDependencyGraph( getProjectBuildList( session ), dependencyGraph );
+
+ graph.markAsFinished( A );
+ final List<MavenProject> cDescendants = graph.markAsFinished( C );
+ assertEquals( 1, cDescendants.size() );
+ assertEquals( Z, cDescendants.get( 0 ) );
+
+ final List<MavenProject> bDescendants = graph.markAsFinished( B );
+ assertEquals( 2, bDescendants.size() );
+ assertEquals( X, bDescendants.get( 0 ) );
+ assertEquals( Y, bDescendants.get( 1 ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java
new file mode 100644
index 00000000..a9af5668
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java
@@ -0,0 +1,82 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import org.apache.maven.AbstractCoreMavenComponentTestCase;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.MavenExecutionPlan;
+import org.apache.maven.lifecycle.internal.stub.BuildPluginManagerStub;
+import org.apache.maven.lifecycle.internal.stub.DefaultLifecyclesStub;
+import org.apache.maven.lifecycle.internal.stub.PluginPrefixResolverStub;
+import org.apache.maven.lifecycle.internal.stub.PluginVersionResolverStub;
+import org.apache.maven.lifecycle.internal.stub.ProjectDependencyGraphStub;
+
+/**
+ * @author Kristian Rosenvold>
+ */
+public class LifecycleExecutionPlanCalculatorTest
+ extends AbstractCoreMavenComponentTestCase
+{
+
+ public void testCalculateExecutionPlanWithGoalTasks()
+ throws Exception
+ {
+ MojoDescriptorCreator mojoDescriptorCreator = createMojoDescriptorCreator();
+ LifecycleExecutionPlanCalculator lifecycleExecutionPlanCalculator =
+ createExecutionPlaceCalculator( mojoDescriptorCreator );
+
+ final GoalTask goalTask1 = new GoalTask( "compiler:compile" );
+ final GoalTask goalTask2 = new GoalTask( "surefire:test" );
+ final TaskSegment taskSegment1 = new TaskSegment( false, goalTask1, goalTask2 );
+ final MavenSession session1 = ProjectDependencyGraphStub.getMavenSession( ProjectDependencyGraphStub.A );
+
+ MavenExecutionPlan executionPlan =
+ lifecycleExecutionPlanCalculator.calculateExecutionPlan( session1, ProjectDependencyGraphStub.A,
+ taskSegment1.getTasks() );
+ assertEquals( 2, executionPlan.size() );
+
+ final GoalTask goalTask3 = new GoalTask( "surefire:test" );
+ final TaskSegment taskSegment2 = new TaskSegment( false, goalTask1, goalTask2, goalTask3 );
+ MavenExecutionPlan executionPlan2 =
+ lifecycleExecutionPlanCalculator.calculateExecutionPlan( session1, ProjectDependencyGraphStub.A,
+ taskSegment2.getTasks() );
+ assertEquals( 3, executionPlan2.size() );
+ }
+
+ // Maybe also make one with LifeCycleTasks
+
+ public static LifecycleExecutionPlanCalculator createExecutionPlaceCalculator( MojoDescriptorCreator mojoDescriptorCreator )
+ {
+ LifecyclePluginResolver lifecyclePluginResolver = new LifecyclePluginResolver( new PluginVersionResolverStub() );
+ return new DefaultLifecycleExecutionPlanCalculator( new BuildPluginManagerStub(),
+ DefaultLifecyclesStub.createDefaultLifecycles(),
+ mojoDescriptorCreator, lifecyclePluginResolver );
+ }
+
+ public static MojoDescriptorCreator createMojoDescriptorCreator()
+ {
+ return new MojoDescriptorCreator( new PluginVersionResolverStub(), new BuildPluginManagerStub(),
+ new PluginPrefixResolverStub(),
+ new LifecyclePluginResolver( new PluginVersionResolverStub() ) );
+ }
+
+ @Override
+ protected String getProjectsDirectory()
+ {
+ return "src/test/projects/lifecycle-executor";
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculatorImplTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculatorImplTest.java
new file mode 100644
index 00000000..5db316f8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculatorImplTest.java
@@ -0,0 +1,57 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.internal.stub.LifecycleTaskSegmentCalculatorStub;
+import org.apache.maven.lifecycle.internal.stub.ProjectDependencyGraphStub;
+
+import java.util.List;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class LifecycleTaskSegmentCalculatorImplTest
+ extends TestCase
+{
+ public void testCalculateProjectBuilds()
+ throws Exception
+ {
+ LifecycleTaskSegmentCalculator lifecycleTaskSegmentCalculator = getTaskSegmentCalculator();
+ BuildListCalculator buildListCalculator = new BuildListCalculator();
+ final MavenSession session = ProjectDependencyGraphStub.getMavenSession();
+ List<TaskSegment> taskSegments = lifecycleTaskSegmentCalculator.calculateTaskSegments( session );
+
+ final ProjectBuildList buildList = buildListCalculator.calculateProjectBuilds( session, taskSegments );
+ final ProjectBuildList segments = buildList.getByTaskSegment( taskSegments.get( 0 ) );
+ assertEquals( "Stub data contains 3 segments", 3, taskSegments.size() );
+ assertEquals( "Stub data contains 6 items", 6, segments.size() );
+ final ProjectSegment build = segments.get( 0 );
+ assertNotNull( build );
+ }
+
+ private static LifecycleTaskSegmentCalculator getTaskSegmentCalculator()
+ {
+ return new LifecycleTaskSegmentCalculatorStub();
+ }
+
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/PhaseRecorderTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/PhaseRecorderTest.java
new file mode 100644
index 00000000..f3d6422c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/PhaseRecorderTest.java
@@ -0,0 +1,49 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import junit.framework.TestCase;
+
+import org.apache.maven.lifecycle.MavenExecutionPlan;
+import org.apache.maven.lifecycle.internal.stub.LifecycleExecutionPlanCalculatorStub;
+import org.apache.maven.lifecycle.internal.stub.ProjectDependencyGraphStub;
+import org.apache.maven.plugin.MojoExecution;
+
+import java.util.List;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class PhaseRecorderTest extends TestCase
+{
+ public void testObserveExecution() throws Exception {
+ PhaseRecorder phaseRecorder = new PhaseRecorder( ProjectDependencyGraphStub.A);
+ MavenExecutionPlan plan = LifecycleExecutionPlanCalculatorStub.getProjectAExceutionPlan();
+ final List<MojoExecution> executions = plan.getMojoExecutions();
+
+ final MojoExecution mojoExecution1 = executions.get( 0 );
+ final MojoExecution mojoExecution2 = executions.get( 1 );
+ phaseRecorder.observeExecution( mojoExecution1 );
+
+ assertTrue( ProjectDependencyGraphStub.A.hasLifecyclePhase( mojoExecution1.getLifecyclePhase() ));
+ assertFalse( ProjectDependencyGraphStub.A.hasLifecyclePhase( mojoExecution2.getLifecyclePhase() ));
+
+ assertFalse( phaseRecorder.isDifferentPhase( mojoExecution1));
+ assertTrue( phaseRecorder.isDifferentPhase( mojoExecution2));
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ProjectBuildListTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ProjectBuildListTest.java
new file mode 100644
index 00000000..047ef9fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ProjectBuildListTest.java
@@ -0,0 +1,42 @@
+package org.apache.maven.lifecycle.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import junit.framework.TestCase;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.internal.stub.ProjectDependencyGraphStub;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class ProjectBuildListTest
+ extends TestCase
+{
+
+ public void testGetByTaskSegment()
+ throws Exception
+ {
+ final MavenSession session = ProjectDependencyGraphStub.getMavenSession();
+ ProjectBuildList projectBuildList = ProjectDependencyGraphStub.getProjectBuildList( session );
+ TaskSegment taskSegment = projectBuildList.get( 0 ).getTaskSegment();
+ assertTrue( "This test assumes there are at least 6 elements in projectBuilds", projectBuildList.size() >= 6 );
+
+ final ProjectBuildList byTaskSegment = projectBuildList.getByTaskSegment( taskSegment );
+ assertEquals( projectBuildList.size(),
+ byTaskSegment.size() ); // Todo: Make multiple segments on projectBuildList
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxerTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxerTest.java
new file mode 100644
index 00000000..dc75a947
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxerTest.java
@@ -0,0 +1,167 @@
+package org.apache.maven.lifecycle.internal.builder.multithreaded;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import junit.framework.TestCase;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.LifecycleNotFoundException;
+import org.apache.maven.lifecycle.LifecyclePhaseNotFoundException;
+import org.apache.maven.lifecycle.internal.ProjectBuildList;
+import org.apache.maven.lifecycle.internal.ProjectSegment;
+import org.apache.maven.lifecycle.internal.builder.multithreaded.ThreadOutputMuxer;
+import org.apache.maven.lifecycle.internal.stub.ProjectDependencyGraphStub;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CompletionService;
+import java.util.concurrent.ExecutorCompletionService;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class ThreadOutputMuxerTest
+ extends TestCase
+{
+
+ final String paid = "Paid";
+
+ final String in = "In";
+
+ final String full = "Full";
+
+ public void testSingleThreaded()
+ throws Exception
+ {
+ ProjectBuildList src = getProjectBuildList();
+ ProjectBuildList projectBuildList =
+ new ProjectBuildList( Arrays.asList( src.get( 0 ), src.get( 1 ), src.get( 2 ) ) );
+
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+ PrintStream systemOut = new PrintStream( byteArrayOutputStream );
+ ThreadOutputMuxer threadOutputMuxer = new ThreadOutputMuxer( projectBuildList, systemOut );
+
+ threadOutputMuxer.associateThreadWithProjectSegment( projectBuildList.get( 0 ) );
+ System.out.print( paid ); // No, this does not print to system.out. It's part of the test
+ assertEquals( paid.length(), byteArrayOutputStream.size() );
+ threadOutputMuxer.associateThreadWithProjectSegment( projectBuildList.get( 1 ) );
+ System.out.print( in ); // No, this does not print to system.out. It's part of the test
+ assertEquals( paid.length(), byteArrayOutputStream.size() );
+ threadOutputMuxer.associateThreadWithProjectSegment( projectBuildList.get( 2 ) );
+ System.out.print( full ); // No, this does not print to system.out. It's part of the test
+ assertEquals( paid.length(), byteArrayOutputStream.size() );
+
+ threadOutputMuxer.setThisModuleComplete( projectBuildList.get( 0 ) );
+ threadOutputMuxer.setThisModuleComplete( projectBuildList.get( 1 ) );
+ threadOutputMuxer.setThisModuleComplete( projectBuildList.get( 2 ) );
+ threadOutputMuxer.close();
+ assertEquals( ( paid + in + full ).length(), byteArrayOutputStream.size() );
+ }
+
+ public void testMultiThreaded()
+ throws Exception
+ {
+ ProjectBuildList projectBuildList = getProjectBuildList();
+
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+ PrintStream systemOut = new PrintStream( byteArrayOutputStream );
+ final ThreadOutputMuxer threadOutputMuxer = new ThreadOutputMuxer( projectBuildList, systemOut );
+
+ final List<String> stringList =
+ Arrays.asList( "Thinkin", "of", "a", "master", "plan", "Cuz", "ain’t", "nuthin", "but", "sweat", "inside",
+ "my", "hand" );
+ Iterator<String> lyrics = stringList.iterator();
+
+ ExecutorService executor = Executors.newFixedThreadPool( 10 );
+ CompletionService<ProjectSegment> service = new ExecutorCompletionService<ProjectSegment>( executor );
+
+ List<Future<ProjectSegment>> futures = new ArrayList<Future<ProjectSegment>>();
+ for ( ProjectSegment projectBuild : projectBuildList )
+ {
+ final Future<ProjectSegment> buildFuture =
+ service.submit( new Outputter( threadOutputMuxer, projectBuild, lyrics.next() ) );
+ futures.add( buildFuture );
+ }
+
+ for ( Future<ProjectSegment> future : futures )
+ {
+ future.get();
+ }
+ int expectedLength = 0;
+ for ( int i = 0; i < projectBuildList.size(); i++ )
+ {
+ expectedLength += stringList.get( i ).length();
+ }
+
+ threadOutputMuxer.close();
+ final byte[] bytes = byteArrayOutputStream.toByteArray();
+ String result = new String( bytes );
+ assertEquals( result, expectedLength, bytes.length );
+
+
+ }
+
+ class Outputter
+ implements Callable<ProjectSegment>
+ {
+ private final ThreadOutputMuxer threadOutputMuxer;
+
+ private final ProjectSegment item;
+
+ private final String response;
+
+ Outputter( ThreadOutputMuxer threadOutputMuxer, ProjectSegment item, String response )
+ {
+ this.threadOutputMuxer = threadOutputMuxer;
+ this.item = item;
+ this.response = response;
+ }
+
+ public ProjectSegment call()
+ throws Exception
+ {
+ threadOutputMuxer.associateThreadWithProjectSegment( item );
+ System.out.print( response );
+ threadOutputMuxer.setThisModuleComplete( item );
+ return item;
+ }
+ }
+
+
+ private ProjectBuildList getProjectBuildList()
+ throws InvalidPluginDescriptorException, PluginVersionResolutionException, PluginDescriptorParsingException,
+ NoPluginFoundForPrefixException, MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException
+ {
+ final MavenSession session = ProjectDependencyGraphStub.getMavenSession();
+ return ProjectDependencyGraphStub.getProjectBuildList( session );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/AboutTheStubs.html b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/AboutTheStubs.html
new file mode 100644
index 00000000..8ad74b96
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/AboutTheStubs.html
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<html>
+<head>
+ <title>About these stubs</title>
+</head>
+<body>
+<h2>Design</h2>
+These stubs can be thought of as hand-coded mock obects. They allow unit tests to test only specific
+aspects of a component while ignoring others.
+
+These stubs form an internally consistent data-set that is not expected to change. They are
+used to test the individual components in the lifecycle with data that has expected characteristics
+and can be asserted as desired.
+
+You can change/extend these stubs, and tests should not be breaking too much, since most tests
+assert using expected values from the stubs. Normally, when you try to use data from the stubs that
+have not been properly populated, you'll get a nullpointer in your test and you then have to
+identify which stub creates that specific piece of data.
+
+The most important stubs are:
+LifecycleExecutionPlanCalculatorStub
+ProjectDependencyGraphStub
+
+Since they define the primary structure of the project/build.
+
+The stubs define three top-level targets that are defined in LifecycleTaskSegmentCalculatorStub;
+clean, aggr and install. "aggr" is an aggregating task while clean and install are lifecyclephases.
+There will be three items in the task list for this dataset.
+
+The stubs also exist at different "levels", where one test might wire stubs into a specific live implementation.
+In the next test that same "live implementation" will be used in a stub version instead.
+
+Not all live services have stubs, but can be added as needed.
+</body>
+</html> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/BuildPluginManagerStub.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/BuildPluginManagerStub.java
new file mode 100644
index 00000000..133bcb3a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/BuildPluginManagerStub.java
@@ -0,0 +1,56 @@
+package org.apache.maven.lifecycle.internal.stub;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.BuildPluginManager;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class BuildPluginManagerStub
+ implements BuildPluginManager
+{
+
+ public PluginDescriptor loadPlugin( Plugin plugin, List<RemoteRepository> repositories, RepositorySystemSession session )
+ {
+ return null;
+ }
+
+ public MojoDescriptor getMojoDescriptor( Plugin plugin, String goal, List<RemoteRepository> repositories,
+ RepositorySystemSession session )
+ {
+ return MojoExecutorStub.createMojoDescriptor( plugin.getKey() );
+ }
+
+ public ClassRealm getPluginRealm( MavenSession session, PluginDescriptor pluginDescriptor )
+ {
+ return null;
+ }
+
+ public void executeMojo( MavenSession session, MojoExecution execution )
+ {
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/CompletionServiceStub.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/CompletionServiceStub.java
new file mode 100644
index 00000000..10a113e9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/CompletionServiceStub.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.maven.lifecycle.internal.stub;
+
+import org.apache.maven.lifecycle.internal.ProjectSegment;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CompletionService;
+import java.util.concurrent.Future;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class CompletionServiceStub
+ implements CompletionService<ProjectSegment>
+{
+ List<FutureTask<ProjectSegment>> projectBuildFutureTasks =
+ Collections.synchronizedList( new ArrayList<FutureTask<ProjectSegment>>() );
+
+ final boolean finishImmediately;
+
+
+ public int size()
+ {
+ return projectBuildFutureTasks.size();
+ }
+
+ public CompletionServiceStub( boolean finishImmediately )
+ {
+ this.finishImmediately = finishImmediately;
+ }
+
+ public Future<ProjectSegment> submit( Callable<ProjectSegment> task )
+ {
+ FutureTask<ProjectSegment> projectBuildFutureTask = new FutureTask<ProjectSegment>( task );
+ projectBuildFutureTasks.add( projectBuildFutureTask );
+ if ( finishImmediately )
+ {
+ projectBuildFutureTask.run();
+ }
+ return projectBuildFutureTask;
+ }
+
+ public Future<ProjectSegment> submit( Runnable task, ProjectSegment result )
+ {
+ FutureTask<ProjectSegment> projectBuildFutureTask = new FutureTask<ProjectSegment>( task, result );
+ projectBuildFutureTasks.add( projectBuildFutureTask );
+ if ( finishImmediately )
+ {
+ projectBuildFutureTask.run();
+ }
+ return projectBuildFutureTask;
+ }
+
+ public Future<ProjectSegment> take()
+ throws InterruptedException
+ {
+ return null;
+ }
+
+ public Future<ProjectSegment> poll()
+ {
+ return null;
+ }
+
+ public Future<ProjectSegment> poll( long timeout, TimeUnit unit )
+ throws InterruptedException
+ {
+ return null;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/DefaultLifecyclesStub.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/DefaultLifecyclesStub.java
new file mode 100644
index 00000000..b366953a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/DefaultLifecyclesStub.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.maven.lifecycle.internal.stub;
+
+import org.apache.maven.lifecycle.DefaultLifecycles;
+import org.apache.maven.lifecycle.Lifecycle;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import static org.apache.maven.lifecycle.internal.stub.LifecycleExecutionPlanCalculatorStub.*;
+
+/**
+ * @author Kristian Rosenvold
+ */
+
+public class DefaultLifecyclesStub
+{
+ public static DefaultLifecycles createDefaultLifecycles()
+ {
+
+ List<String> stubDefaultCycle =
+ Arrays.asList( VALIDATE.getPhase(), INITIALIZE.getPhase(), PROCESS_RESOURCES.getPhase(), COMPILE.getPhase(),
+ TEST.getPhase(), PROCESS_TEST_RESOURCES.getPhase(), PACKAGE.getPhase(), "BEER",
+ INSTALL.getPhase() );
+
+ // The two phases below are really for future expansion, some would say they lack a drink
+ // The point being that they do not really have to match the "real" stuff,
+ List<String> stubCleanCycle = Arrays.asList( PRE_CLEAN.getPhase(), CLEAN.getPhase(), POST_CLEAN.getPhase() );
+
+ List<String> stubSiteCycle =
+ Arrays.asList( PRE_SITE.getPhase(), SITE.getPhase(), POST_SITE.getPhase(), SITE_DEPLOY.getPhase() );
+
+ @SuppressWarnings( "unchecked" )
+ Iterator<List<String>> lcs = Arrays.asList( stubDefaultCycle, stubCleanCycle, stubSiteCycle ).iterator();
+
+ Map<String, Lifecycle> lifeCycles = new HashMap<String, Lifecycle>();
+ for ( String s : DefaultLifecycles.STANDARD_LIFECYCLES )
+ {
+ final Lifecycle lifecycle = new Lifecycle( s, lcs.next(), null );
+ lifeCycles.put( s, lifecycle );
+
+ }
+ return new DefaultLifecycles( lifeCycles, new LoggerStub() );
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ExecutionEventCatapultStub.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ExecutionEventCatapultStub.java
new file mode 100644
index 00000000..e47ec611
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ExecutionEventCatapultStub.java
@@ -0,0 +1,42 @@
+package org.apache.maven.lifecycle.internal.stub;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.ExecutionEvent.Type;
+import org.apache.maven.lifecycle.internal.ExecutionEventCatapult;
+import org.apache.maven.plugin.MojoExecution;
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class ExecutionEventCatapultStub
+ implements ExecutionEventCatapult
+{
+
+ public void fire( Type eventType, MavenSession session, MojoExecution mojoExecution )
+ {
+ }
+
+ public void fire( Type eventType, MavenSession session, MojoExecution mojoExecution, Exception exception )
+ {
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifeCyclePluginAnalyzerStub.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifeCyclePluginAnalyzerStub.java
new file mode 100644
index 00000000..930f5e93
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifeCyclePluginAnalyzerStub.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.maven.lifecycle.internal.stub;
+
+import org.apache.maven.lifecycle.LifeCyclePluginAnalyzer;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class LifeCyclePluginAnalyzerStub
+ implements LifeCyclePluginAnalyzer
+{
+ public Set<Plugin> getPluginsBoundByDefaultToAllLifecycles( String packaging )
+ {
+ Set<Plugin> plugins;
+
+ // NOTE: The upper-case packaging name is intentional, that's a special hinting mode used for certain tests
+ if ( "JAR".equals( packaging ) )
+ {
+ plugins = new LinkedHashSet<Plugin>();
+
+ plugins.add( newPlugin( "maven-compiler-plugin", "compile", "testCompile" ) );
+ plugins.add( newPlugin( "maven-resources-plugin", "resources", "testResources" ) );
+ plugins.add( newPlugin( "maven-surefire-plugin", "test" ) );
+ plugins.add( newPlugin( "maven-jar-plugin", "jar" ) );
+ plugins.add( newPlugin( "maven-install-plugin", "install" ) );
+ plugins.add( newPlugin( "maven-deploy-plugin", "deploy" ) );
+ }
+ else
+ {
+ plugins = Collections.emptySet();
+ }
+
+ return plugins;
+ }
+
+ private Plugin newPlugin( String artifactId, String... goals )
+ {
+ Plugin plugin = new Plugin();
+
+ plugin.setGroupId( "org.apache.maven.plugins" );
+ plugin.setArtifactId( artifactId );
+
+ for ( String goal : goals )
+ {
+ PluginExecution pluginExecution = new PluginExecution();
+ pluginExecution.setId( "default-" + goal );
+ pluginExecution.addGoal( goal );
+ plugin.addExecution( pluginExecution );
+ }
+
+ return plugin;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java
new file mode 100644
index 00000000..cd33a353
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java
@@ -0,0 +1,231 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.maven.lifecycle.internal.stub;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.LifecycleNotFoundException;
+import org.apache.maven.lifecycle.LifecyclePhaseNotFoundException;
+import org.apache.maven.lifecycle.MavenExecutionPlan;
+import org.apache.maven.lifecycle.internal.ExecutionPlanItem;
+import org.apache.maven.lifecycle.internal.LifecycleExecutionPlanCalculator;
+import org.apache.maven.lifecycle.internal.ProjectBuildList;
+import org.apache.maven.lifecycle.internal.ProjectSegment;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class LifecycleExecutionPlanCalculatorStub
+ implements LifecycleExecutionPlanCalculator
+{
+ // clean
+
+ public final static MojoDescriptor PRE_CLEAN = createMojoDescriptor( "pre-clean" );
+
+ public final static MojoDescriptor CLEAN = createMojoDescriptor( "clean" );
+
+ public final static MojoDescriptor POST_CLEAN = createMojoDescriptor( "post-clean" );
+
+ // default (or at least some of them)
+
+ public final static MojoDescriptor VALIDATE = createMojoDescriptor( "validate" );
+
+ public final static MojoDescriptor INITIALIZE = createMojoDescriptor( "initialize" );
+
+ public final static MojoDescriptor TEST_COMPILE = createMojoDescriptor( "test-compile" );
+
+ public final static MojoDescriptor PROCESS_TEST_RESOURCES = createMojoDescriptor( "process-test-resources" );
+
+ public final static MojoDescriptor PROCESS_RESOURCES = createMojoDescriptor( "process-resources" );
+
+ public final static MojoDescriptor COMPILE = createMojoDescriptor( "compile", true );
+
+ public final static MojoDescriptor TEST = createMojoDescriptor( "test" );
+
+ public final static MojoDescriptor PACKAGE = createMojoDescriptor( "package" );
+
+ public final static MojoDescriptor INSTALL = createMojoDescriptor( "install" );
+
+ // site
+
+ public final static MojoDescriptor PRE_SITE = createMojoDescriptor( "pre-site" );
+
+ public final static MojoDescriptor SITE = createMojoDescriptor( "site" );
+
+ public final static MojoDescriptor POST_SITE = createMojoDescriptor( "post-site" );
+
+ public final static MojoDescriptor SITE_DEPLOY = createMojoDescriptor( "site-deploy" );
+
+
+ public int getNumberOfExceutions( ProjectBuildList projectBuildList )
+ throws InvalidPluginDescriptorException, PluginVersionResolutionException, PluginDescriptorParsingException,
+ NoPluginFoundForPrefixException, MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException
+ {
+ int result = 0;
+ for ( ProjectSegment projectBuild : projectBuildList )
+ {
+ MavenExecutionPlan plan = calculateExecutionPlan( projectBuild.getSession(), projectBuild.getProject(),
+ projectBuild.getTaskSegment().getTasks() );
+ result += plan.size();
+ }
+ return result;
+ }
+
+ public void calculateForkedExecutions( MojoExecution mojoExecution, MavenSession session )
+ throws MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ PluginDescriptorParsingException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ // Maybe do something ?
+ }
+
+ public MavenExecutionPlan calculateExecutionPlan( MavenSession session, MavenProject project, List<Object> tasks,
+ boolean setup )
+ throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException,
+ PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException,
+ NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ if ( project.equals( ProjectDependencyGraphStub.A ) )
+ {
+ return getProjectAExceutionPlan();
+ }
+ if ( project.equals( ProjectDependencyGraphStub.B ) )
+ {
+ return getProjectBExecutionPlan();
+ }
+ // The remaining are basically "for future expansion"
+ List<MojoExecution> me = new ArrayList<MojoExecution>();
+ me.add( createMojoExecution( "resources", "default-resources", PROCESS_RESOURCES ) );
+ me.add( createMojoExecution( "compile", "default-compile", COMPILE ) );
+ return createExecutionPlan( project, me );
+ }
+
+ public MavenExecutionPlan calculateExecutionPlan( MavenSession session, MavenProject project, List<Object> tasks )
+ throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException,
+ PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException,
+ NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ return calculateExecutionPlan( session, project, tasks, true );
+ }
+
+ public void setupMojoExecution( MavenSession session, MavenProject project, MojoExecution mojoExecution )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, InvalidPluginDescriptorException, NoPluginFoundForPrefixException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ }
+
+ public static MavenExecutionPlan getProjectAExceutionPlan()
+ throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException,
+ PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException,
+ NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ List<MojoExecution> me = new ArrayList<MojoExecution>();
+ me.add( createMojoExecution( "initialize", "default-initialize", INITIALIZE ) );
+ me.add( createMojoExecution( "resources", "default-resources", PROCESS_RESOURCES ) );
+ me.add( createMojoExecution( "compile", "default-compile", COMPILE ) );
+ me.add( createMojoExecution( "testResources", "default-testResources", PROCESS_TEST_RESOURCES ) );
+ me.add( createMojoExecution( "testCompile", "default-testCompile", TEST_COMPILE ) );
+ me.add( createMojoExecution( "test", "default-test", TEST ) );
+ me.add( createMojoExecution( "war", "default-war", PACKAGE ) );
+ me.add( createMojoExecution( "install", "default-install", INSTALL ) );
+ return createExecutionPlan( ProjectDependencyGraphStub.A.getExecutionProject(), me );
+ }
+
+ public static MavenExecutionPlan getProjectBExecutionPlan()
+ throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException,
+ PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException,
+ NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException
+ {
+ List<MojoExecution> me = new ArrayList<MojoExecution>();
+ me.add( createMojoExecution( "enforce", "enforce-versions", VALIDATE ) );
+ me.add( createMojoExecution( "resources", "default-resources", PROCESS_RESOURCES ) );
+ me.add( createMojoExecution( "compile", "default-compile", COMPILE ) );
+ me.add( createMojoExecution( "testResources", "default-testResources", PROCESS_TEST_RESOURCES ) );
+ me.add( createMojoExecution( "testCompile", "default-testCompile", TEST_COMPILE ) );
+ me.add( createMojoExecution( "test", "default-test", TEST ) );
+ return createExecutionPlan( ProjectDependencyGraphStub.B.getExecutionProject(), me );
+ }
+
+
+ private static MavenExecutionPlan createExecutionPlan( MavenProject project, List<MojoExecution> mojoExecutions )
+ throws InvalidPluginDescriptorException, PluginVersionResolutionException, PluginDescriptorParsingException,
+ NoPluginFoundForPrefixException, MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException
+ {
+ final List<ExecutionPlanItem> planItemList =
+ ExecutionPlanItem.createExecutionPlanItems( project, mojoExecutions );
+ return new MavenExecutionPlan( planItemList, DefaultLifecyclesStub.createDefaultLifecycles() );
+ }
+
+ private static MojoExecution createMojoExecution( String goal, String executionId, MojoDescriptor mojoDescriptor )
+ {
+ final Plugin plugin = mojoDescriptor.getPluginDescriptor().getPlugin();
+ MojoExecution result = new MojoExecution( plugin, goal, executionId );
+ result.setConfiguration( new Xpp3Dom( executionId + "-" + goal ) );
+ result.setMojoDescriptor( mojoDescriptor );
+ result.setLifecyclePhase( mojoDescriptor.getPhase() );
+
+ return result;
+
+ }
+
+ public static MojoDescriptor createMojoDescriptor( String phaseName )
+ {
+ return createMojoDescriptor( phaseName, false );
+ }
+
+ public static MojoDescriptor createMojoDescriptor( String phaseName, boolean threadSafe )
+ {
+ final MojoDescriptor mojoDescriptor = new MojoDescriptor();
+ mojoDescriptor.setPhase( phaseName );
+ final PluginDescriptor descriptor = new PluginDescriptor();
+ Plugin plugin = new Plugin();
+ plugin.setArtifactId( "org.apache.maven.test.MavenExecutionPlan" );
+ plugin.setGroupId( "stub-plugin-" + phaseName );
+ descriptor.setPlugin( plugin );
+ descriptor.setArtifactId( "artifact." + phaseName );
+ mojoDescriptor.setPluginDescriptor( descriptor );
+ mojoDescriptor.setThreadSafe( threadSafe );
+ return mojoDescriptor;
+ }
+
+
+ public static Set<String> getScopes()
+ {
+ return new HashSet<String>( Arrays.asList( "compile" ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleTaskSegmentCalculatorStub.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleTaskSegmentCalculatorStub.java
new file mode 100644
index 00000000..695d66dd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleTaskSegmentCalculatorStub.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.maven.lifecycle.internal.stub;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.internal.GoalTask;
+import org.apache.maven.lifecycle.internal.LifecycleTask;
+import org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator;
+import org.apache.maven.lifecycle.internal.TaskSegment;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class LifecycleTaskSegmentCalculatorStub
+ extends DefaultLifecycleTaskSegmentCalculator
+{
+ public static final String clean = "clean";
+
+ public static final String aggr = "aggr";
+
+ public static final String install = "install";
+
+
+ public List<TaskSegment> calculateTaskSegments( MavenSession session, List<String> tasks )
+ throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
+ MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
+ PluginVersionResolutionException
+ {
+ List<TaskSegment> taskSegments = new ArrayList<TaskSegment>( tasks.size() );
+
+ TaskSegment currentSegment = null;
+
+ for ( String task : tasks )
+ {
+ if ( aggr.equals( task ) )
+ {
+ boolean aggregating = true;
+
+ if ( currentSegment == null || currentSegment.isAggregating() != aggregating )
+ {
+ currentSegment = new TaskSegment( aggregating );
+ taskSegments.add( currentSegment );
+ }
+
+ currentSegment.getTasks().add( new GoalTask( task ) );
+ }
+ else
+ {
+ // lifecycle phase
+ if ( currentSegment == null || currentSegment.isAggregating() )
+ {
+ currentSegment = new TaskSegment( false );
+ taskSegments.add( currentSegment );
+ }
+ currentSegment.getTasks().add( new LifecycleTask( task ) );
+ }
+ }
+
+ return taskSegments;
+ }
+
+ public boolean requiresProject( MavenSession session )
+ {
+ return true;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LoggerStub.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LoggerStub.java
new file mode 100644
index 00000000..00bb3cfa
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LoggerStub.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.maven.lifecycle.internal.stub;
+
+import org.codehaus.plexus.logging.Logger;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class LoggerStub
+ implements Logger
+{
+ public void debug( String s )
+ {
+ }
+
+ public void debug( String s, Throwable throwable )
+ {
+ }
+
+ public boolean isDebugEnabled()
+ {
+ return true;
+ }
+
+ public void info( String s )
+ {
+ }
+
+ public void info( String s, Throwable throwable )
+ {
+ }
+
+ public boolean isInfoEnabled()
+ {
+ return true;
+ }
+
+ public void warn( String s )
+ {
+ }
+
+ public void warn( String s, Throwable throwable )
+ {
+ }
+
+ public boolean isWarnEnabled()
+ {
+ return true;
+ }
+
+ public void error( String s )
+ {
+ }
+
+ public void error( String s, Throwable throwable )
+ {
+ }
+
+ public boolean isErrorEnabled()
+ {
+ return true;
+ }
+
+ public void fatalError( String s )
+ {
+ }
+
+ public void fatalError( String s, Throwable throwable )
+ {
+ }
+
+ public boolean isFatalErrorEnabled()
+ {
+ return true;
+ }
+
+ public Logger getChildLogger( String s )
+ {
+ return null;
+ }
+
+ public int getThreshold()
+ {
+ return 0;
+ }
+
+ public void setThreshold( int i )
+ {
+
+ }
+
+ public String getName()
+ {
+ return "StubLogger";
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/MojoExecutorStub.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/MojoExecutorStub.java
new file mode 100644
index 00000000..a8572ffc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/MojoExecutorStub.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.maven.lifecycle.internal.stub;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.LifecycleExecutionException;
+import org.apache.maven.lifecycle.internal.DependencyContext;
+import org.apache.maven.lifecycle.internal.MojoExecutor;
+import org.apache.maven.lifecycle.internal.PhaseRecorder;
+import org.apache.maven.lifecycle.internal.ProjectIndex;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class MojoExecutorStub
+ extends MojoExecutor
+{ // This is being lazy instead of making interface
+
+ public List<MojoExecution> executions = Collections.synchronizedList( new ArrayList<MojoExecution>() );
+
+ @Override
+ public void execute( MavenSession session, MojoExecution mojoExecution, ProjectIndex projectIndex,
+ DependencyContext dependencyContext, PhaseRecorder phaseRecorder )
+ throws LifecycleExecutionException
+ {
+ executions.add( mojoExecution );
+ }
+
+ @Override
+ public void execute( MavenSession session, List<MojoExecution> mojoExecutions, ProjectIndex projectIndex )
+ throws LifecycleExecutionException
+ {
+ for ( MojoExecution mojoExecution : mojoExecutions )
+ {
+ executions.add( mojoExecution );
+ }
+ }
+
+
+ public static MojoDescriptor createMojoDescriptor( String mojoDescription )
+ {
+ final PluginDescriptor descriptor = new PluginDescriptor();
+ descriptor.setArtifactId( mojoDescription );
+ final MojoDescriptor mojoDescriptor = new MojoDescriptor();
+ mojoDescriptor.setDescription( mojoDescription );
+ mojoDescriptor.setPluginDescriptor( descriptor );
+ return mojoDescriptor;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/PluginPrefixResolverStub.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/PluginPrefixResolverStub.java
new file mode 100644
index 00000000..a4b54e98
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/PluginPrefixResolverStub.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.maven.lifecycle.internal.stub;
+
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.prefix.PluginPrefixRequest;
+import org.apache.maven.plugin.prefix.PluginPrefixResolver;
+import org.apache.maven.plugin.prefix.PluginPrefixResult;
+import org.eclipse.aether.repository.ArtifactRepository;
+
+/**
+ * @author Kristian Rosenvold
+ */
+
+public class PluginPrefixResolverStub
+ implements PluginPrefixResolver
+{
+ public PluginPrefixResult resolve( PluginPrefixRequest request )
+ throws NoPluginFoundForPrefixException
+ {
+ return new PluginPrefixResult()
+ {
+ public String getGroupId()
+ {
+ return "com.foobar";
+ }
+
+ public String getArtifactId()
+ {
+ return "bazbaz";
+ }
+
+ public ArtifactRepository getRepository()
+ {
+ return null;
+ }
+ };
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/PluginVersionResolverStub.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/PluginVersionResolverStub.java
new file mode 100644
index 00000000..c79658e8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/PluginVersionResolverStub.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.maven.lifecycle.internal.stub;
+
+import org.apache.maven.plugin.version.PluginVersionRequest;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.plugin.version.PluginVersionResolver;
+import org.apache.maven.plugin.version.PluginVersionResult;
+import org.eclipse.aether.repository.ArtifactRepository;
+
+/**
+ * @author Kristian Rosenvold
+ */
+
+public class PluginVersionResolverStub
+ implements PluginVersionResolver
+{
+
+ public PluginVersionResult resolve( PluginVersionRequest request )
+ throws PluginVersionResolutionException
+ {
+ return new PluginVersionResult()
+ {
+ public String getVersion()
+ {
+ return "0.42";
+ }
+
+ public ArtifactRepository getRepository()
+ {
+ return null;
+ }
+ };
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependenciesResolverStub.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependenciesResolverStub.java
new file mode 100644
index 00000000..4147b36c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependenciesResolverStub.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.maven.lifecycle.internal.stub;
+
+import org.apache.maven.ProjectDependenciesResolver;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.project.DependencyResolutionException;
+import org.apache.maven.project.DependencyResolutionRequest;
+import org.apache.maven.project.DependencyResolutionResult;
+import org.apache.maven.project.MavenProject;
+import org.eclipse.aether.graph.DefaultDependencyNode;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.DependencyNode;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class ProjectDependenciesResolverStub
+ implements ProjectDependenciesResolver, org.apache.maven.project.ProjectDependenciesResolver
+{
+ public Set<Artifact> resolve( MavenProject project, Collection<String> scopesToResolve, MavenSession session )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ return new HashSet<Artifact>();
+ }
+
+ public Set<Artifact> resolve( MavenProject project, Collection<String> scopesToCollect,
+ Collection<String> scopesToResolve, MavenSession session )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ return new HashSet<Artifact>();
+ }
+
+ public Set<Artifact> resolve( Collection<? extends MavenProject> projects, Collection<String> scopes,
+ MavenSession session )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ return new HashSet<Artifact>();
+ }
+
+ public Set<Artifact> resolve( MavenProject project, Collection<String> scopesToCollect,
+ Collection<String> scopesToResolve, MavenSession session,
+ Set<Artifact> ignoreableArtifacts )
+ throws ArtifactResolutionException, ArtifactNotFoundException
+ {
+ return new HashSet<Artifact>();
+ }
+
+ public DependencyResolutionResult resolve( DependencyResolutionRequest request )
+ throws DependencyResolutionException
+ {
+ return new DependencyResolutionResult()
+ {
+
+ public List<Dependency> getUnresolvedDependencies()
+ {
+ return Collections.emptyList();
+ }
+
+ public List<Dependency> getResolvedDependencies()
+ {
+ return Collections.emptyList();
+ }
+
+ public List<Exception> getResolutionErrors( Dependency dependency )
+ {
+ return Collections.emptyList();
+ }
+
+ public DependencyNode getDependencyGraph()
+ {
+ return new DefaultDependencyNode( (Dependency) null );
+ }
+
+ public List<Dependency> getDependencies()
+ {
+ return Collections.emptyList();
+ }
+
+ public List<Exception> getCollectionErrors()
+ {
+ return Collections.emptyList();
+ }
+ };
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java
new file mode 100644
index 00000000..38e9fcad
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java
@@ -0,0 +1,227 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.maven.lifecycle.internal.stub;
+
+import org.apache.maven.execution.AbstractExecutionListener;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.DefaultMavenExecutionResult;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.ProjectDependencyGraph;
+import org.apache.maven.lifecycle.LifecycleNotFoundException;
+import org.apache.maven.lifecycle.LifecyclePhaseNotFoundException;
+import org.apache.maven.lifecycle.internal.GoalTask;
+import org.apache.maven.lifecycle.internal.ProjectBuildList;
+import org.apache.maven.lifecycle.internal.ProjectSegment;
+import org.apache.maven.lifecycle.internal.TaskSegment;
+import org.apache.maven.plugin.InvalidPluginDescriptorException;
+import org.apache.maven.plugin.MojoNotFoundException;
+import org.apache.maven.plugin.PluginDescriptorParsingException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
+import org.apache.maven.plugin.version.PluginVersionResolutionException;
+import org.apache.maven.project.MavenProject;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * A stub dependency graph that is custom made for testing concurrent build graph evaluations.
+ * <p/>
+ * Implements a graph as follows:
+ * A has no dependencies
+ * B depends on A
+ * C depends on A
+ * X depends on B & C
+ * Y depends on B
+ * Z depends on C
+ *
+ * @author Kristian Rosenvold
+ */
+public class ProjectDependencyGraphStub
+ implements ProjectDependencyGraph
+{
+ public static final MavenProject A = new MavenProject();
+
+ public static final MavenProject B = new MavenProject();
+
+ public static final MavenProject C = new MavenProject();
+
+ public static final MavenProject X = new MavenProject();
+
+ public static final MavenProject Y = new MavenProject();
+
+ public static final MavenProject Z = new MavenProject();
+
+ public static final MavenProject UNKNOWN = new MavenProject();
+
+ static
+ {
+ A.setArtifactId( "A" );
+ B.setArtifactId( "B" );
+ C.setArtifactId( "C" );
+ X.setArtifactId( "X" );
+ Y.setArtifactId( "Y" );
+ Z.setArtifactId( "Z" );
+ }
+
+ // This should probably be moved to a separate stub
+
+ public static ProjectBuildList getProjectBuildList( MavenSession session )
+ throws InvalidPluginDescriptorException, PluginVersionResolutionException, PluginDescriptorParsingException,
+ NoPluginFoundForPrefixException, MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException
+ {
+ final List<ProjectSegment> list = getProjectBuilds( session );
+ return new ProjectBuildList( list );
+
+ }
+
+ public static List<ProjectSegment> getProjectBuilds( MavenSession session )
+ throws InvalidPluginDescriptorException, PluginVersionResolutionException, PluginDescriptorParsingException,
+ NoPluginFoundForPrefixException, PluginNotFoundException, MojoNotFoundException, PluginResolutionException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException
+ {
+ List<ProjectSegment> projectBuilds = new ArrayList<ProjectSegment>();
+
+ TaskSegment segment = createTaskSegment();
+ projectBuilds.add( createProjectBuild( A, session, segment ) );
+ projectBuilds.add( createProjectBuild( B, session, segment ) );
+ projectBuilds.add( createProjectBuild( C, session, segment ) );
+ projectBuilds.add( createProjectBuild( X, session, segment ) );
+ projectBuilds.add( createProjectBuild( Y, session, segment ) );
+ projectBuilds.add( createProjectBuild( Z, session, segment ) );
+ return projectBuilds;
+ }
+
+ private static ProjectSegment createProjectBuild( MavenProject project, MavenSession session,
+ TaskSegment taskSegment )
+ throws InvalidPluginDescriptorException, PluginVersionResolutionException, PluginDescriptorParsingException,
+ NoPluginFoundForPrefixException, MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+ LifecyclePhaseNotFoundException, LifecycleNotFoundException
+ {
+ final MavenSession session1 = session.clone();
+ return new ProjectSegment( project, taskSegment, session1 );
+ }
+
+
+ private static TaskSegment createTaskSegment()
+ {
+ TaskSegment result = new TaskSegment( false );
+ result.getTasks().add( new GoalTask( "t1" ) );
+ result.getTasks().add( new GoalTask( "t2" ) );
+ return result;
+ }
+
+ class Dependency
+ {
+ MavenProject dependant;
+
+ MavenProject dependency;
+
+ Dependency( MavenProject dependant, MavenProject dependency )
+ {
+ this.dependant = dependant;
+ this.dependency = dependency;
+ }
+
+ void addIfDownstream( MavenProject mavenProject, List<MavenProject> result )
+ {
+ if ( dependency == mavenProject )
+ {
+ result.add( dependant );
+ }
+ }
+
+ void addIfUpstreamOf( MavenProject mavenProject, List<MavenProject> result )
+ {
+ if ( dependant == mavenProject )
+ {
+ result.add( dependency ); // All projects are the statics from this class
+ }
+ }
+ }
+
+ private List<Dependency> getDependencies()
+ {
+ List<Dependency> dependencies = new ArrayList<Dependency>();
+ dependencies.add( new Dependency( B, A ) );
+ dependencies.add( new Dependency( C, A ) );
+ dependencies.add( new Dependency( X, B ) );
+ dependencies.add( new Dependency( X, C ) );
+ dependencies.add( new Dependency( Y, B ) );
+ dependencies.add( new Dependency( Z, C ) );
+ return dependencies;
+ }
+
+ public List<MavenProject> getSortedProjects()
+ {
+ return Arrays.asList( A, B, C, X, Y, Z ); // I'm not entirely sure about the order but this shold do...
+ }
+
+ public List<MavenProject> getDownstreamProjects( MavenProject project, boolean transitive )
+ {
+ if ( transitive )
+ {
+ throw new RuntimeException( "Not implemented yet" );
+ }
+ List<MavenProject> result = new ArrayList<MavenProject>();
+ for ( Dependency dependency : getDependencies() )
+ {
+ dependency.addIfDownstream( project, result );
+ }
+ return result;
+ }
+
+ public List<MavenProject> getUpstreamProjects( MavenProject project, boolean transitive )
+ {
+ /* if ( transitive )
+ {
+ throw new RuntimeException( "Not implemented yet" );
+ }*/
+ List<MavenProject> result = new ArrayList<MavenProject>();
+ final List<Dependency> dependencies = getDependencies();
+ for ( Dependency dependency : dependencies )
+ {
+ dependency.addIfUpstreamOf( project, result );
+ }
+ return result;
+ }
+
+ public static MavenSession getMavenSession( MavenProject mavenProject )
+ {
+ final MavenSession session = getMavenSession();
+ session.setCurrentProject( mavenProject );
+ return session;
+ }
+
+ public static MavenSession getMavenSession()
+ {
+ final DefaultMavenExecutionResult defaultMavenExecutionResult = new DefaultMavenExecutionResult();
+ MavenExecutionRequest mavenExecutionRequest = new DefaultMavenExecutionRequest();
+ mavenExecutionRequest.setExecutionListener( new AbstractExecutionListener() );
+ mavenExecutionRequest.setGoals( Arrays.asList( "clean", "aggr", "install" ) );
+ mavenExecutionRequest.setDegreeOfConcurrency( 1 );
+ final MavenSession session = new MavenSession( null, null, mavenExecutionRequest, defaultMavenExecutionResult );
+ final ProjectDependencyGraphStub dependencyGraphStub = new ProjectDependencyGraphStub();
+ session.setProjectDependencyGraph( dependencyGraphStub );
+ session.setProjects( dependencyGraphStub.getSortedProjects() );
+ return session;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStubTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStubTest.java
new file mode 100644
index 00000000..8c605723
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStubTest.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.maven.lifecycle.internal.stub;
+
+import junit.framework.TestCase;
+import org.apache.maven.project.MavenProject;
+
+import java.util.List;
+
+
+/**
+ * Tests the stub. Yeah, I know.
+ *
+ * @author Kristian Rosenvold
+ */
+
+public class ProjectDependencyGraphStubTest
+ extends TestCase
+{
+ public void testADependencies()
+ {
+ ProjectDependencyGraphStub stub = new ProjectDependencyGraphStub();
+ final List<MavenProject> mavenProjects = stub.getUpstreamProjects( ProjectDependencyGraphStub.A, false );
+ assertEquals( 0, mavenProjects.size() );
+ }
+
+ public void testBDepenencies( ProjectDependencyGraphStub stub )
+ {
+ final List<MavenProject> bProjects = stub.getUpstreamProjects( ProjectDependencyGraphStub.B, false );
+ assertEquals( 1, bProjects.size() );
+ assertTrue( bProjects.contains( ProjectDependencyGraphStub.A ) );
+ }
+
+ public void testCDepenencies( ProjectDependencyGraphStub stub )
+ {
+ final List<MavenProject> cProjects = stub.getUpstreamProjects( ProjectDependencyGraphStub.C, false );
+ assertEquals( 1, cProjects.size() );
+ assertTrue( cProjects.contains( ProjectDependencyGraphStub.C ) );
+ }
+
+ public void testXDepenencies( ProjectDependencyGraphStub stub )
+ {
+ final List<MavenProject> cProjects = stub.getUpstreamProjects( ProjectDependencyGraphStub.X, false );
+ assertEquals( 2, cProjects.size() );
+ assertTrue( cProjects.contains( ProjectDependencyGraphStub.C ) );
+ assertTrue( cProjects.contains( ProjectDependencyGraphStub.B ) );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java
new file mode 100644
index 00000000..025e7725
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java
@@ -0,0 +1,342 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.AbstractCoreMavenComponentTestCase;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
+import org.apache.maven.artifact.repository.RepositoryRequest;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.component.repository.ComponentDescriptor;
+
+public class PluginManagerTest
+ extends AbstractCoreMavenComponentTestCase
+{
+ @Requirement
+ private DefaultBuildPluginManager pluginManager;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ pluginManager = (DefaultBuildPluginManager) lookup( BuildPluginManager.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ pluginManager = null;
+ super.tearDown();
+ }
+
+ protected String getProjectsDirectory()
+ {
+ return "src/test/projects/plugin-manager";
+ }
+
+ public void testPluginLoading()
+ throws Exception
+ {
+ MavenSession session = createMavenSession( null );
+ Plugin plugin = new Plugin();
+ plugin.setGroupId( "org.apache.maven.its.plugins" );
+ plugin.setArtifactId( "maven-it-plugin" );
+ plugin.setVersion( "0.1" );
+ PluginDescriptor pluginDescriptor =
+ pluginManager.loadPlugin( plugin, session.getCurrentProject().getRemotePluginRepositories(),
+ session.getRepositorySession() );
+ assertNotNull( pluginDescriptor );
+ }
+
+ public void testMojoDescriptorRetrieval()
+ throws Exception
+ {
+ MavenSession session = createMavenSession( null );
+ String goal = "it";
+ Plugin plugin = new Plugin();
+ plugin.setGroupId( "org.apache.maven.its.plugins" );
+ plugin.setArtifactId( "maven-it-plugin" );
+ plugin.setVersion( "0.1" );
+
+ MojoDescriptor mojoDescriptor =
+ pluginManager.getMojoDescriptor( plugin, goal, session.getCurrentProject().getRemotePluginRepositories(),
+ session.getRepositorySession() );
+ assertNotNull( mojoDescriptor );
+ assertEquals( goal, mojoDescriptor.getGoal() );
+ // igorf: plugin realm comes later
+ // assertNotNull( mojoDescriptor.getRealm() );
+
+ PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
+ assertNotNull( pluginDescriptor );
+ assertEquals( "org.apache.maven.its.plugins", pluginDescriptor.getGroupId() );
+ assertEquals( "maven-it-plugin", pluginDescriptor.getArtifactId() );
+ assertEquals( "0.1", pluginDescriptor.getVersion() );
+ }
+
+ // -----------------------------------------------------------------------------------------------
+ // Tests which exercise the lifecycle executor when it is dealing with individual goals.
+ // -----------------------------------------------------------------------------------------------
+
+ //TODO: These two tests display a lack of symmetry with respect to the input which is a free form string and the
+ // mojo descriptor which comes back. All the free form parsing needs to be done somewhere else, this is
+ // really the function of the CLI, and then the pre-processing of that output still needs to be fed into
+ // a hinting process which helps flesh out the full specification of the plugin. The plugin manager should
+ // only deal in concrete terms -- all version finding mumbo jumbo is a customization to base functionality
+ // the plugin manager provides.
+
+ public void testRemoteResourcesPlugin()
+ throws Exception
+ {
+ //TODO: turn an equivalent back on when the RR plugin is released.
+
+ /*
+
+ This will not work until the RR plugin is released to get rid of the binding to the reporting exception which is a mistake.
+
+ This happpens after removing the reporting API from the core:
+
+ java.lang.NoClassDefFoundError: org/apache/maven/reporting/MavenReportException
+
+ MavenSession session = createMavenSession( getProject( "project-with-inheritance" ) );
+ String goal = "process";
+
+ Plugin plugin = new Plugin();
+ plugin.setGroupId( "org.apache.maven.plugins" );
+ plugin.setArtifactId( "maven-remote-resources-plugin" );
+ plugin.setVersion( "1.0-beta-2" );
+
+ MojoDescriptor mojoDescriptor = pluginManager.getMojoDescriptor( plugin, goal, session.getCurrentProject(), session.getLocalRepository() );
+ assertPluginDescriptor( mojoDescriptor, "org.apache.maven.plugins", "maven-remote-resources-plugin", "1.0-beta-2" );
+ MojoExecution mojoExecution = new MojoExecution( mojoDescriptor );
+ pluginManager.executeMojo( session, mojoExecution );
+ */
+ }
+
+ //TODO: this will be the basis of the customizable lifecycle execution so need to figure this out quickly.
+ public void testSurefirePlugin()
+ throws Exception
+ {
+ /*
+ MavenSession session = createMavenSession( getProject( "project-with-inheritance" ) );
+ String goal = "test";
+
+ Plugin plugin = new Plugin();
+ plugin.setGroupId( "org.apache.maven.plugins" );
+ plugin.setArtifactId( "maven-surefire-plugin" );
+ plugin.setVersion( "2.4.2" );
+
+ // The project has already been fully interpolated so getting the raw mojoDescriptor is not going to have the processes configuration.
+ MojoDescriptor mojoDescriptor = pluginManager.getMojoDescriptor( plugin, goal, session.getLocalRepository(), session.getCurrentProject().getPluginArtifactRepositories() );
+ assertPluginDescriptor( mojoDescriptor, "org.apache.maven.plugins", "maven-surefire-plugin", "2.4.2" );
+
+ System.out.println( session.getCurrentProject().getBuild().getPluginsAsMap() );
+
+ Xpp3Dom configuration = (Xpp3Dom) session.getCurrentProject().getBuild().getPluginsAsMap().get( plugin.getKey() ).getExecutions().get( 0 ).getConfiguration();
+ MojoExecution mojoExecution = new MojoExecution( mojoDescriptor, configuration );
+ pluginManager.executeMojo( session, mojoExecution );
+ */
+ }
+
+ public void testMojoConfigurationIsMergedCorrectly()
+ throws Exception
+ {
+ }
+
+ /**
+ * The case where the user wants to specify an alternate version of the underlying tool. Common case
+ * is in the Antlr plugin which comes bundled with a version of Antlr but the user often times needs
+ * to use a specific version. We need to make sure the version that they specify takes precedence.
+ */
+ public void testMojoWhereInternallyStatedDependencyIsOverriddenByProject()
+ throws Exception
+ {
+ }
+
+ /**
+ * The case where you have a plugin in the current build that you want to be used on projects in
+ * the current build.
+ */
+ public void testMojoThatIsPresentInTheCurrentBuild()
+ throws Exception
+ {
+ }
+
+ /**
+ * This is the case where the Mojo wants to execute on every project and then do something at the end
+ * with the results of each project.
+ */
+ public void testAggregatorMojo()
+ throws Exception
+ {
+ }
+
+ /**
+ * This is the case where a Mojo needs the lifecycle run to a certain phase before it can do
+ * anything useful.
+ */
+ public void testMojoThatRequiresExecutionToAGivenPhaseBeforeExecutingItself()
+ throws Exception
+ {
+ }
+
+ // test that mojo which does not require dependency resolution trigger no downloading of dependencies
+
+ // test interpolation of basedir values in mojo configuration
+
+ // test a build where projects use different versions of the same plugin
+
+ public void testThatPluginDependencyThatHasSystemScopeIsResolved()
+ throws Exception
+ {
+ /*
+ File systemPath = new File( getBasedir(), "pom.xml" );
+
+ Plugin plugin = new PluginBuilder( "org.apache.maven", "project-test", "1.0" )
+ .addDependency( "org.apache.maven", "system-dependency", "1.0", Artifact.SCOPE_SYSTEM, systemPath.getAbsolutePath() )
+ .get();
+
+ MavenProject pluginProject = new ProjectBuilder( "org.apache.maven", "project-test", "1.0" )
+ .addPlugin( plugin )
+ .addDependency( "junit", "junit", "3.8.1", Artifact.SCOPE_COMPILE )
+ .get();
+
+ // i'm making this artifact which is assumed to come from a pom in the metadata processor, then it tries to create a POM artifact
+ // and parse it for the dependencies and it blows up.
+ //
+ // we need to pass this through as is so it doesn't get parsed again.
+ Artifact pluginArtifact = new ProjectArtifact( pluginProject );
+
+ Set<Artifact> artifacts = pluginManager.getPluginArtifacts( pluginArtifact, plugin, getLocalRepository(), getPluginArtifactRepositories() );
+ System.out.println( artifacts );
+ */
+
+ MavenSession session = createMavenSession( getProject( "project-contributing-system-scope-plugin-dep" ) );
+ MavenProject project = session.getCurrentProject();
+ Plugin plugin = project.getPlugin( "org.apache.maven.its.plugins:maven-it-plugin" );
+
+ RepositoryRequest repositoryRequest = new DefaultRepositoryRequest();
+ repositoryRequest.setLocalRepository( getLocalRepository() );
+ repositoryRequest.setRemoteRepositories( getPluginArtifactRepositories() );
+
+ PluginDescriptor pluginDescriptor =
+ pluginManager.loadPlugin( plugin, session.getCurrentProject().getRemotePluginRepositories(),
+ session.getRepositorySession() );
+ pluginManager.getPluginRealm( session, pluginDescriptor );
+ List<Artifact> artifacts = pluginDescriptor.getArtifacts();
+
+ for ( Artifact a : artifacts )
+ {
+ if ( a.getGroupId().equals( "org.apache.maven.its.mng3586" ) && a.getArtifactId().equals( "tools" ) )
+ {
+ // The system scoped dependencies will be present in the classloader for the plugin
+ return;
+ }
+ }
+
+ fail( "Can't find the system scoped dependency in the plugin artifacts." );
+ }
+
+ // -----------------------------------------------------------------------------------------------
+ // Testing help
+ // -----------------------------------------------------------------------------------------------
+
+ protected void assertPluginDescriptor( MojoDescriptor mojoDescriptor, String groupId, String artifactId, String version )
+ {
+ assertNotNull( mojoDescriptor );
+ PluginDescriptor pd = mojoDescriptor.getPluginDescriptor();
+ assertNotNull( pd );
+ assertEquals( groupId, pd.getGroupId() );
+ assertEquals( artifactId, pd.getArtifactId() );
+ assertEquals( version, pd.getVersion() );
+ }
+
+ public void testPluginRealmCache()
+ throws Exception
+ {
+ RepositoryRequest repositoryRequest = new DefaultRepositoryRequest();
+ repositoryRequest.setLocalRepository( getLocalRepository() );
+ repositoryRequest.setRemoteRepositories( getPluginArtifactRepositories() );
+
+ // prime realm cache
+ MavenSession session = createMavenSession( getProject( "project-contributing-system-scope-plugin-dep" ) );
+ MavenProject project = session.getCurrentProject();
+ Plugin plugin = project.getPlugin( "org.apache.maven.its.plugins:maven-it-plugin" );
+
+ PluginDescriptor pluginDescriptor =
+ pluginManager.loadPlugin( plugin, session.getCurrentProject().getRemotePluginRepositories(),
+ session.getRepositorySession() );
+ pluginManager.getPluginRealm( session, pluginDescriptor );
+
+ assertEquals( 1, pluginDescriptor.getDependencies().size() );
+
+ for ( ComponentDescriptor<?> descriptor : pluginDescriptor.getComponents() )
+ {
+ assertNotNull( descriptor.getRealm() );
+ assertNotNull( descriptor.getImplementationClass() );
+ }
+
+ // reload plugin realm from cache
+ session = createMavenSession( getProject( "project-contributing-system-scope-plugin-dep" ) );
+ project = session.getCurrentProject();
+ plugin = project.getPlugin( "org.apache.maven.its.plugins:maven-it-plugin" );
+
+ pluginDescriptor =
+ pluginManager.loadPlugin( plugin, session.getCurrentProject().getRemotePluginRepositories(),
+ session.getRepositorySession() );
+ pluginManager.getPluginRealm( session, pluginDescriptor );
+
+ assertEquals( 1, pluginDescriptor.getDependencies().size() );
+
+ for ( ComponentDescriptor<?> descriptor : pluginDescriptor.getComponents() )
+ {
+ assertNotNull( descriptor.getRealm() );
+ assertNotNull( descriptor.getImplementationClass() );
+ }
+ }
+
+ public void testBuildExtensionsPluginLoading()
+ throws Exception
+ {
+ RepositoryRequest repositoryRequest = new DefaultRepositoryRequest();
+ repositoryRequest.setLocalRepository( getLocalRepository() );
+ repositoryRequest.setRemoteRepositories( getPluginArtifactRepositories() );
+
+ // prime realm cache
+ MavenSession session = createMavenSession( getProject( "project-with-build-extensions-plugin" ) );
+ MavenProject project = session.getCurrentProject();
+ Plugin plugin = project.getPlugin( "org.apache.maven.its.plugins:maven-it-plugin" );
+
+ PluginDescriptor pluginDescriptor =
+ pluginManager.loadPlugin( plugin, session.getCurrentProject().getRemotePluginRepositories(),
+ session.getRepositorySession() );
+ ClassRealm pluginRealm = pluginManager.getPluginRealm( session, pluginDescriptor );
+
+ assertEquals(pluginRealm, pluginDescriptor.getComponents().get(0).getRealm());
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExceptionTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExceptionTest.java
new file mode 100644
index 00000000..ead7ae2e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExceptionTest.java
@@ -0,0 +1,164 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.Parameter;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+
+import junit.framework.TestCase;
+
+/**
+ * MNG-3131
+ *
+ * @author Robert Scholte
+ *
+ */
+public class PluginParameterExceptionTest
+ extends TestCase
+{
+
+ public void testMissingRequiredStringArrayTypeParameter()
+ {
+ MojoDescriptor mojoDescriptor = new MojoDescriptor();
+ mojoDescriptor.setGoal( "goal" );
+ PluginDescriptor pluginDescriptor = new PluginDescriptor();
+ pluginDescriptor.setGoalPrefix( "goalPrefix" );
+ pluginDescriptor.setArtifactId( "artifactId" );
+ mojoDescriptor.setPluginDescriptor( pluginDescriptor );
+
+ Parameter parameter = new Parameter();
+ parameter.setType( "java.lang.String[]" );
+ parameter.setName( "toAddresses" );
+
+ parameter.setRequired( true );
+
+ PluginParameterException exception =
+ new PluginParameterException( mojoDescriptor, Collections.singletonList( parameter ) );
+
+ assertEquals( "One or more required plugin parameters are invalid/missing for 'goalPrefix:goal'\n" +
+ "\n" +
+ "[0] Inside the definition for plugin 'artifactId', specify the following:\n" +
+ "\n" +
+ "<configuration>\n" +
+ " ...\n" +
+ " <toAddresses>\n" +
+ " <item>VALUE</item>\n" +
+ " </toAddresses>\n" +
+ "</configuration>.\n", exception.buildDiagnosticMessage() );
+ }
+
+ public void testMissingRequiredCollectionTypeParameter()
+ {
+ MojoDescriptor mojoDescriptor = new MojoDescriptor();
+ mojoDescriptor.setGoal( "goal" );
+ PluginDescriptor pluginDescriptor = new PluginDescriptor();
+ pluginDescriptor.setGoalPrefix( "goalPrefix" );
+ pluginDescriptor.setArtifactId( "artifactId" );
+ mojoDescriptor.setPluginDescriptor( pluginDescriptor );
+
+ Parameter parameter = new Parameter();
+ parameter.setType( "java.util.List" );
+ parameter.setName( "toAddresses" );
+
+ parameter.setRequired( true );
+
+ PluginParameterException exception =
+ new PluginParameterException( mojoDescriptor, Collections.singletonList( parameter ) );
+
+ assertEquals( "One or more required plugin parameters are invalid/missing for 'goalPrefix:goal'\n" +
+ "\n" +
+ "[0] Inside the definition for plugin 'artifactId', specify the following:\n" +
+ "\n" +
+ "<configuration>\n" +
+ " ...\n" +
+ " <toAddresses>\n" +
+ " <item>VALUE</item>\n" +
+ " </toAddresses>\n" +
+ "</configuration>.\n", exception.buildDiagnosticMessage() );
+ }
+
+ public void testMissingRequiredMapTypeParameter()
+ {
+ MojoDescriptor mojoDescriptor = new MojoDescriptor();
+ mojoDescriptor.setGoal( "goal" );
+ PluginDescriptor pluginDescriptor = new PluginDescriptor();
+ pluginDescriptor.setGoalPrefix( "goalPrefix" );
+ pluginDescriptor.setArtifactId( "artifactId" );
+ mojoDescriptor.setPluginDescriptor( pluginDescriptor );
+
+ Parameter parameter = new Parameter();
+ parameter.setType( "java.util.Map" );
+ parameter.setName( "toAddresses" );
+
+ parameter.setRequired( true );
+
+ PluginParameterException exception =
+ new PluginParameterException( mojoDescriptor, Collections.singletonList( parameter ) );
+
+ assertEquals( "One or more required plugin parameters are invalid/missing for 'goalPrefix:goal'\n" +
+ "\n" +
+ "[0] Inside the definition for plugin 'artifactId', specify the following:\n" +
+ "\n" +
+ "<configuration>\n" +
+ " ...\n" +
+ " <toAddresses>\n" +
+ " <KEY>VALUE</KEY>\n" +
+ " </toAddresses>\n" +
+ "</configuration>.\n", exception.buildDiagnosticMessage() );
+ }
+
+ public void testMissingRequiredPropertiesTypeParameter()
+ {
+ MojoDescriptor mojoDescriptor = new MojoDescriptor();
+ mojoDescriptor.setGoal( "goal" );
+ PluginDescriptor pluginDescriptor = new PluginDescriptor();
+ pluginDescriptor.setGoalPrefix( "goalPrefix" );
+ pluginDescriptor.setArtifactId( "artifactId" );
+ mojoDescriptor.setPluginDescriptor( pluginDescriptor );
+
+ Parameter parameter = new Parameter();
+ parameter.setType( "java.util.Properties" );
+ parameter.setName( "toAddresses" );
+
+ parameter.setRequired( true );
+
+ PluginParameterException exception =
+ new PluginParameterException( mojoDescriptor, Collections.singletonList( parameter ) );
+
+ assertEquals( "One or more required plugin parameters are invalid/missing for 'goalPrefix:goal'\n" +
+ "\n" +
+ "[0] Inside the definition for plugin 'artifactId', specify the following:\n" +
+ "\n" +
+ "<configuration>\n" +
+ " ...\n" +
+ " <toAddresses>\n" +
+ " <property>\n" +
+ " <name>KEY</name>\n" +
+ " <value>VALUE</value>\n" +
+ " </property>\n" +
+ " </toAddresses>\n" +
+ "</configuration>.\n", exception.buildDiagnosticMessage() );
+ }
+
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java
new file mode 100644
index 00000000..5f6744c9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java
@@ -0,0 +1,447 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.maven.AbstractCoreMavenComponentTestCase;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.DefaultMavenExecutionResult;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Model;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.DuplicateProjectException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.repository.RepositorySystem;
+import org.codehaus.plexus.MutablePlexusContainer;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
+import org.codehaus.plexus.util.dag.CycleDetectedException;
+
+/**
+ * @author Jason van Zyl
+ */
+public class PluginParameterExpressionEvaluatorTest
+ extends AbstractCoreMavenComponentTestCase
+{
+ private static final String FS = System.getProperty( "file.separator" );
+
+ private RepositorySystem factory;
+
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+ factory = lookup( RepositorySystem.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ factory = null;
+ super.tearDown();
+ }
+
+ public void testPluginDescriptorExpressionReference()
+ throws Exception
+ {
+ MojoExecution exec = newMojoExecution();
+
+ MavenSession session = newMavenSession();
+
+ Object result = new PluginParameterExpressionEvaluator( session, exec ).evaluate( "${plugin}" );
+
+ System.out.println( "Result: " + result );
+
+ assertSame( "${plugin} expression does not return plugin descriptor.",
+ exec.getMojoDescriptor().getPluginDescriptor(),
+ result );
+ }
+
+ public void testPluginArtifactsExpressionReference()
+ throws Exception
+ {
+ MojoExecution exec = newMojoExecution();
+
+ Artifact depArtifact = createArtifact( "group", "artifact", "1" );
+
+ List<Artifact> deps = new ArrayList<Artifact>();
+ deps.add( depArtifact );
+
+ exec.getMojoDescriptor().getPluginDescriptor().setArtifacts( deps );
+
+ MavenSession session = newMavenSession();
+
+ @SuppressWarnings( "unchecked" )
+ List<Artifact> depResults =
+ (List<Artifact>) new PluginParameterExpressionEvaluator( session, exec ).evaluate( "${plugin.artifacts}" );
+
+ System.out.println( "Result: " + depResults );
+
+ assertNotNull( depResults );
+ assertEquals( 1, depResults.size() );
+ assertSame( "dependency artifact is wrong.", depArtifact, depResults.get( 0 ) );
+ }
+
+ public void testPluginArtifactMapExpressionReference()
+ throws Exception
+ {
+ MojoExecution exec = newMojoExecution();
+
+ Artifact depArtifact = createArtifact( "group", "artifact", "1" );
+
+ List<Artifact> deps = new ArrayList<Artifact>();
+ deps.add( depArtifact );
+
+ exec.getMojoDescriptor().getPluginDescriptor().setArtifacts( deps );
+
+ MavenSession session = newMavenSession();
+
+ @SuppressWarnings( "unchecked" )
+ Map<String, Artifact> depResults =
+ (Map<String, Artifact>) new PluginParameterExpressionEvaluator( session, exec ).evaluate( "${plugin.artifactMap}" );
+
+ System.out.println( "Result: " + depResults );
+
+ assertNotNull( depResults );
+ assertEquals( 1, depResults.size() );
+ assertSame( "dependency artifact is wrong.",
+ depArtifact,
+ depResults.get( ArtifactUtils.versionlessKey( depArtifact ) ) );
+ }
+
+ public void testPluginArtifactIdExpressionReference()
+ throws Exception
+ {
+ MojoExecution exec = newMojoExecution();
+
+ MavenSession session = newMavenSession();
+
+ Object result = new PluginParameterExpressionEvaluator( session, exec ).evaluate( "${plugin.artifactId}" );
+
+ System.out.println( "Result: " + result );
+
+ assertSame( "${plugin.artifactId} expression does not return plugin descriptor's artifactId.",
+ exec.getMojoDescriptor().getPluginDescriptor().getArtifactId(),
+ result );
+ }
+
+ public void testValueExtractionWithAPomValueContainingAPath()
+ throws Exception
+ {
+ String expected = getTestFile( "target/test-classes/target/classes" ).getCanonicalPath();
+
+ Build build = new Build();
+ build.setDirectory( expected.substring( 0, expected.length() - "/classes".length() ) );
+
+ Model model = new Model();
+ model.setBuild( build );
+
+ MavenProject project = new MavenProject( model );
+ project.setFile( new File( "pom.xml" ).getCanonicalFile() );
+
+ ExpressionEvaluator expressionEvaluator = createExpressionEvaluator( project, null, new Properties() );
+
+ Object value = expressionEvaluator.evaluate( "${project.build.directory}/classes" );
+ String actual = new File( value.toString() ).getCanonicalPath();
+
+ assertEquals( expected, actual );
+ }
+
+ public void testEscapedVariablePassthrough()
+ throws Exception
+ {
+ String var = "${var}";
+
+ Model model = new Model();
+ model.setVersion( "1" );
+
+ MavenProject project = new MavenProject( model );
+
+ ExpressionEvaluator ee = createExpressionEvaluator( project, null, new Properties() );
+
+ Object value = ee.evaluate( "$" + var );
+
+ assertEquals( var, value );
+ }
+
+ public void testEscapedVariablePassthroughInLargerExpression()
+ throws Exception
+ {
+ String var = "${var}";
+ String key = var + " with version: ${project.version}";
+
+ Model model = new Model();
+ model.setVersion( "1" );
+
+ MavenProject project = new MavenProject( model );
+
+ ExpressionEvaluator ee = createExpressionEvaluator( project, null, new Properties() );
+
+ Object value = ee.evaluate( "$" + key );
+
+ assertEquals( "${var} with version: 1", value );
+ }
+
+ public void testMultipleSubExpressionsInLargerExpression()
+ throws Exception
+ {
+ String key = "${project.artifactId} with version: ${project.version}";
+
+ Model model = new Model();
+ model.setArtifactId( "test" );
+ model.setVersion( "1" );
+
+ MavenProject project = new MavenProject( model );
+
+ ExpressionEvaluator ee = createExpressionEvaluator( project, null, new Properties() );
+
+ Object value = ee.evaluate( key );
+
+ assertEquals( "test with version: 1", value );
+ }
+
+ public void testMissingPOMPropertyRefInLargerExpression()
+ throws Exception
+ {
+ String expr = "/path/to/someproject-${baseVersion}";
+
+ MavenProject project = new MavenProject( new Model() );
+
+ ExpressionEvaluator ee = createExpressionEvaluator( project, null, new Properties() );
+
+ Object value = ee.evaluate( expr );
+
+ assertEquals( expr, value );
+ }
+
+ public void testPOMPropertyExtractionWithMissingProject_WithDotNotation()
+ throws Exception
+ {
+ String key = "m2.name";
+ String checkValue = "value";
+
+ Properties properties = new Properties();
+ properties.setProperty( key, checkValue );
+
+ Model model = new Model();
+ model.setProperties( properties );
+
+ MavenProject project = new MavenProject( model );
+
+ ExpressionEvaluator ee = createExpressionEvaluator( project, null, new Properties() );
+
+ Object value = ee.evaluate( "${" + key + "}" );
+
+ assertEquals( checkValue, value );
+ }
+
+ public void testBasedirExtractionWithMissingProject()
+ throws Exception
+ {
+ ExpressionEvaluator ee = createExpressionEvaluator( null, null, new Properties() );
+
+ Object value = ee.evaluate( "${basedir}" );
+
+ assertEquals( System.getProperty( "user.dir" ), value );
+ }
+
+ public void testValueExtractionFromSystemPropertiesWithMissingProject()
+ throws Exception
+ {
+ String sysprop = "PPEET_sysprop1";
+
+ Properties executionProperties = new Properties();
+
+ if ( executionProperties.getProperty( sysprop ) == null )
+ {
+ executionProperties.setProperty( sysprop, "value" );
+ }
+
+ ExpressionEvaluator ee = createExpressionEvaluator( null, null, executionProperties );
+
+ Object value = ee.evaluate( "${" + sysprop + "}" );
+
+ assertEquals( "value", value );
+ }
+
+ public void testValueExtractionFromSystemPropertiesWithMissingProject_WithDotNotation()
+ throws Exception
+ {
+ String sysprop = "PPEET.sysprop2";
+
+ Properties executionProperties = new Properties();
+
+ if ( executionProperties.getProperty( sysprop ) == null )
+ {
+ executionProperties.setProperty( sysprop, "value" );
+ }
+
+ ExpressionEvaluator ee = createExpressionEvaluator( null, null, executionProperties );
+
+ Object value = ee.evaluate( "${" + sysprop + "}" );
+
+ assertEquals( "value", value );
+ }
+
+ @SuppressWarnings( "deprecation" )
+ private static MavenSession createSession( PlexusContainer container, ArtifactRepository repo, Properties properties )
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ MavenExecutionRequest request = new DefaultMavenExecutionRequest()
+ .setSystemProperties( properties )
+ .setGoals( Collections.<String>emptyList() )
+ .setBaseDirectory( new File( "" ) )
+ .setLocalRepository( repo );
+
+ return new MavenSession( container, request, new DefaultMavenExecutionResult(), Collections.<MavenProject>emptyList() );
+ }
+
+ public void testLocalRepositoryExtraction()
+ throws Exception
+ {
+ ExpressionEvaluator expressionEvaluator =
+ createExpressionEvaluator( createDefaultProject(), null, new Properties() );
+ Object value = expressionEvaluator.evaluate( "${localRepository}" );
+
+ assertEquals( "local", ( (ArtifactRepository) value ).getId() );
+ }
+
+ public void testTwoExpressions()
+ throws Exception
+ {
+ Build build = new Build();
+ build.setDirectory( "expected-directory" );
+ build.setFinalName( "expected-finalName" );
+
+ Model model = new Model();
+ model.setBuild( build );
+
+ ExpressionEvaluator expressionEvaluator =
+ createExpressionEvaluator( new MavenProject( model ), null, new Properties() );
+
+ Object value = expressionEvaluator.evaluate( "${project.build.directory}" + FS + "${project.build.finalName}" );
+
+ assertEquals( "expected-directory" + File.separatorChar + "expected-finalName", value );
+ }
+
+ public void testShouldExtractPluginArtifacts()
+ throws Exception
+ {
+ PluginDescriptor pd = new PluginDescriptor();
+
+ Artifact artifact = createArtifact( "testGroup", "testArtifact", "1.0" );
+
+ pd.setArtifacts( Collections.singletonList( artifact ) );
+
+ ExpressionEvaluator ee = createExpressionEvaluator( createDefaultProject(), pd, new Properties() );
+
+ Object value = ee.evaluate( "${plugin.artifacts}" );
+
+ assertTrue( value instanceof List );
+
+ @SuppressWarnings( "unchecked" )
+ List<Artifact> artifacts = (List<Artifact>) value;
+
+ assertEquals( 1, artifacts.size() );
+
+ Artifact result = artifacts.get( 0 );
+
+ assertEquals( "testGroup", result.getGroupId() );
+ }
+
+ private MavenProject createDefaultProject()
+ {
+ return new MavenProject( new Model() );
+ }
+
+ private ExpressionEvaluator createExpressionEvaluator( MavenProject project, PluginDescriptor pluginDescriptor, Properties executionProperties )
+ throws Exception
+ {
+ ArtifactRepository repo = factory.createDefaultLocalRepository();
+
+ MutablePlexusContainer container = (MutablePlexusContainer) getContainer();
+ MavenSession session = createSession( container, repo, executionProperties );
+ session.setCurrentProject( project );
+
+ MojoDescriptor mojo = new MojoDescriptor();
+ mojo.setPluginDescriptor( pluginDescriptor );
+ mojo.setGoal( "goal" );
+
+ MojoExecution mojoExecution = new MojoExecution( mojo );
+
+ return new PluginParameterExpressionEvaluator( session, mojoExecution );
+ }
+
+ protected Artifact createArtifact( String groupId, String artifactId, String version )
+ throws Exception
+ {
+ Dependency dependency = new Dependency();
+ dependency.setGroupId( groupId );
+ dependency.setArtifactId( artifactId );
+ dependency.setVersion( version );
+ dependency.setType( "jar" );
+ dependency.setScope( "compile" );
+
+ return factory.createDependencyArtifact( dependency );
+ }
+
+ private MojoExecution newMojoExecution()
+ {
+ PluginDescriptor pd = new PluginDescriptor();
+ pd.setArtifactId( "my-plugin" );
+ pd.setGroupId( "org.myco.plugins" );
+ pd.setVersion( "1" );
+
+ MojoDescriptor md = new MojoDescriptor();
+ md.setPluginDescriptor( pd );
+
+ pd.addComponentDescriptor( md );
+
+ return new MojoExecution( md );
+ }
+
+ private MavenSession newMavenSession()
+ throws Exception
+ {
+ return createMavenSession( null );
+ }
+
+ @Override
+ protected String getProjectsDirectory()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java
new file mode 100644
index 00000000..d350770c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java
@@ -0,0 +1,74 @@
+package org.apache.maven.plugin.internal;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenSession;
+
+import java.util.concurrent.CountDownLatch;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class DefaultLegacySupportTest extends TestCase {
+ final CountDownLatch latch = new CountDownLatch(1);
+ final DefaultLegacySupport defaultLegacySupport = new DefaultLegacySupport();
+
+ public void testSetSession() throws Exception {
+
+ MavenExecutionRequest mavenExecutionRequest = new DefaultMavenExecutionRequest();
+ MavenSession m1 = new MavenSession(null, null, mavenExecutionRequest, null);
+ defaultLegacySupport.setSession(m1);
+
+ MyRunnable myRunnable = new MyRunnable();
+ Thread thread = new Thread(myRunnable);
+ thread.start();
+
+ MavenSession m2 = new MavenSession(null, null, mavenExecutionRequest, null);
+ defaultLegacySupport.setSession(m2);
+ latch.countDown();
+ thread.join();
+ assertNull( myRunnable.getSession());
+ }
+
+
+ class MyRunnable implements Runnable {
+
+ private volatile MavenSession session;
+
+ public void run() {
+ try
+ {
+ latch.await();
+ }
+ catch (InterruptedException ingore)
+ {
+ // Test may fail if we get interrupted
+ }
+ session = defaultLegacySupport.getSession();
+ }
+
+ public MavenSession getSession() {
+ return session;
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
new file mode 100644
index 00000000..73bdbcae
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
@@ -0,0 +1,189 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Arrays;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.model.building.ModelBuildingException;
+import org.apache.maven.model.building.ModelProblem;
+import org.apache.maven.repository.RepositorySystem;
+import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusTestCase;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+
+/**
+ * @author Jason van Zyl
+ */
+public abstract class AbstractMavenProjectTestCase
+ extends PlexusTestCase
+{
+ protected ProjectBuilder projectBuilder;
+
+ protected RepositorySystem repositorySystem;
+
+ @Override
+ protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration )
+ {
+ super.customizeContainerConfiguration( containerConfiguration );
+ containerConfiguration.setAutoWiring( true );
+ containerConfiguration.setClassPathScanning( PlexusConstants.SCANNING_INDEX );
+ }
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ if ( getContainer().hasComponent( ProjectBuilder.class, "test" ) )
+ {
+ projectBuilder = lookup( ProjectBuilder.class, "test" );
+ }
+ else
+ {
+ // default over to the main project builder...
+ projectBuilder = lookup( ProjectBuilder.class );
+ }
+
+ repositorySystem = lookup( RepositorySystem.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ projectBuilder = null;
+
+ super.tearDown();
+ }
+
+ protected ProjectBuilder getProjectBuilder()
+ {
+ return projectBuilder;
+ }
+
+ @Override
+ protected String getCustomConfigurationName()
+ {
+ String name = AbstractMavenProjectTestCase.class.getName().replace( '.', '/' ) + ".xml";
+ System.out.println( name );
+ return name;
+ }
+
+ // ----------------------------------------------------------------------
+ // Local repository
+ // ----------------------------------------------------------------------
+
+ protected File getLocalRepositoryPath()
+ throws FileNotFoundException, URISyntaxException
+ {
+ File markerFile = getFileForClasspathResource( "local-repo/marker.txt" );
+
+ return markerFile.getAbsoluteFile().getParentFile();
+ }
+
+ protected static File getFileForClasspathResource( String resource )
+ throws FileNotFoundException
+ {
+ ClassLoader cloader = Thread.currentThread().getContextClassLoader();
+
+ URL resourceUrl = cloader.getResource( resource );
+
+ if ( resourceUrl == null )
+ {
+ throw new FileNotFoundException( "Unable to find: " + resource );
+ }
+
+ return new File( URI.create( resourceUrl.toString().replaceAll( " ", "%20" ) ) );
+ }
+
+ protected ArtifactRepository getLocalRepository()
+ throws Exception
+ {
+ ArtifactRepositoryLayout repoLayout = lookup( ArtifactRepositoryLayout.class, "legacy" );
+
+ ArtifactRepository r = repositorySystem.createArtifactRepository( "local", "file://" + getLocalRepositoryPath().getAbsolutePath(), repoLayout, null, null );
+
+ return r;
+ }
+
+ // ----------------------------------------------------------------------
+ // Project building
+ // ----------------------------------------------------------------------
+
+ protected MavenProject getProjectWithDependencies( File pom )
+ throws Exception
+ {
+ ProjectBuildingRequest configuration = newBuildingRequest();
+ configuration.setRemoteRepositories( Arrays.asList( new ArtifactRepository[] {} ) );
+ configuration.setProcessPlugins( false );
+ configuration.setResolveDependencies( true );
+
+ try
+ {
+ return projectBuilder.build( pom, configuration ).getProject();
+ }
+ catch ( Exception e )
+ {
+ Throwable cause = e.getCause();
+ if ( cause instanceof ModelBuildingException )
+ {
+ String message = "In: " + pom + "\n\n";
+ for ( ModelProblem problem : ( (ModelBuildingException) cause ).getProblems() )
+ {
+ message += problem + "\n";
+ }
+ System.out.println( message );
+ }
+
+ throw e;
+ }
+ }
+
+ protected MavenProject getProject( File pom )
+ throws Exception
+ {
+ ProjectBuildingRequest configuration = newBuildingRequest();
+
+ return projectBuilder.build( pom, configuration ).getProject();
+ }
+
+ protected ProjectBuildingRequest newBuildingRequest()
+ throws Exception
+ {
+ ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest();
+ configuration.setLocalRepository( getLocalRepository() );
+ initRepoSession( configuration );
+ return configuration;
+ }
+
+ protected void initRepoSession( ProjectBuildingRequest request )
+ {
+ File localRepo = new File( request.getLocalRepository().getBasedir() );
+ DefaultRepositorySystemSession repoSession = MavenRepositorySystemUtils.newSession();
+ repoSession.setLocalRepositoryManager( new LegacyLocalRepositoryManager( localRepo ) );
+ request.setRepositorySession( repoSession );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
new file mode 100644
index 00000000..13c32abb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
@@ -0,0 +1,193 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.codehaus.plexus.util.FileUtils;
+
+public class DefaultMavenProjectBuilderTest
+ extends AbstractMavenProjectTestCase
+{
+
+ private List<File> filesToDelete = new ArrayList<File>();
+
+ private File localRepoDir;
+
+ @Override
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ projectBuilder = lookup( ProjectBuilder.class );
+
+ localRepoDir = new File( System.getProperty( "java.io.tmpdir" ), "local-repo." + System.currentTimeMillis() );
+ localRepoDir.mkdirs();
+
+ filesToDelete.add( localRepoDir );
+ }
+
+ @Override
+ public void tearDown()
+ throws Exception
+ {
+ super.tearDown();
+
+ if ( !filesToDelete.isEmpty() )
+ {
+ for ( File file : filesToDelete )
+ {
+ if ( file.exists() )
+ {
+ if ( file.isDirectory() )
+ {
+ FileUtils.deleteDirectory( file );
+ }
+ else
+ {
+ file.delete();
+ }
+ }
+ }
+ }
+ }
+
+ protected MavenProject getProject( Artifact pom, boolean allowStub )
+ throws Exception
+ {
+ ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest();
+ configuration.setLocalRepository( getLocalRepository() );
+ initRepoSession( configuration );
+
+ return projectBuilder.build( pom, allowStub, configuration ).getProject();
+ }
+
+ /**
+ * Check that we can build ok from the middle pom of a (parent,child,grandchild) heirarchy
+ * @throws Exception
+ */
+ public void testBuildFromMiddlePom() throws Exception
+ {
+ File f1 = getTestFile( "src/test/resources/projects/grandchild-check/child/pom.xml");
+ File f2 = getTestFile( "src/test/resources/projects/grandchild-check/child/grandchild/pom.xml");
+
+ getProject( f1 );
+
+ // it's the building of the grandchild project, having already cached the child project
+ // (but not the parent project), which causes the problem.
+ getProject( f2 );
+ }
+
+ public void testDuplicatePluginDefinitionsMerged()
+ throws Exception
+ {
+ File f1 = getTestFile( "src/test/resources/projects/duplicate-plugins-merged-pom.xml" );
+
+ MavenProject project = getProject( f1 );
+ assertEquals( 2, project.getBuildPlugins().get( 0 ).getDependencies().size() );
+ assertEquals( 2, project.getBuildPlugins().get( 0 ).getExecutions().size() );
+ assertEquals( "first", project.getBuildPlugins().get( 0 ).getExecutions().get( 0 ).getId() );
+ }
+
+ public void testBuildStubModelForMissingRemotePom()
+ throws Exception
+ {
+ Artifact pom = repositorySystem.createProjectArtifact( "org.apache.maven.its", "missing", "0.1" );
+ MavenProject project = getProject( pom, true );
+
+ assertNotNull( project.getArtifactId() );
+
+ assertNotNull( project.getRemoteArtifactRepositories() );
+ assertFalse( project.getRemoteArtifactRepositories().isEmpty() );
+
+ assertNotNull( project.getPluginArtifactRepositories() );
+ assertFalse( project.getPluginArtifactRepositories().isEmpty() );
+
+ assertNull( project.getParent() );
+ assertNull( project.getParentArtifact() );
+
+ assertFalse( project.isExecutionRoot() );
+ }
+
+ @Override
+ protected ArtifactRepository getLocalRepository()
+ throws Exception
+ {
+ ArtifactRepositoryLayout repoLayout = lookup( ArtifactRepositoryLayout.class, "default" );
+ ArtifactRepository r =
+ repositorySystem.createArtifactRepository( "local", "file://" + localRepoDir.getAbsolutePath(), repoLayout,
+ null, null );
+ return r;
+ }
+
+ public void xtestLoop()
+ throws Exception
+ {
+ while ( true )
+ {
+ File f1 = getTestFile( "src/test/resources/projects/duplicate-plugins-merged-pom.xml" );
+ getProject( f1 );
+ }
+ }
+
+ public void testPartialResultUponBadDependencyDeclaration()
+ throws Exception
+ {
+ File pomFile = getTestFile( "src/test/resources/projects/bad-dependency.xml" );
+
+ try
+ {
+ ProjectBuildingRequest request = newBuildingRequest();
+ request.setProcessPlugins( false );
+ request.setResolveDependencies( true );
+ projectBuilder.build( pomFile, request );
+ fail( "Project building did not fail despite invalid POM" );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ List<ProjectBuildingResult> results = e.getResults();
+ assertNotNull( results );
+ assertEquals( 1, results.size() );
+ ProjectBuildingResult result = results.get( 0 );
+ assertNotNull( result );
+ assertNotNull( result.getProject() );
+ assertEquals( 1, result.getProblems().size() );
+ assertEquals( 1, result.getProject().getArtifacts().size() );
+ assertNotNull( result.getDependencyResolutionResult() );
+ }
+ }
+
+ public void testImportScopePomResolvesFromPropertyBasedRepository()
+ throws Exception
+ {
+ File pomFile = getTestFile( "src/test/resources/projects/import-scope-pom-resolves-from-property-based-repository.xml" );
+ ProjectBuildingRequest request = newBuildingRequest();
+ request.setProcessPlugins( false );
+ request.setResolveDependencies( true );
+ projectBuilder.build( pomFile, request );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java
new file mode 100644
index 00000000..8ff912fb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java
@@ -0,0 +1,109 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.LifecycleExecutor;
+import org.apache.maven.lifecycle.MavenExecutionPlan;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.plugin.MojoExecution;
+
+/**
+ * A stub implementation that assumes an empty lifecycle to bypass interaction with the plugin manager and to avoid
+ * plugin artifact resolution from repositories.
+ *
+ * @author Benjamin Bentmann
+ */
+public class EmptyLifecycleExecutor
+ implements LifecycleExecutor
+{
+
+ public MavenExecutionPlan calculateExecutionPlan( MavenSession session, String... tasks )
+ {
+ return new MavenExecutionPlan( null, null );
+ }
+
+ public MavenExecutionPlan calculateExecutionPlan( MavenSession session, boolean setup, String... tasks )
+ {
+ return new MavenExecutionPlan( null, null );
+ }
+
+ public void execute( MavenSession session )
+ {
+ }
+
+ public Set<Plugin> getPluginsBoundByDefaultToAllLifecycles( String packaging )
+ {
+ Set<Plugin> plugins;
+
+ // NOTE: The upper-case packaging name is intentional, that's a special hinting mode used for certain tests
+ if ( "JAR".equals( packaging ) )
+ {
+ plugins = new LinkedHashSet<Plugin>();
+
+ plugins.add( newPlugin( "maven-compiler-plugin", "compile", "testCompile" ) );
+ plugins.add( newPlugin( "maven-resources-plugin", "resources", "testResources" ) );
+ plugins.add( newPlugin( "maven-surefire-plugin", "test" ) );
+ plugins.add( newPlugin( "maven-jar-plugin", "jar" ) );
+ plugins.add( newPlugin( "maven-install-plugin", "install" ) );
+ plugins.add( newPlugin( "maven-deploy-plugin", "deploy" ) );
+ }
+ else
+ {
+ plugins = Collections.emptySet();
+ }
+
+ return plugins;
+ }
+
+ private Plugin newPlugin( String artifactId, String... goals )
+ {
+ Plugin plugin = new Plugin();
+
+ plugin.setGroupId( "org.apache.maven.plugins" );
+ plugin.setArtifactId( artifactId );
+
+ for ( String goal : goals )
+ {
+ PluginExecution pluginExecution = new PluginExecution();
+ pluginExecution.setId( "default-" + goal );
+ pluginExecution.addGoal( goal );
+ plugin.addExecution( pluginExecution );
+ }
+
+ return plugin;
+ }
+
+ public void calculateForkedExecutions( MojoExecution mojoExecution, MavenSession session )
+ {
+ }
+
+ public List<MavenProject> executeForkedExecutions( MojoExecution mojoExecution, MavenSession session )
+ {
+ return Collections.emptyList();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java
new file mode 100644
index 00000000..21e37f1f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java
@@ -0,0 +1,62 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Repository;
+
+/**
+ * A stub implementation to bypass artifact resolution from repositories.
+ *
+ * @author Benjamin Bentmann
+ */
+public class EmptyProjectBuildingHelper
+ implements ProjectBuildingHelper
+{
+
+ public List<ArtifactRepository> createArtifactRepositories( List<Repository> pomRepositories,
+ List<ArtifactRepository> externalRepositories,
+ ProjectBuildingRequest request )
+ {
+ if ( externalRepositories != null )
+ {
+ return externalRepositories;
+ }
+ else
+ {
+ return new ArrayList<ArtifactRepository>();
+ }
+ }
+
+ public ProjectRealmCache.CacheRecord createProjectRealm( MavenProject proejct,
+ Model model, ProjectBuildingRequest request )
+ {
+ return new ProjectRealmCache.CacheRecord( null, null );
+ }
+
+ public void selectProjectRealm( MavenProject project )
+ {
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/ExtensionDescriptorBuilderTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/ExtensionDescriptorBuilderTest.java
new file mode 100644
index 00000000..68727013
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/ExtensionDescriptorBuilderTest.java
@@ -0,0 +1,101 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@link ExtensionDescriptorBuilder}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ExtensionDescriptorBuilderTest
+ extends TestCase
+{
+
+ private ExtensionDescriptorBuilder builder;
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ builder = new ExtensionDescriptorBuilder();
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ builder = null;
+
+ super.tearDown();
+ }
+
+ private InputStream toStream( String xml )
+ {
+ try
+ {
+ return new ByteArrayInputStream( xml.getBytes( "UTF-8" ) );
+ }
+ catch ( UnsupportedEncodingException e )
+ {
+ throw new IllegalStateException( e );
+ }
+ }
+
+ public void testEmptyDescriptor()
+ throws Exception
+ {
+ String xml = "<extension></extension>";
+
+ ExtensionDescriptor ed = builder.build( toStream( xml ) );
+
+ assertNotNull( ed );
+ assertNotNull( ed.getExportedPackages() );
+ assertTrue( ed.getExportedPackages().isEmpty() );
+ assertNotNull( ed.getExportedArtifacts() );
+ assertTrue( ed.getExportedArtifacts().isEmpty() );
+ }
+
+ public void testCompleteDescriptor()
+ throws Exception
+ {
+ String xml =
+ "<?xml version='1.0' encoding='UTF-8'?>" + "<extension>" + "<exportedPackages>"
+ + "<exportedPackage>a</exportedPackage>" + "<exportedPackage>b</exportedPackage>"
+ + "<exportedPackage>c</exportedPackage>" + "</exportedPackages>" + "<exportedArtifacts>"
+ + "<exportedArtifact>x</exportedArtifact>" + "<exportedArtifact>y</exportedArtifact>"
+ + "<exportedArtifact> z </exportedArtifact>" + "</exportedArtifacts>" + "</extension>";
+
+ ExtensionDescriptor ed = builder.build( toStream( xml ) );
+
+ assertNotNull( ed );
+ assertEquals( Arrays.asList( "a", "b", "c" ), ed.getExportedPackages() );
+ assertEquals( Arrays.asList( "x", "y", "z" ), ed.getExportedArtifacts() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java
new file mode 100644
index 00000000..52fdd804
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java
@@ -0,0 +1,192 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.metadata.Metadata;
+import org.eclipse.aether.repository.LocalArtifactRegistration;
+import org.eclipse.aether.repository.LocalArtifactRequest;
+import org.eclipse.aether.repository.LocalArtifactResult;
+import org.eclipse.aether.repository.LocalMetadataRegistration;
+import org.eclipse.aether.repository.LocalMetadataRequest;
+import org.eclipse.aether.repository.LocalMetadataResult;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.LocalRepositoryManager;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class LegacyLocalRepositoryManager
+ implements LocalRepositoryManager
+{
+
+ private final LocalRepository repository;
+
+ public LegacyLocalRepositoryManager( File basedir )
+ {
+ this.repository = new LocalRepository( basedir.getAbsoluteFile(), "legacy" );
+ }
+
+ public LocalRepository getRepository()
+ {
+ return repository;
+ }
+
+ public String getPathForLocalArtifact( Artifact artifact )
+ {
+ StringBuilder path = new StringBuilder( 128 );
+
+ path.append( artifact.getGroupId() ).append( '/' );
+
+ path.append( artifact.getExtension() ).append( 's' ).append( '/' );
+
+ path.append( artifact.getArtifactId() ).append( '-' ).append( artifact.getVersion() );
+
+ if ( artifact.getClassifier().length() > 0 )
+ {
+ path.append( '-' ).append( artifact.getClassifier() );
+ }
+
+ path.append( '.' ).append( artifact.getExtension() );
+
+ return path.toString();
+ }
+
+ public String getPathForRemoteArtifact( Artifact artifact, RemoteRepository repository, String context )
+ {
+ return getPathForLocalArtifact( artifact );
+ }
+
+ public String getPathForLocalMetadata( Metadata metadata )
+ {
+ return getPath( metadata, "local" );
+ }
+
+ public String getPathForRemoteMetadata( Metadata metadata, RemoteRepository repository, String context )
+ {
+ return getPath( metadata, getRepositoryKey( repository, context ) );
+ }
+
+ String getRepositoryKey( RemoteRepository repository, String context )
+ {
+ return repository.getId();
+ }
+
+ private String getPath( Metadata metadata, String repositoryKey )
+ {
+ StringBuilder path = new StringBuilder( 128 );
+
+ if ( metadata.getGroupId().length() > 0 )
+ {
+ path.append( metadata.getGroupId().replace( '.', '/' ) ).append( '/' );
+
+ if ( metadata.getArtifactId().length() > 0 )
+ {
+ path.append( metadata.getArtifactId() ).append( '/' );
+
+ if ( metadata.getVersion().length() > 0 )
+ {
+ path.append( metadata.getVersion() ).append( '/' );
+ }
+ }
+ }
+
+ path.append( insertRepositoryKey( metadata.getType(), repositoryKey ) );
+
+ return path.toString();
+ }
+
+ private String insertRepositoryKey( String filename, String repositoryKey )
+ {
+ String result;
+ int idx = filename.indexOf( '.' );
+ if ( idx < 0 )
+ {
+ result = filename + '-' + repositoryKey;
+ }
+ else
+ {
+ result = filename.substring( 0, idx ) + '-' + repositoryKey + filename.substring( idx );
+ }
+ return result;
+ }
+
+ public LocalArtifactResult find( RepositorySystemSession session, LocalArtifactRequest request )
+ {
+ String path = getPathForLocalArtifact( request.getArtifact() );
+ File file = new File( getRepository().getBasedir(), path );
+
+ LocalArtifactResult result = new LocalArtifactResult( request );
+ if ( file.isFile() )
+ {
+ result.setFile( file );
+ result.setAvailable( true );
+ }
+
+ return result;
+ }
+
+ public void add( RepositorySystemSession session, LocalArtifactRegistration request )
+ {
+ // noop
+ }
+
+ public LocalMetadataResult find( RepositorySystemSession session, LocalMetadataRequest request )
+ {
+ LocalMetadataResult result = new LocalMetadataResult( request );
+
+ String path;
+
+ Metadata metadata = request.getMetadata();
+ String context = request.getContext();
+ RemoteRepository remote = request.getRepository();
+
+ if ( remote != null )
+ {
+ path = getPathForRemoteMetadata( metadata, remote, context );
+ }
+ else
+ {
+ path = getPathForLocalMetadata( metadata );
+ }
+
+ File file = new File( getRepository().getBasedir(), path );
+ if ( file.isFile() )
+ {
+ result.setFile( file );
+ }
+
+ return result;
+ }
+
+ public void add( RepositorySystemSession session, LocalMetadataRegistration request )
+ {
+ // noop
+ }
+
+ public String toString()
+ {
+ return String.valueOf( getRepository() );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/MavenProjectTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/MavenProjectTest.java
new file mode 100644
index 00000000..0c5cd07d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/MavenProjectTest.java
@@ -0,0 +1,197 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.maven.lifecycle.internal.stub.LoggerStub;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.Profile;
+
+public class MavenProjectTest
+ extends AbstractMavenProjectTestCase
+{
+
+ public void testShouldInterpretChildPathAdjustmentBasedOnModulePaths()
+ throws IOException
+ {
+ Model parentModel = new Model();
+ parentModel.addModule( "../child" );
+
+ MavenProject parentProject = new MavenProject( parentModel );
+
+ Model childModel = new Model();
+ childModel.setArtifactId( "artifact" );
+
+ MavenProject childProject = new MavenProject( childModel );
+
+ File childFile =
+ new File( System.getProperty( "java.io.tmpdir" ), "maven-project-tests" + System.currentTimeMillis()
+ + "/child/pom.xml" );
+
+ childProject.setFile( childFile );
+
+ String adjustment = parentProject.getModulePathAdjustment( childProject );
+
+ assertNotNull( adjustment );
+
+ assertEquals( "..", adjustment );
+ }
+
+ public void testIdentityProtoInheritance()
+ {
+ Parent parent = new Parent();
+
+ parent.setGroupId( "test-group" );
+ parent.setVersion( "1000" );
+ parent.setArtifactId( "test-artifact" );
+
+ Model model = new Model();
+
+ model.setParent( parent );
+ model.setArtifactId( "real-artifact" );
+
+ MavenProject project = new MavenProject( model );
+
+ assertEquals( "groupId proto-inheritance failed.", "test-group", project.getGroupId() );
+ assertEquals( "artifactId is masked.", "real-artifact", project.getArtifactId() );
+ assertEquals( "version proto-inheritance failed.", "1000", project.getVersion() );
+
+ // draw the NPE.
+ project.getId();
+ }
+
+ public void testEmptyConstructor()
+ {
+ MavenProject project = new MavenProject();
+
+ assertEquals( MavenProject.EMPTY_PROJECT_GROUP_ID + ":" + MavenProject.EMPTY_PROJECT_ARTIFACT_ID + ":jar:"
+ + MavenProject.EMPTY_PROJECT_VERSION, project.getId() );
+ }
+
+ public void testClone()
+ throws Exception
+ {
+ File f = getFileForClasspathResource( "canonical-pom.xml" );
+ MavenProject projectToClone = getProject( f );
+
+ MavenProject clonedProject = projectToClone.clone();
+ assertEquals( "maven-core", clonedProject.getArtifactId() );
+ Map<?, ?> clonedMap = clonedProject.getManagedVersionMap();
+ assertNotNull( "ManagedVersionMap not copied", clonedMap );
+ assertTrue( "ManagedVersionMap is not empty", clonedMap.isEmpty() );
+ }
+
+ public void testCloneWithDependencyManagement()
+ throws Exception
+ {
+ File f = getFileForClasspathResource( "dependencyManagement-pom.xml" );
+ MavenProject projectToClone = getProjectWithDependencies( f );
+ DependencyManagement dep = projectToClone.getDependencyManagement();
+ assertNotNull( "No dependencyManagement", dep );
+ List<?> list = dep.getDependencies();
+ assertNotNull( "No dependencies", list );
+ assertTrue( "Empty dependency list", !list.isEmpty() );
+
+ Map<?, ?> map = projectToClone.getManagedVersionMap();
+ assertNotNull( "No ManagedVersionMap", map );
+ assertTrue( "ManagedVersionMap is empty", !map.isEmpty() );
+
+ MavenProject clonedProject = projectToClone.clone();
+ assertEquals( "maven-core", clonedProject.getArtifactId() );
+ Map<?, ?> clonedMap = clonedProject.getManagedVersionMap();
+ assertNotNull( "ManagedVersionMap not copied", clonedMap );
+ assertTrue( "ManagedVersionMap is empty", !clonedMap.isEmpty() );
+ assertTrue( "ManagedVersionMap does not contain test key",
+ clonedMap.containsKey( "maven-test:maven-test-b:jar" ) );
+ }
+
+ public void testGetModulePathAdjustment()
+ throws IOException
+ {
+ Model moduleModel = new Model();
+
+ MavenProject module = new MavenProject( moduleModel );
+ module.setFile( new File( "module-dir/pom.xml" ) );
+
+ Model parentModel = new Model();
+ parentModel.addModule( "../module-dir" );
+
+ MavenProject parent = new MavenProject( parentModel );
+ parent.setFile( new File( "parent-dir/pom.xml" ) );
+
+ String pathAdjustment = parent.getModulePathAdjustment( module );
+
+ assertEquals( "..", pathAdjustment );
+ }
+
+ public void testCloneWithDistributionManagement()
+ throws Exception
+ {
+
+ File f = getFileForClasspathResource( "distributionManagement-pom.xml" );
+ MavenProject projectToClone = getProject( f );
+
+ MavenProject clonedProject = projectToClone.clone();
+ assertNotNull( "clonedProject - distributionManagement", clonedProject.getDistributionManagementArtifactRepository() );
+ }
+
+ public void testCloneWithActiveProfile()
+ throws Exception
+ {
+
+ File f = getFileForClasspathResource( "withActiveByDefaultProfile-pom.xml" );
+ MavenProject projectToClone = getProject( f );
+ List<Profile> activeProfilesOrig = projectToClone.getActiveProfiles();
+
+ assertEquals( "Expecting 1 active profile", 1, activeProfilesOrig.size() );
+
+ MavenProject clonedProject = projectToClone.clone();
+
+ List<Profile> activeProfilesClone = clonedProject.getActiveProfiles();
+
+ assertEquals( "Expecting 1 active profile", 1, activeProfilesClone.size() );
+
+ assertNotSame( "The list of active profiles should have been cloned too but is same", activeProfilesOrig,
+ activeProfilesClone );
+ }
+
+ public void testUndefinedOutputDirectory()
+ throws Exception
+ {
+ MavenProject p = new MavenProject();
+ assertNoNulls( p.getCompileClasspathElements() );
+ assertNoNulls( p.getSystemClasspathElements() );
+ assertNoNulls( p.getRuntimeClasspathElements() );
+ assertNoNulls( p.getTestClasspathElements() );
+ }
+
+ private void assertNoNulls( List<String> elements )
+ {
+ assertFalse( elements.contains( null ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
new file mode 100644
index 00000000..f17539b1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
@@ -0,0 +1,1878 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.project.harness.PomTestWrapper;
+import org.apache.maven.repository.RepositorySystem;
+import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusTestCase;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
+import org.eclipse.aether.repository.LocalRepository;
+
+public class PomConstructionTest
+ extends PlexusTestCase
+{
+ private static String BASE_DIR = "src/test";
+
+ private static String BASE_POM_DIR = BASE_DIR + "/resources-project-builder";
+
+ private static String BASE_MIXIN_DIR = BASE_DIR + "/resources-mixins";
+
+ private DefaultProjectBuilder projectBuilder;
+
+ private RepositorySystem repositorySystem;
+
+ private File testDirectory;
+
+ @Override
+ protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration )
+ {
+ super.customizeContainerConfiguration( containerConfiguration );
+ containerConfiguration.setAutoWiring( true );
+ containerConfiguration.setClassPathScanning( PlexusConstants.SCANNING_INDEX );
+ }
+
+ protected void setUp()
+ throws Exception
+ {
+ testDirectory = new File( getBasedir(), BASE_POM_DIR );
+ new File( getBasedir(), BASE_MIXIN_DIR );
+ projectBuilder = (DefaultProjectBuilder) lookup( ProjectBuilder.class );
+ repositorySystem = lookup( RepositorySystem.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ projectBuilder = null;
+
+ super.tearDown();
+ }
+
+ /**
+ * Will throw exception if url is empty. MNG-4050
+ *
+ * @throws Exception
+ */
+
+ public void testEmptyUrl()
+ throws Exception
+ {
+ buildPom( "empty-distMng-repo-url" );
+ }
+
+ /**
+ * Tests that modules is not overriden by profile
+ *
+ * @throws Exception
+ */
+ /* MNG-786*/
+ public void testProfileModules()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "profile-module", "a" );
+ assertEquals( "test-prop", pom.getValue( "properties[1]/b" ) );// verifies profile applied
+ assertEquals( 4, ( (List<?>) pom.getValue( "modules" ) ).size() );
+ assertEquals( "module-2", pom.getValue( "modules[1]" ) );
+ assertEquals( "module-1", pom.getValue( "modules[2]" ) );
+ assertEquals( "module-3", pom.getValue( "modules[3]" ) );
+ assertEquals( "module-4", pom.getValue( "modules[4]" ) );
+ }
+
+ /**
+ * Will throw exception if doesn't find parent(s) in build
+ *
+ * @throws Exception
+ */
+ public void testParentInheritance()
+ throws Exception
+ {
+ buildPom( "parent-inheritance/sub" );
+ }
+
+ /*MNG-3995*/
+ public void testExecutionConfigurationJoin()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "execution-configuration-join" );
+ assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/configuration[1]/fileset[1]" ) ).size() );
+ }
+
+ /*MNG-3803*/
+ public void testPluginConfigProperties()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-config-properties" );
+ assertEquals( "my.property", pom.getValue( "build/plugins[1]/configuration[1]/systemProperties[1]/property[1]/name" ) );
+ }
+
+ /*MNG-3900*/
+ public void testProfilePropertiesInterpolation()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "profile-properties-interpolation", "interpolation-profile" );
+ assertEquals( "PASSED", pom.getValue( "properties[1]/test" ) );
+ assertEquals( "PASSED", pom.getValue( "properties[1]/property" ) );
+ }
+
+
+ // Some better conventions for the test poms needs to be created and each of these tests
+ // that represent a verification of a specification item needs to be a couple lines at most.
+ // The expressions help a lot, but we need a clean to pick up a directory of POMs, automatically load
+ // them into a resolver, create the expression to extract the data to validate the Model, and the URI
+ // to validate the properties. We also need a way to navigate from the Tex specification documents to
+ // the test in question and vice versa. A little Eclipse plugin would do the trick.
+ public void testThatExecutionsWithoutIdsAreMergedAndTheChildWins()
+ throws Exception
+ {
+ PomTestWrapper tester = buildPom( "micromailer" );
+ assertModelEquals( tester, "child-descriptor", "build/plugins[1]/executions[1]/goals[1]" );
+ }
+
+ /*MNG-
+ public void testDependencyScope()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "dependency-scope/sub" );
+
+ }
+
+ /*MNG- 4010*/
+ public void testDuplicateExclusionsDependency()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "duplicate-exclusions-dependency/sub" );
+ assertEquals( 1, ( (List<?>) pom.getValue( "dependencies[1]/exclusions" ) ).size() );
+
+ }
+
+ /*MNG- 4008*/
+ public void testMultipleFilters()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "multiple-filters" );
+ assertEquals( 4, ( (List<?>) pom.getValue( "build/filters" ) ).size() );
+
+ }
+
+ /** MNG-4005: postponed to 3.1
+ public void testValidationErrorUponNonUniqueDependencyKey()
+ throws Exception
+ {
+ try
+ {
+ buildPom( "unique-dependency-key/deps" );
+ fail( "Non-unique dependency keys did not cause validation error" );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // expected
+ }
+ }
+
+ public void testValidationErrorUponNonUniqueDependencyManagementKey()
+ throws Exception
+ {
+ try
+ {
+ buildPom( "unique-dependency-key/dep-mngt" );
+ fail( "Non-unique dependency keys did not cause validation error" );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // expected
+ }
+ }
+
+ public void testValidationErrorUponNonUniqueDependencyKeyInProfile()
+ throws Exception
+ {
+ try
+ {
+ buildPom( "unique-dependency-key/deps-in-profile" );
+ fail( "Non-unique dependency keys did not cause validation error" );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // expected
+ }
+ }
+
+ public void testValidationErrorUponNonUniqueDependencyManagementKeyInProfile()
+ throws Exception
+ {
+ try
+ {
+ buildPom( "unique-dependency-key/dep-mngt-in-profile" );
+ fail( "Non-unique dependency keys did not cause validation error" );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // expected
+ }
+ }
+ */
+
+ public void testDuplicateDependenciesCauseLastDeclarationToBePickedInLenientMode()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "unique-dependency-key/deps", true, null );
+ assertEquals( 1, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
+ assertEquals( "0.2", pom.getValue( "dependencies[1]/version" ) );
+ }
+
+ /* MNG-3567*/
+ public void testParentInterpolation()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "parent-interpolation/sub" );
+ pom = new PomTestWrapper( pom.getMavenProject().getParent() );
+ assertEquals( "1.3.0-SNAPSHOT", pom.getValue( "build/plugins[1]/version" ) );
+ }
+
+/*
+ public void testMaven()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPomFromMavenProject( "maven-build/sub/pom.xml", null );
+
+ for( String s: pom.getMavenProject().getTestClasspathElements() )
+ {
+ System.out.println( s );
+ }
+
+ }
+ */
+
+ /* MNG-3567*/
+ public void testPluginManagementInherited()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "pluginmanagement-inherited/sub" );
+ assertEquals( "1.0-alpha-21", pom.getValue( "build/plugins[1]/version" ) );
+ }
+
+ /* MNG-2174*/
+ public void testPluginManagementDependencies()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-management-dependencies/sub", "test" );
+ assertEquals( "1.0-alpha-21", pom.getValue( "build/plugins[1]/version" ) );
+ assertEquals( "1.0", pom.getValue( "build/plugins[1]/dependencies[1]/version" ) );
+ }
+
+
+ /* MNG-3877*/
+ public void testReportingInterpolation()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "reporting-interpolation" );
+ assertEquals( createPath( Arrays.asList( System.getProperty( "user.dir" ), "src", "test",
+ "resources-project-builder", "reporting-interpolation", "target",
+ "site" ) ), pom.getValue( "reporting/outputDirectory" ) );
+ }
+
+
+ public void testPluginOrder()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-order" );
+ assertEquals( "plexus-component-metadata", pom.getValue( "build/plugins[1]/artifactId" ) );
+ assertEquals( "maven-surefire-plugin", pom.getValue( "build/plugins[2]/artifactId" ) );
+ }
+
+ public void testErroneousJoiningOfDifferentPluginsWithEqualDependencies()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "equal-plugin-deps" );
+ assertEquals( "maven-it-plugin-a", pom.getValue( "build/plugins[1]/artifactId" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/dependencies" ) ).size() );
+ assertEquals( "maven-it-plugin-b", pom.getValue( "build/plugins[2]/artifactId" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/dependencies" ) ).size() );
+ }
+
+ /** MNG-3821 */
+ public void testErroneousJoiningOfDifferentPluginsWithEqualExecutionIds()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "equal-plugin-exec-ids" );
+ assertEquals( "maven-it-plugin-a", pom.getValue( "build/plugins[1]/artifactId" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
+ assertEquals( "maven-it-plugin-b", pom.getValue( "build/plugins[2]/artifactId" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
+ assertEquals( "maven-it-plugin-a", pom.getValue( "reporting/plugins[1]/artifactId" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "reporting/plugins[1]/reportSets" ) ).size() );
+ assertEquals( "maven-it-plugin-b", pom.getValue( "reporting/plugins[2]/artifactId" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "reporting/plugins[1]/reportSets" ) ).size() );
+ }
+
+ /** MNG-3998 */
+ public void testExecutionConfiguration()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "execution-configuration" );
+ assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
+ assertEquals( "src/main/mdo/nexus.xml",
+ ( pom.getValue( "build/plugins[1]/executions[1]/configuration[1]/model" ) ) );
+ assertEquals( "src/main/mdo/security.xml",
+ ( pom.getValue( "build/plugins[1]/executions[2]/configuration[1]/model" ) ) );
+ }
+
+ /*
+ public void testPluginConfigDuplicate()
+ throws Exception
+{
+ PomTestWrapper pom = buildPom( "plugin-config-duplicate/dup" );
+}
+*/
+
+
+ public void testSingleConfigurationInheritance()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "single-configuration-inheritance" );
+
+ assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/configuration[1]/rules" ) ).size() );
+ assertEquals( "2.0.6",
+ pom.getValue( "build/plugins[1]/executions[1]/configuration[1]/rules[1]/requireMavenVersion[1]/version" ) );
+ assertEquals( "[1.4,)",
+ pom.getValue( "build/plugins[1]/executions[1]/configuration[1]/rules[1]/requireJavaVersion[1]/version" ) );
+ }
+
+ public void testConfigWithPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "config-with-plugin-mng" );
+ assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
+ assertEquals( "src/main/mdo/security.xml", pom.getValue( "build/plugins[1]/executions[2]/configuration[1]/model" ) );
+ assertEquals( "1.0.8", pom.getValue( "build/plugins[1]/executions[1]/configuration[1]/version" ) );
+ }
+
+ /** MNG-3965 */
+ public void testExecutionConfigurationSubcollections()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "execution-configuration-subcollections" );
+ assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/configuration[1]/rules[1]/bannedDependencies" ) ).size() );
+ }
+
+ /** MNG-3985 */
+ public void testMultipleRepositories()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "multiple-repos/sub" );
+ assertEquals( 3, ( (List<?>) pom.getValue( "repositories" ) ).size() );
+ }
+
+ /** MNG-3965 */
+ public void testMultipleExecutionIds()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "dual-execution-ids/sub" );
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
+ }
+
+ /** MNG-3997 */
+ public void testConsecutiveEmptyElements()
+ throws Exception
+ {
+ buildPom( "consecutive_empty_elements" );
+ }
+
+ public void testOrderOfGoalsFromPluginExecutionWithoutPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-goals-order/wo-plugin-mngt" );
+ assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/goals" ) ).size() );
+ assertEquals( "b", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
+ assertEquals( "a", pom.getValue( "build/plugins[1]/executions[1]/goals[2]" ) );
+ assertEquals( "d", pom.getValue( "build/plugins[1]/executions[1]/goals[3]" ) );
+ assertEquals( "c", pom.getValue( "build/plugins[1]/executions[1]/goals[4]" ) );
+ assertEquals( "e", pom.getValue( "build/plugins[1]/executions[1]/goals[5]" ) );
+ }
+
+ /* MNG-3886*/
+ public void testOrderOfGoalsFromPluginExecutionWithPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-goals-order/w-plugin-mngt" );
+ assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/goals" ) ).size() );
+ assertEquals( "b", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
+ assertEquals( "a", pom.getValue( "build/plugins[1]/executions[1]/goals[2]" ) );
+ assertEquals( "d", pom.getValue( "build/plugins[1]/executions[1]/goals[3]" ) );
+ assertEquals( "c", pom.getValue( "build/plugins[1]/executions[1]/goals[4]" ) );
+ assertEquals( "e", pom.getValue( "build/plugins[1]/executions[1]/goals[5]" ) );
+ }
+
+ public void testOrderOfPluginExecutionsWithoutPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-order/wo-plugin-mngt" );
+ assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
+ assertEquals( "b", pom.getValue( "build/plugins[1]/executions[1]/id" ) );
+ assertEquals( "a", pom.getValue( "build/plugins[1]/executions[2]/id" ) );
+ assertEquals( "d", pom.getValue( "build/plugins[1]/executions[3]/id" ) );
+ assertEquals( "c", pom.getValue( "build/plugins[1]/executions[4]/id" ) );
+ assertEquals( "e", pom.getValue( "build/plugins[1]/executions[5]/id" ) );
+ }
+
+ /* MNG-3887 */
+ public void testOrderOfPluginExecutionsWithPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-order/w-plugin-mngt" );
+ assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
+ assertEquals( "b", pom.getValue( "build/plugins[1]/executions[1]/id" ) );
+ assertEquals( "a", pom.getValue( "build/plugins[1]/executions[2]/id" ) );
+ assertEquals( "d", pom.getValue( "build/plugins[1]/executions[3]/id" ) );
+ assertEquals( "c", pom.getValue( "build/plugins[1]/executions[4]/id" ) );
+ assertEquals( "e", pom.getValue( "build/plugins[1]/executions[5]/id" ) );
+ }
+
+ public void testMergeOfPluginExecutionsWhenChildInheritsPluginVersion()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-merging-wo-version/sub" );
+ assertEquals( 4, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
+ }
+
+ /* MNG-3943*/
+ public void testMergeOfPluginExecutionsWhenChildAndParentUseDifferentPluginVersions()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-merging-version-insensitive/sub" );
+ assertEquals( 4, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
+ }
+
+
+ public void testInterpolationWithXmlMarkup()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "xml-markup-interpolation" );
+ assertEquals( "<?xml version='1.0'?>Tom&Jerry", pom.getValue( "properties/xmlTest" ) );
+ }
+
+ /* MNG-3925 */
+ public void testOrderOfMergedPluginExecutionsWithoutPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "merged-plugin-exec-order/wo-plugin-mngt/sub" );
+ assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
+ assertEquals( "parent-1", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
+ assertEquals( "parent-2", pom.getValue( "build/plugins[1]/executions[2]/goals[1]" ) );
+ assertEquals( "child-default", pom.getValue( "build/plugins[1]/executions[3]/goals[1]" ) );
+ assertEquals( "child-1", pom.getValue( "build/plugins[1]/executions[4]/goals[1]" ) );
+ assertEquals( "child-2", pom.getValue( "build/plugins[1]/executions[5]/goals[1]" ) );
+ }
+
+ public void testOrderOfMergedPluginExecutionsWithPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "merged-plugin-exec-order/w-plugin-mngt/sub" );
+ assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
+ assertEquals( "parent-1", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
+ assertEquals( "parent-2", pom.getValue( "build/plugins[1]/executions[2]/goals[1]" ) );
+ assertEquals( "child-default", pom.getValue( "build/plugins[1]/executions[3]/goals[1]" ) );
+ assertEquals( "child-1", pom.getValue( "build/plugins[1]/executions[4]/goals[1]" ) );
+ assertEquals( "child-2", pom.getValue( "build/plugins[1]/executions[5]/goals[1]" ) );
+ }
+
+ /* MNG-3984*/
+ public void testDifferentContainersWithSameId()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "join-different-containers-same-id" );
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/goals" ) ).size() );
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/pluginManagement/plugins[@artifactId='maven-it-plugin-b']/executions[1]/goals" ) ).size() );
+ }
+
+ /* MNG-3937*/
+ public void testOrderOfMergedPluginExecutionGoalsWithoutPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "merged-plugin-exec-goals-order/wo-plugin-mngt/sub" );
+
+ assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/goals" ) ).size() );
+ assertEquals( "child-a", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
+ assertEquals( "merged", pom.getValue( "build/plugins[1]/executions[1]/goals[2]" ) );
+ assertEquals( "child-b", pom.getValue( "build/plugins[1]/executions[1]/goals[3]" ) );
+ assertEquals( "parent-b", pom.getValue( "build/plugins[1]/executions[1]/goals[4]" ) );
+ assertEquals( "parent-a", pom.getValue( "build/plugins[1]/executions[1]/goals[5]" ) );
+ }
+
+ public void testOrderOfMergedPluginExecutionGoalsWithPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "merged-plugin-exec-goals-order/w-plugin-mngt/sub" );
+ assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/goals" ) ).size() );
+ assertEquals( "child-a", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
+ assertEquals( "merged", pom.getValue( "build/plugins[1]/executions[1]/goals[2]" ) );
+ assertEquals( "child-b", pom.getValue( "build/plugins[1]/executions[1]/goals[3]" ) );
+ assertEquals( "parent-b", pom.getValue( "build/plugins[1]/executions[1]/goals[4]" ) );
+ assertEquals( "parent-a", pom.getValue( "build/plugins[1]/executions[1]/goals[5]" ) );
+ }
+
+ /*MNG-3938*/
+ public void testOverridingOfInheritedPluginExecutionsWithoutPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-merging/wo-plugin-mngt/sub" );
+ assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
+ assertEquals( "child-default", pom.getValue( "build/plugins[1]/executions[@id='default']/phase" ) );
+ assertEquals( "child-non-default", pom.getValue( "build/plugins[1]/executions[@id='non-default']/phase" ) );
+ }
+
+ /* MNG-3938 */
+ public void testOverridingOfInheritedPluginExecutionsWithPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-merging/w-plugin-mngt/sub" );
+ assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
+ assertEquals( "child-default", pom.getValue( "build/plugins[1]/executions[@id='default']/phase" ) );
+ assertEquals( "child-non-default", pom.getValue( "build/plugins[1]/executions[@id='non-default']/phase" ) );
+ }
+
+
+ /* MNG-3906*/
+ public void testOrderOfMergedPluginDependenciesWithoutPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "merged-plugin-class-path-order/wo-plugin-mngt/sub" );
+
+ assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/dependencies" ) ).size() );
+ assertNotNull( pom.getValue( "build/plugins[1]/dependencies[1]" ) );
+ assertEquals( "c", pom.getValue( "build/plugins[1]/dependencies[1]/artifactId" ) );
+ assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[1]/version" ) );
+ assertEquals( "a", pom.getValue( "build/plugins[1]/dependencies[2]/artifactId" ) );
+ assertEquals( "2", pom.getValue( "build/plugins[1]/dependencies[2]/version" ) );
+ assertEquals( "b", pom.getValue( "build/plugins[1]/dependencies[3]/artifactId" ) );
+ assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[3]/version" ) );
+ assertEquals( "e", pom.getValue( "build/plugins[1]/dependencies[4]/artifactId" ) );
+ assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[4]/version" ) );
+ assertEquals( "d", pom.getValue( "build/plugins[1]/dependencies[5]/artifactId" ) );
+ assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[5]/version" ) );
+ }
+
+ public void testOrderOfMergedPluginDependenciesWithPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "merged-plugin-class-path-order/w-plugin-mngt/sub" );
+ assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/dependencies" ) ).size() );
+ assertEquals( "c", pom.getValue( "build/plugins[1]/dependencies[1]/artifactId" ) );
+ assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[1]/version" ) );
+ assertEquals( "a", pom.getValue( "build/plugins[1]/dependencies[2]/artifactId" ) );
+ assertEquals( "2", pom.getValue( "build/plugins[1]/dependencies[2]/version" ) );
+ assertEquals( "b", pom.getValue( "build/plugins[1]/dependencies[3]/artifactId" ) );
+ assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[3]/version" ) );
+ assertEquals( "e", pom.getValue( "build/plugins[1]/dependencies[4]/artifactId" ) );
+ assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[4]/version" ) );
+ assertEquals( "d", pom.getValue( "build/plugins[1]/dependencies[5]/artifactId" ) );
+ assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[5]/version" ) );
+ }
+
+ public void testInterpolationOfNestedBuildDirectories()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "nested-build-dir-interpolation" );
+ assertEquals( new File( pom.getBasedir(), "target/classes/dir0" ),
+ new File( (String) pom.getValue( "properties/dir0" ) ) );
+ assertEquals( new File( pom.getBasedir(), "src/test/dir1" ),
+ new File( (String) pom.getValue( "properties/dir1" ) ) );
+ assertEquals( new File( pom.getBasedir(), "target/site/dir2" ),
+ new File( (String) pom.getValue( "properties/dir2" ) ) );
+ }
+
+ public void testAppendArtifactIdOfChildToInheritedUrls()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "url-inheritance/sub" );
+ assertEquals( "http://parent.url/child", pom.getValue( "url" ) );
+ assertEquals( "http://parent.url/org", pom.getValue( "organization/url" ) );
+ assertEquals( "http://parent.url/license.txt", pom.getValue( "licenses[1]/url" ) );
+ assertEquals( "http://parent.url/viewvc/child", pom.getValue( "scm/url" ) );
+ assertEquals( "http://parent.url/scm/child", pom.getValue( "scm/connection" ) );
+ assertEquals( "https://parent.url/scm/child", pom.getValue( "scm/developerConnection" ) );
+ assertEquals( "http://parent.url/issues", pom.getValue( "issueManagement/url" ) );
+ assertEquals( "http://parent.url/ci", pom.getValue( "ciManagement/url" ) );
+ assertEquals( "http://parent.url/dist", pom.getValue( "distributionManagement/repository/url" ) );
+ assertEquals( "http://parent.url/snaps", pom.getValue( "distributionManagement/snapshotRepository/url" ) );
+ assertEquals( "http://parent.url/site/child", pom.getValue( "distributionManagement/site/url" ) );
+ assertEquals( "http://parent.url/download", pom.getValue( "distributionManagement/downloadUrl" ) );
+ }
+
+ /* MNG-3846*/
+ public void testAppendArtifactIdOfParentAndChildToInheritedUrls()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "url-inheritance/another-parent/sub" );
+ assertEquals( "http://parent.url/ap/child", pom.getValue( "url" ) );
+ assertEquals( "http://parent.url/org", pom.getValue( "organization/url" ) );
+ assertEquals( "http://parent.url/license.txt", pom.getValue( "licenses[1]/url" ) );
+ assertEquals( "http://parent.url/viewvc/ap/child", pom.getValue( "scm/url" ) );
+ assertEquals( "http://parent.url/scm/ap/child", pom.getValue( "scm/connection" ) );
+ assertEquals( "https://parent.url/scm/ap/child", pom.getValue( "scm/developerConnection" ) );
+ assertEquals( "http://parent.url/issues", pom.getValue( "issueManagement/url" ) );
+ assertEquals( "http://parent.url/ci", pom.getValue( "ciManagement/url" ) );
+ assertEquals( "http://parent.url/dist", pom.getValue( "distributionManagement/repository/url" ) );
+ assertEquals( "http://parent.url/snaps", pom.getValue( "distributionManagement/snapshotRepository/url" ) );
+ assertEquals( "http://parent.url/site/ap/child", pom.getValue( "distributionManagement/site/url" ) );
+ assertEquals( "http://parent.url/download", pom.getValue( "distributionManagement/downloadUrl" ) );
+ }
+ //*/
+
+ public void testNonInheritedElementsInSubtreesOverriddenByChild()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "limited-inheritance/child" );
+ assertEquals( null, pom.getValue( "organization/url" ) );
+ assertEquals( null, pom.getValue( "issueManagement/system" ) );
+ assertEquals( 0, ( (List<?>) pom.getValue( "ciManagement/notifiers" ) ).size() );
+ assertEquals( "child-distros", pom.getValue( "distributionManagement/repository/id" ) );
+ assertEquals( "ssh://child.url/distros", pom.getValue( "distributionManagement/repository/url" ) );
+ assertEquals( null, pom.getValue( "distributionManagement/repository/name" ) );
+ assertEquals( true, pom.getValue( "distributionManagement/repository/uniqueVersion" ) );
+ assertEquals( "default", pom.getValue( "distributionManagement/repository/layout" ) );
+ assertEquals( "child-snaps", pom.getValue( "distributionManagement/snapshotRepository/id" ) );
+ assertEquals( "ssh://child.url/snaps", pom.getValue( "distributionManagement/snapshotRepository/url" ) );
+ assertEquals( null, pom.getValue( "distributionManagement/snapshotRepository/name" ) );
+ assertEquals( true, pom.getValue( "distributionManagement/snapshotRepository/uniqueVersion" ) );
+ assertEquals( "default", pom.getValue( "distributionManagement/snapshotRepository/layout" ) );
+ assertEquals( "child-site", pom.getValue( "distributionManagement/site/id" ) );
+ assertEquals( "scp://child.url/site", pom.getValue( "distributionManagement/site/url" ) );
+ assertEquals( null, pom.getValue( "distributionManagement/site/name" ) );
+ }
+
+ public void testXmlTextCoalescing()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "xml-coalesce-text" );
+ assertEquals( "A Test Project Property", pom.getValue( "properties/prop0" ) );
+ assertEquals( "That's a test!", pom.getValue( "properties/prop1" ) );
+ assertEquals( 32 * 1024,
+ pom.getValue( "properties/prop2" ).toString().trim().replaceAll( "[\n\r]", "" ).length() );
+ }
+
+ public void testFullInterpolationOfNestedExpressions()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "full-interpolation" );
+ for ( int i = 0; i < 24; i++ )
+ {
+ String index = ( ( i < 10 ) ? "0" : "" ) + i;
+ assertEquals( "PASSED", pom.getValue( "properties/property" + index ) );
+ }
+ }
+
+ public void testInterpolationOfLegacyExpressionsThatDontIncludeTheProjectPrefix()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "unprefixed-expression-interpolation/child" );
+
+ assertEquals( pom.getBasedir(), new File( pom.getValue( "properties/projectDir" ).toString() ) );
+
+ assertEquals( "org.apache.maven.its.mng3831.child", pom.getValue( "properties/projectGroupId" ) );
+ assertEquals( "child", pom.getValue( "properties/projectArtifactId" ) );
+ assertEquals( "2.0-alpha-1", pom.getValue( "properties/projectVersion" ) );
+ assertEquals( "jar", pom.getValue( "properties/projectPackaging" ) );
+
+ assertEquals( "child-name", pom.getValue( "properties/projectName" ) );
+ assertEquals( "child-desc", pom.getValue( "properties/projectDesc" ) );
+ assertEquals( "http://child.org/", pom.getValue( "properties/projectUrl" ) );
+ assertEquals( "2008", pom.getValue( "properties/projectYear" ) );
+ assertEquals( "child-org-name", pom.getValue( "properties/projectOrgName" ) );
+
+ assertEquals( "2.0.0", pom.getValue( "properties/projectPrereqMvn" ) );
+ assertEquals( "http://scm.org/", pom.getValue( "properties/projectScmUrl" ) );
+ assertEquals( "http://issue.org/", pom.getValue( "properties/projectIssueUrl" ) );
+ assertEquals( "http://ci.org/", pom.getValue( "properties/projectCiUrl" ) );
+ assertEquals( "child-dist-repo", pom.getValue( "properties/projectDistRepoName" ) );
+ assertEquals( "http://dist.org/", pom.getValue( "properties/projectDistRepoUrl" ) );
+ assertEquals( "http://site.org/", pom.getValue( "properties/projectDistSiteUrl" ) );
+
+ assertEquals( "org.apache.maven.its.mng3831", pom.getValue( "properties/parentGroupId" ) );
+ assertEquals( "parent", pom.getValue( "properties/parentArtifactId" ) );
+ assertEquals( "1.0", pom.getValue( "properties/parentVersion" ) );
+
+ assertTrue( pom.getValue( "properties/projectBuildOut" ).toString().endsWith( "bin" ) );
+ assertTrue( pom.getValue( "properties/projectSiteOut" ).toString().endsWith( "doc" ) );
+ }
+
+ public void testInterpolationWithBasedirAlignedDirectories()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "basedir-aligned-interpolation" );
+ assertEquals( new File( pom.getBasedir(), "src/main/java" ),
+ new File( pom.getValue( "properties/buildMainSrc" ).toString() ) );
+ assertEquals( new File( pom.getBasedir(), "src/test/java" ),
+ new File( pom.getValue( "properties/buildTestSrc" ).toString() ) );
+ assertEquals( new File( pom.getBasedir(), "src/main/scripts" ),
+ new File( pom.getValue( "properties/buildScriptSrc" ).toString() ) );
+ assertEquals( new File( pom.getBasedir(), "target" ),
+ new File( pom.getValue( "properties/buildOut" ).toString() ) );
+ assertEquals( new File( pom.getBasedir(), "target/classes" ),
+ new File( pom.getValue( "properties/buildMainOut" ).toString() ) );
+ assertEquals( new File( pom.getBasedir(), "target/test-classes" ),
+ new File( pom.getValue( "properties/buildTestOut" ).toString() ) );
+ assertEquals( new File( pom.getBasedir(), "target/site" ),
+ new File( pom.getValue( "properties/siteOut" ).toString() ) );
+ }
+
+ /* MNG-3944*/
+ public void testInterpolationOfBasedirInPomWithUnusualName()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "basedir-interpolation/pom-with-unusual-name.xml" );
+ assertEquals( pom.getBasedir(), new File( pom.getValue( "properties/prop0" ).toString() ) );
+ assertEquals( pom.getBasedir(), new File( pom.getValue( "properties/prop1" ).toString() ) );
+ }
+
+ /* MNG-3979 */
+ public void testJoiningOfContainersWhenChildHasEmptyElements()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "id-container-joining-with-empty-elements/sub" );
+ assertNotNull( pom );
+ }
+
+ public void testOrderOfPluginConfigurationElementsWithoutPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-config-order/wo-plugin-mngt" );
+ assertEquals( "one", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[1]" ) );
+ assertEquals( "two", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[2]" ) );
+ assertEquals( "three", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[3]" ) );
+ assertEquals( "four", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[4]" ) );
+ }
+
+ /* MNG-3827*/
+ public void testOrderOfPluginConfigurationElementsWithPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-config-order/w-plugin-mngt" );
+ assertEquals( "one", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[1]" ) );
+ assertEquals( "two", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[2]" ) );
+ assertEquals( "three", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[3]" ) );
+ assertEquals( "four", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[4]" ) );
+ }
+
+ public void testOrderOfPluginExecutionConfigurationElementsWithoutPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-config-order/wo-plugin-mngt" );
+ String prefix = "build/plugins[1]/executions[1]/configuration/";
+ assertEquals( "one", pom.getValue( prefix + "stringParams/stringParam[1]" ) );
+ assertEquals( "two", pom.getValue( prefix + "stringParams/stringParam[2]" ) );
+ assertEquals( "three", pom.getValue( prefix + "stringParams/stringParam[3]" ) );
+ assertEquals( "four", pom.getValue( prefix + "stringParams/stringParam[4]" ) );
+ assertEquals( "key1", pom.getValue( prefix + "propertiesParam/property[1]/name" ) );
+ assertEquals( "key2", pom.getValue( prefix + "propertiesParam/property[2]/name" ) );
+ }
+
+ /* MNG-3864*/
+ public void testOrderOfPluginExecutionConfigurationElementsWithPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-config-order/w-plugin-mngt" );
+ String prefix = "build/plugins[1]/executions[1]/configuration/";
+ assertEquals( "one", pom.getValue( prefix + "stringParams/stringParam[1]" ) );
+ assertEquals( "two", pom.getValue( prefix + "stringParams/stringParam[2]" ) );
+ assertEquals( "three", pom.getValue( prefix + "stringParams/stringParam[3]" ) );
+ assertEquals( "four", pom.getValue( prefix + "stringParams/stringParam[4]" ) );
+ assertEquals( "key1", pom.getValue( prefix + "propertiesParam/property[1]/name" ) );
+ assertEquals( "key2", pom.getValue( prefix + "propertiesParam/property[2]/name" ) );
+ }
+
+ /* MNG-3836*/
+ public void testMergeOfInheritedPluginConfiguration()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-config-merging/child" );
+
+ String prefix = "build/plugins[1]/configuration/";
+ assertEquals( "PASSED", pom.getValue( prefix + "propertiesFile" ) );
+ assertEquals( "PASSED", pom.getValue( prefix + "parent" ) );
+ assertEquals( "PASSED-1", pom.getValue( prefix + "stringParams/stringParam[1]" ) );
+ assertEquals( "PASSED-3", pom.getValue( prefix + "stringParams/stringParam[2]" ) );
+ assertEquals( "PASSED-2", pom.getValue( prefix + "stringParams/stringParam[3]" ) );
+ assertEquals( "PASSED-4", pom.getValue( prefix + "stringParams/stringParam[4]" ) );
+ assertEquals( "PASSED-1", pom.getValue( prefix + "listParam/listParam[1]" ) );
+ assertEquals( "PASSED-3", pom.getValue( prefix + "listParam/listParam[2]" ) );
+ assertEquals( "PASSED-2", pom.getValue( prefix + "listParam/listParam[3]" ) );
+ assertEquals( "PASSED-4", pom.getValue( prefix + "listParam/listParam[4]" ) );
+ }
+
+ /* MNG-2591 */
+ public void testAppendOfInheritedPluginConfigurationWithNoProfile()
+ throws Exception
+ {
+ testAppendOfInheritedPluginConfiguration( "no-profile" );
+ }
+
+ /* MNG-2591*/
+ public void testAppendOfInheritedPluginConfigurationWithActiveProfile()
+ throws Exception
+ {
+ testAppendOfInheritedPluginConfiguration( "with-profile" );
+ }
+
+ private void testAppendOfInheritedPluginConfiguration( String test )
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-config-append/" + test + "/subproject" );
+ String prefix = "build/plugins[1]/configuration/";
+ assertEquals( "PARENT-1", pom.getValue( prefix + "stringParams/stringParam[1]" ) );
+ assertEquals( "PARENT-3", pom.getValue( prefix + "stringParams/stringParam[2]" ) );
+ assertEquals( "PARENT-2", pom.getValue( prefix + "stringParams/stringParam[3]" ) );
+ assertEquals( "PARENT-4", pom.getValue( prefix + "stringParams/stringParam[4]" ) );
+ assertEquals( "CHILD-1", pom.getValue( prefix + "stringParams/stringParam[5]" ) );
+ assertEquals( "CHILD-3", pom.getValue( prefix + "stringParams/stringParam[6]" ) );
+ assertEquals( "CHILD-2", pom.getValue( prefix + "stringParams/stringParam[7]" ) );
+ assertEquals( "CHILD-4", pom.getValue( prefix + "stringParams/stringParam[8]" ) );
+ assertEquals( null, pom.getValue( prefix + "stringParams/stringParam[9]" ) );
+ assertEquals( "PARENT-1", pom.getValue( prefix + "listParam/listParam[1]" ) );
+ assertEquals( "PARENT-3", pom.getValue( prefix + "listParam/listParam[2]" ) );
+ assertEquals( "PARENT-2", pom.getValue( prefix + "listParam/listParam[3]" ) );
+ assertEquals( "PARENT-4", pom.getValue( prefix + "listParam/listParam[4]" ) );
+ assertEquals( "CHILD-1", pom.getValue( prefix + "listParam/listParam[5]" ) );
+ assertEquals( "CHILD-3", pom.getValue( prefix + "listParam/listParam[6]" ) );
+ assertEquals( "CHILD-2", pom.getValue( prefix + "listParam/listParam[7]" ) );
+ assertEquals( "CHILD-4", pom.getValue( prefix + "listParam/listParam[8]" ) );
+ assertEquals( null, pom.getValue( prefix + "listParam/listParam[9]" ) );
+ }
+
+ /* MNG-4000 */
+ public void testMultiplePluginExecutionsWithAndWithoutIdsWithoutPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-w-and-wo-id/wo-plugin-mngt" );
+ assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
+ assertEquals( "log-string", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
+ assertEquals( "log-string", pom.getValue( "build/plugins[1]/executions[2]/goals[1]" ) );
+ }
+
+ public void testMultiplePluginExecutionsWithAndWithoutIdsWithPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-w-and-wo-id/w-plugin-mngt" );
+ assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
+ assertEquals( "log-string", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
+ assertEquals( "log-string", pom.getValue( "build/plugins[1]/executions[2]/goals[1]" ) );
+ }
+
+ public void testDependencyOrderWithoutPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "dependency-order/wo-plugin-mngt" );
+ assertEquals( 4, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
+ assertEquals( "a", pom.getValue( "dependencies[1]/artifactId" ) );
+ assertEquals( "c", pom.getValue( "dependencies[2]/artifactId" ) );
+ assertEquals( "b", pom.getValue( "dependencies[3]/artifactId" ) );
+ assertEquals( "d", pom.getValue( "dependencies[4]/artifactId" ) );
+ }
+
+ public void testDependencyOrderWithPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "dependency-order/w-plugin-mngt" );
+ assertEquals( 4, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
+ assertEquals( "a", pom.getValue( "dependencies[1]/artifactId" ) );
+ assertEquals( "c", pom.getValue( "dependencies[2]/artifactId" ) );
+ assertEquals( "b", pom.getValue( "dependencies[3]/artifactId" ) );
+ assertEquals( "d", pom.getValue( "dependencies[4]/artifactId" ) );
+ }
+
+ public void testBuildDirectoriesUsePlatformSpecificFileSeparator()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "platform-file-separator" );
+ assertPathWithNormalizedFileSeparators( pom.getValue( "build/directory" ) );
+ assertPathWithNormalizedFileSeparators( pom.getValue( "build/outputDirectory" ) );
+ assertPathWithNormalizedFileSeparators( pom.getValue( "build/testOutputDirectory" ) );
+ assertPathWithNormalizedFileSeparators( pom.getValue( "build/sourceDirectory" ) );
+ assertPathWithNormalizedFileSeparators( pom.getValue( "build/testSourceDirectory" ) );
+ assertPathWithNormalizedFileSeparators( pom.getValue( "build/resources[1]/directory" ) );
+ assertPathWithNormalizedFileSeparators( pom.getValue( "build/testResources[1]/directory" ) );
+ assertPathWithNormalizedFileSeparators( pom.getValue( "build/filters[1]" ) );
+ assertPathWithNormalizedFileSeparators( pom.getValue( "reporting/outputDirectory" ) );
+ }
+
+ /* MNG-4008 */
+ public void testMergedFilterOrder()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "merged-filter-order/sub" );
+
+ assertEquals( 7, ( (List<?>) pom.getValue( "build/filters" ) ).size() );
+ assertTrue( pom.getValue( "build/filters[1]" ).toString().endsWith( "child-a.properties" ) );
+ assertTrue( pom.getValue( "build/filters[2]" ).toString().endsWith( "child-c.properties" ) );
+ assertTrue( pom.getValue( "build/filters[3]" ).toString().endsWith( "child-b.properties" ) );
+ assertTrue( pom.getValue( "build/filters[4]" ).toString().endsWith( "child-d.properties" ) );
+ assertTrue( pom.getValue( "build/filters[5]" ).toString().endsWith( "parent-c.properties" ) );
+ assertTrue( pom.getValue( "build/filters[6]" ).toString().endsWith( "parent-b.properties" ) );
+ assertTrue( pom.getValue( "build/filters[7]" ).toString().endsWith( "parent-d.properties" ) );
+ }
+
+ /** MNG-4027*/
+ public void testProfileInjectedDependencies()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "profile-injected-dependencies" );
+ assertEquals( 4, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
+ assertEquals( "a", pom.getValue( "dependencies[1]/artifactId" ) );
+ assertEquals( "c", pom.getValue( "dependencies[2]/artifactId" ) );
+ assertEquals( "b", pom.getValue( "dependencies[3]/artifactId" ) );
+ assertEquals( "d", pom.getValue( "dependencies[4]/artifactId" ) );
+ }
+
+ /** IT-0021*/
+ public void testProfileDependenciesMultipleProfiles()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "profile-dependencies-multiple-profiles", "profile-1", "profile-2" );
+ assertEquals(2, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
+ }
+
+ public void testDependencyInheritance()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "dependency-inheritance/sub" );
+ assertEquals( 1, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
+ assertEquals( "4.4", pom.getValue( "dependencies[1]/version" ) );
+ }
+
+ /** MNG-4034 */
+ public void testManagedProfileDependency()
+ throws Exception
+ {
+ PomTestWrapper pom = this.buildPom( "managed-profile-dependency/sub", "maven-core-it" );
+ assertEquals( 1, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
+ assertEquals( "org.apache.maven.its", pom.getValue( "dependencies[1]/groupId" ) );
+ assertEquals( "maven-core-it-support", pom.getValue( "dependencies[1]/artifactId" ) );
+ assertEquals( "1.3", pom.getValue( "dependencies[1]/version" ) );
+ assertEquals( "runtime", pom.getValue( "dependencies[1]/scope" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "dependencies[1]/exclusions" ) ).size() );
+ assertEquals( "commons-lang", pom.getValue( "dependencies[1]/exclusions[1]/groupId" ) );
+ }
+
+ /** MNG-4040 */
+ public void testProfileModuleInheritance()
+ throws Exception
+ {
+ PomTestWrapper pom = this.buildPom( "profile-module-inheritance/sub", "dist" );
+ assertEquals( 0, ( (List<?>) pom.getValue( "modules" ) ).size() );
+ }
+
+ /** MNG-3621 */
+ public void testUncPath()
+ throws Exception
+ {
+ PomTestWrapper pom = this.buildPom( "unc-path/sub" );
+ assertEquals( "file:////host/site/test-child", pom.getValue( "distributionManagement/site/url" ) );
+ }
+
+ /** MNG-2006 */
+ public void testUrlAppendWithChildPathAdjustment()
+ throws Exception
+ {
+ PomTestWrapper pom = this.buildPom( "url-append/child" );
+ assertEquals( "http://project.url/child", pom.getValue( "url" ) );
+ assertEquals( "http://viewvc.project.url/child", pom.getValue( "scm/url" ) );
+ assertEquals( "http://scm.project.url/child", pom.getValue( "scm/connection" ) );
+ assertEquals( "https://scm.project.url/child", pom.getValue( "scm/developerConnection" ) );
+ assertEquals( "http://site.project.url/child", pom.getValue( "distributionManagement/site/url" ) );
+ }
+
+ /** MNG-0479 */
+ public void testRepoInheritance()
+ throws Exception
+ {
+ PomTestWrapper pom = this.buildPom( "repo-inheritance" );
+ assertEquals( 1, ( (List<?>) pom.getValue( "repositories" ) ).size() );
+ assertEquals( "it0043", pom.getValue( "repositories[1]/name" ) );
+ }
+
+ public void testEmptyScm()
+ throws Exception
+ {
+ PomTestWrapper pom = this.buildPom( "empty-scm" );
+ assertNull( pom.getValue( "scm" ) );
+ }
+
+ public void testPluginConfigurationUsingAttributesWithoutPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-config-attributes/wo-plugin-mngt" );
+ assertEquals( "src", pom.getValue( "build/plugins[1]/configuration/domParam/copy/@todir" ) );
+ assertEquals( "true", pom.getValue( "build/plugins[1]/configuration/domParam/copy/@overwrite" ) );
+ assertEquals( "target", pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@dir" ) );
+ assertEquals( null, pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@todir" ) );
+ assertEquals( null, pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@overwrite" ) );
+ }
+
+ /** MNG-4053*/
+ public void testPluginConfigurationUsingAttributesWithPluginManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-config-attributes/w-plugin-mngt" );
+ assertEquals( "src", pom.getValue( "build/plugins[1]/configuration/domParam/copy/@todir" ) );
+ assertEquals( "true", pom.getValue( "build/plugins[1]/configuration/domParam/copy/@overwrite" ) );
+ assertEquals( "target", pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@dir" ) );
+ assertEquals( null, pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@todir" ) );
+ assertEquals( null, pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@overwrite" ) );
+ }
+
+ public void testPluginConfigurationUsingAttributesWithPluginManagementAndProfile()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-config-attributes/w-profile", "maven-core-it" );
+ assertEquals( "src", pom.getValue( "build/plugins[1]/configuration/domParam/copy/@todir" ) );
+ assertEquals( "true", pom.getValue( "build/plugins[1]/configuration/domParam/copy/@overwrite" ) );
+ assertEquals( "target", pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@dir" ) );
+ assertEquals( null, pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@todir" ) );
+ assertEquals( null, pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@overwrite" ) );
+ }
+
+ public void testPomEncoding()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "pom-encoding/utf-8" );
+ assertEquals( "TEST-CHARS: \u00DF\u0131\u03A3\u042F\u05D0\u20AC", pom.getValue( "description" ) );
+ pom = buildPom( "pom-encoding/latin-1" );
+ assertEquals( "TEST-CHARS: \u00C4\u00D6\u00DC\u00E4\u00F6\u00FC\u00DF", pom.getValue( "description" ) );
+ }
+
+ /* MNG-4070 */
+ public void testXmlWhitespaceHandling()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "xml-whitespace/sub" );
+ assertEquals( "org.apache.maven.its.mng4070", pom.getValue( "groupId" ) );
+ }
+
+ /* MNG-3760*/
+ public void testInterpolationOfBaseUrl()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "baseurl-interpolation/pom.xml" );
+ assertEquals( pom.getBasedir().toURI().toString(), pom.getValue( "properties/prop1" ).toString() );
+ }
+
+ /* MNG-3811*/
+ public void testReportingPluginConfig()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "reporting-plugin-config/sub" );
+
+ assertEquals( 3, ( (List<?>) pom.getValue( "reporting/plugins[1]/configuration/stringParams" ) ).size() );
+ assertEquals( "parentParam", pom.getValue( "reporting/plugins[1]/configuration/stringParams[1]/stringParam[1]" ) );
+ assertEquals( "childParam", pom.getValue( "reporting/plugins[1]/configuration/stringParams[1]/stringParam[2]" ) );
+ assertEquals( " preserve space ", pom.getValue( "reporting/plugins[1]/configuration/stringParams[1]/stringParam[3]" ) );
+ assertEquals( "true", pom.getValue( "reporting/plugins[1]/configuration/booleanParam" ) );
+ }
+
+ public void testPropertiesNoDuplication()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "properties-no-duplication/sub" );
+ assertEquals( 1, ( (Properties) pom.getValue( "properties" ) ).size() );
+ assertEquals( "child", pom.getValue( "properties/pomProfile" ) );
+ }
+
+ public void testPomInheritance()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "pom-inheritance/sub" );
+ assertEquals( "parent-description", pom.getValue( "description" ) );
+ assertEquals( "jar", pom.getValue( "packaging" ) );
+ }
+
+ public void testCompleteModelWithoutParent()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "complete-model/wo-parent" );
+
+ testCompleteModel( pom );
+ }
+
+ public void testCompleteModelWithParent()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "complete-model/w-parent/sub" );
+
+ testCompleteModel( pom );
+ }
+
+ private void testCompleteModel( PomTestWrapper pom )
+ throws Exception
+ {
+ assertEquals( "4.0.0", pom.getValue( "modelVersion" ) );
+
+ assertEquals( "org.apache.maven.its.mng", pom.getValue( "groupId" ) );
+ assertEquals( "test", pom.getValue( "artifactId" ) );
+ assertEquals( "0.2", pom.getValue( "version" ) );
+ assertEquals( "pom", pom.getValue( "packaging" ) );
+
+ assertEquals( "project-name", pom.getValue( "name" ) );
+ assertEquals( "project-description", pom.getValue( "description" ) );
+ assertEquals( "http://project.url/", pom.getValue( "url" ) );
+ assertEquals( "2009", pom.getValue( "inceptionYear" ) );
+
+ assertEquals( "project-org", pom.getValue( "organization/name" ) );
+ assertEquals( "http://project-org.url/", pom.getValue( "organization/url" ) );
+
+ assertEquals( 1, ( (List<?>) pom.getValue( "licenses" ) ).size() );
+ assertEquals( "project-license", pom.getValue( "licenses[1]/name" ) );
+ assertEquals( "http://project.url/license", pom.getValue( "licenses[1]/url" ) );
+ assertEquals( "repo", pom.getValue( "licenses[1]/distribution" ) );
+ assertEquals( "free", pom.getValue( "licenses[1]/comments" ) );
+
+ assertEquals( 1, ( (List<?>) pom.getValue( "developers" ) ).size() );
+ assertEquals( "dev", pom.getValue( "developers[1]/id" ) );
+ assertEquals( "project-developer", pom.getValue( "developers[1]/name" ) );
+ assertEquals( "developer@", pom.getValue( "developers[1]/email" ) );
+ assertEquals( "http://developer", pom.getValue( "developers[1]/url" ) );
+ assertEquals( "developer", pom.getValue( "developers[1]/organization" ) );
+ assertEquals( "http://devel.org", pom.getValue( "developers[1]/organizationUrl" ) );
+ assertEquals( "-1", pom.getValue( "developers[1]/timezone" ) );
+ assertEquals( "yes", pom.getValue( "developers[1]/properties/developer" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "developers[1]/roles" ) ).size() );
+ assertEquals( "devel", pom.getValue( "developers[1]/roles[1]" ) );
+
+ assertEquals( 1, ( (List<?>) pom.getValue( "contributors" ) ).size() );
+ assertEquals( "project-contributor", pom.getValue( "contributors[1]/name" ) );
+ assertEquals( "contributor@", pom.getValue( "contributors[1]/email" ) );
+ assertEquals( "http://contributor", pom.getValue( "contributors[1]/url" ) );
+ assertEquals( "contributor", pom.getValue( "contributors[1]/organization" ) );
+ assertEquals( "http://contrib.org", pom.getValue( "contributors[1]/organizationUrl" ) );
+ assertEquals( "+1", pom.getValue( "contributors[1]/timezone" ) );
+ assertEquals( "yes", pom.getValue( "contributors[1]/properties/contributor" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "contributors[1]/roles" ) ).size() );
+ assertEquals( "contrib", pom.getValue( "contributors[1]/roles[1]" ) );
+
+ assertEquals( 1, ( (List<?>) pom.getValue( "mailingLists" ) ).size() );
+ assertEquals( "project-mailing-list", pom.getValue( "mailingLists[1]/name" ) );
+ assertEquals( "subscribe@", pom.getValue( "mailingLists[1]/subscribe" ) );
+ assertEquals( "unsubscribe@", pom.getValue( "mailingLists[1]/unsubscribe" ) );
+ assertEquals( "post@", pom.getValue( "mailingLists[1]/post" ) );
+ assertEquals( "mail-archive", pom.getValue( "mailingLists[1]/archive" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "mailingLists[1]/otherArchives" ) ).size() );
+ assertEquals( "other-archive", pom.getValue( "mailingLists[1]/otherArchives[1]" ) );
+
+ assertEquals( "2.0.1", pom.getValue( "prerequisites/maven" ) );
+
+ assertEquals( "http://project.url/trunk", pom.getValue( "scm/url" ) );
+ assertEquals( "http://project.url/scm", pom.getValue( "scm/connection" ) );
+ assertEquals( "https://project.url/scm", pom.getValue( "scm/developerConnection" ) );
+ assertEquals( "TAG", pom.getValue( "scm/tag" ) );
+
+ assertEquals( "issues", pom.getValue( "issueManagement/system" ) );
+ assertEquals( "http://project.url/issues", pom.getValue( "issueManagement/url" ) );
+
+ assertEquals( "ci", pom.getValue( "ciManagement/system" ) );
+ assertEquals( "http://project.url/ci", pom.getValue( "ciManagement/url" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "ciManagement/notifiers" ) ).size() );
+ assertEquals( "irc", pom.getValue( "ciManagement/notifiers[1]/type" ) );
+ assertEquals( "ci@", pom.getValue( "ciManagement/notifiers[1]/address" ) );
+ assertEquals( Boolean.TRUE, pom.getValue( "ciManagement/notifiers[1]/sendOnError" ) );
+ assertEquals( Boolean.FALSE, pom.getValue( "ciManagement/notifiers[1]/sendOnFailure" ) );
+ assertEquals( Boolean.FALSE, pom.getValue( "ciManagement/notifiers[1]/sendOnWarning" ) );
+ assertEquals( Boolean.FALSE, pom.getValue( "ciManagement/notifiers[1]/sendOnSuccess" ) );
+ assertEquals( "ci", pom.getValue( "ciManagement/notifiers[1]/configuration/ciProp" ) );
+
+ assertEquals( "project.distros", pom.getValue( "distributionManagement/repository/id" ) );
+ assertEquals( "distros", pom.getValue( "distributionManagement/repository/name" ) );
+ assertEquals( "http://project.url/dist", pom.getValue( "distributionManagement/repository/url" ) );
+ assertEquals( Boolean.TRUE, pom.getValue( "distributionManagement/repository/uniqueVersion" ) );
+
+ assertEquals( "project.snaps", pom.getValue( "distributionManagement/snapshotRepository/id" ) );
+ assertEquals( "snaps", pom.getValue( "distributionManagement/snapshotRepository/name" ) );
+ assertEquals( "http://project.url/snaps", pom.getValue( "distributionManagement/snapshotRepository/url" ) );
+ assertEquals( Boolean.FALSE, pom.getValue( "distributionManagement/snapshotRepository/uniqueVersion" ) );
+
+ assertEquals( "project.site", pom.getValue( "distributionManagement/site/id" ) );
+ assertEquals( "docs", pom.getValue( "distributionManagement/site/name" ) );
+ assertEquals( "http://project.url/site", pom.getValue( "distributionManagement/site/url" ) );
+
+ assertEquals( "http://project.url/download", pom.getValue( "distributionManagement/downloadUrl" ) );
+ assertEquals( "reloc-gid", pom.getValue( "distributionManagement/relocation/groupId" ) );
+ assertEquals( "reloc-aid", pom.getValue( "distributionManagement/relocation/artifactId" ) );
+ assertEquals( "reloc-version", pom.getValue( "distributionManagement/relocation/version" ) );
+ assertEquals( "project-reloc-msg", pom.getValue( "distributionManagement/relocation/message" ) );
+
+ assertEquals( 1, ( (List<?>) pom.getValue( "modules" ) ).size() );
+ assertEquals( "sub", pom.getValue( "modules[1]" ) );
+
+ assertEquals( 1, ( (Map<?, ?>) pom.getValue( "properties" ) ).size() );
+ assertEquals( "project-property", pom.getValue( "properties[1]/itProperty" ) );
+
+ assertEquals( 1, ( (List<?>) pom.getValue( "dependencyManagement/dependencies" ) ).size() );
+ assertEquals( "org.apache.maven.its", pom.getValue( "dependencyManagement/dependencies[1]/groupId" ) );
+ assertEquals( "managed-dep", pom.getValue( "dependencyManagement/dependencies[1]/artifactId" ) );
+ assertEquals( "0.1", pom.getValue( "dependencyManagement/dependencies[1]/version" ) );
+ assertEquals( "war", pom.getValue( "dependencyManagement/dependencies[1]/type" ) );
+ assertEquals( "runtime", pom.getValue( "dependencyManagement/dependencies[1]/scope" ) );
+ assertEquals( Boolean.FALSE, pom.getValue( "dependencyManagement/dependencies[1]/optional" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "dependencyManagement/dependencies[1]/exclusions" ) ).size() );
+ assertEquals( "org.apache.maven.its",
+ pom.getValue( "dependencyManagement/dependencies[1]/exclusions[1]/groupId" ) );
+ assertEquals( "excluded-managed-dep",
+ pom.getValue( "dependencyManagement/dependencies[1]/exclusions[1]/artifactId" ) );
+
+ assertEquals( 1, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
+ assertEquals( "org.apache.maven.its", pom.getValue( "dependencies[1]/groupId" ) );
+ assertEquals( "dep", pom.getValue( "dependencies[1]/artifactId" ) );
+ assertEquals( "0.2", pom.getValue( "dependencies[1]/version" ) );
+ assertEquals( "ejb", pom.getValue( "dependencies[1]/type" ) );
+ assertEquals( "test", pom.getValue( "dependencies[1]/scope" ) );
+ assertEquals( Boolean.TRUE, pom.getValue( "dependencies[1]/optional" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "dependencies[1]/exclusions" ) ).size() );
+ assertEquals( "org.apache.maven.its", pom.getValue( "dependencies[1]/exclusions[1]/groupId" ) );
+ assertEquals( "excluded-dep", pom.getValue( "dependencies[1]/exclusions[1]/artifactId" ) );
+
+ assertEquals( 2, ( (List<?>) pom.getValue( "repositories" ) ).size() );
+ assertEquals( "project-remote-repo", pom.getValue( "repositories[1]/id" ) );
+ assertEquals( "http://project.url/remote", pom.getValue( "repositories[1]/url" ) );
+ assertEquals( "repo", pom.getValue( "repositories[1]/name" ) );
+ assertEquals( RepositorySystem.DEFAULT_REMOTE_REPO_ID, pom.getValue( "repositories[2]/id" ) );
+ assertEquals( RepositorySystem.DEFAULT_REMOTE_REPO_URL, pom.getValue( "repositories[2]/url" ) );
+
+ assertEquals( "test", pom.getValue( "build/defaultGoal" ) );
+ assertEquals( "coreit", pom.getValue( "build/finalName" ) );
+
+ assertPathSuffixEquals( "build", pom.getValue( "build/directory" ) );
+ assertPathSuffixEquals( "build/main", pom.getValue( "build/outputDirectory" ) );
+ assertPathSuffixEquals( "build/test", pom.getValue( "build/testOutputDirectory" ) );
+ assertPathSuffixEquals( "sources/main", pom.getValue( "build/sourceDirectory" ) );
+ assertPathSuffixEquals( "sources/test", pom.getValue( "build/testSourceDirectory" ) );
+ assertPathSuffixEquals( "sources/scripts", pom.getValue( "build/scriptSourceDirectory" ) );
+
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/filters" ) ).size() );
+ assertPathSuffixEquals( "src/main/filter/it.properties", pom.getValue( "build/filters[1]" ) );
+
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/resources" ) ).size() );
+ assertPathSuffixEquals( "res/main", pom.getValue( "build/resources[1]/directory" ) );
+ assertPathSuffixEquals( "main", pom.getValue( "build/resources[1]/targetPath" ) );
+ assertEquals( Boolean.TRUE, pom.getValue( "build/resources[1]/filtering" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/resources[1]/includes" ) ).size() );
+ assertPathSuffixEquals( "main.included", pom.getValue( "build/resources[1]/includes[1]" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/resources[1]/excludes" ) ).size() );
+ assertPathSuffixEquals( "main.excluded", pom.getValue( "build/resources[1]/excludes[1]" ) );
+
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/testResources" ) ).size() );
+ assertPathSuffixEquals( "res/test", pom.getValue( "build/testResources[1]/directory" ) );
+ assertPathSuffixEquals( "test", pom.getValue( "build/testResources[1]/targetPath" ) );
+ assertEquals( Boolean.TRUE, pom.getValue( "build/testResources[1]/filtering" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/testResources[1]/includes" ) ).size() );
+ assertPathSuffixEquals( "test.included", pom.getValue( "build/testResources[1]/includes[1]" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/testResources[1]/excludes" ) ).size() );
+ assertPathSuffixEquals( "test.excluded", pom.getValue( "build/testResources[1]/excludes[1]" ) );
+
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/extensions" ) ).size() );
+ assertEquals( "org.apache.maven.its.ext", pom.getValue( "build/extensions[1]/groupId" ) );
+ assertEquals( "ext", pom.getValue( "build/extensions[1]/artifactId" ) );
+ assertEquals( "3.0", pom.getValue( "build/extensions[1]/version" ) );
+
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins" ) ).size() );
+ assertEquals( "org.apache.maven.its.plugins", pom.getValue( "build/plugins[1]/groupId" ) );
+ assertEquals( "maven-it-plugin-build", pom.getValue( "build/plugins[1]/artifactId" ) );
+ assertEquals( "2.1-SNAPSHOT", pom.getValue( "build/plugins[1]/version" ) );
+ assertEquals( "test.properties", pom.getValue( "build/plugins[1]/configuration/outputFile" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
+ assertEquals( "test", pom.getValue( "build/plugins[1]/executions[1]/id" ) );
+ assertEquals( "validate", pom.getValue( "build/plugins[1]/executions[1]/phase" ) );
+ assertEquals( "pom.properties", pom.getValue( "build/plugins[1]/executions[1]/configuration/outputFile" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/goals" ) ).size() );
+ assertEquals( "eval", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/dependencies" ) ).size() );
+ assertEquals( "org.apache.maven.its", pom.getValue( "build/plugins[1]/dependencies[1]/groupId" ) );
+ assertEquals( "build-plugin-dep", pom.getValue( "build/plugins[1]/dependencies[1]/artifactId" ) );
+ assertEquals( "0.3", pom.getValue( "build/plugins[1]/dependencies[1]/version" ) );
+ assertEquals( "zip", pom.getValue( "build/plugins[1]/dependencies[1]/type" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins[1]/dependencies[1]/exclusions" ) ).size() );
+ assertEquals( "org.apache.maven.its", pom.getValue( "build/plugins[1]/dependencies[1]/exclusions[1]/groupId" ) );
+ assertEquals( "excluded-build-plugin-dep",
+ pom.getValue( "build/plugins[1]/dependencies[1]/exclusions[1]/artifactId" ) );
+
+ assertEquals( Boolean.TRUE, pom.getValue( "reporting/excludeDefaults" ) );
+ assertPathSuffixEquals( "docs", pom.getValue( "reporting/outputDirectory" ) );
+
+ assertEquals( 1, ( (List<?>) pom.getValue( "reporting/plugins" ) ).size() );
+ assertEquals( "org.apache.maven.its.plugins", pom.getValue( "reporting/plugins[1]/groupId" ) );
+ assertEquals( "maven-it-plugin-reporting", pom.getValue( "reporting/plugins[1]/artifactId" ) );
+ assertEquals( "2.0-SNAPSHOT", pom.getValue( "reporting/plugins[1]/version" ) );
+ assertEquals( "test.html", pom.getValue( "reporting/plugins[1]/configuration/outputFile" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "reporting/plugins[1]/reportSets" ) ).size() );
+ assertEquals( "it", pom.getValue( "reporting/plugins[1]/reportSets[1]/id" ) );
+ assertEquals( "index.html", pom.getValue( "reporting/plugins[1]/reportSets[1]/configuration/outputFile" ) );
+ assertEquals( 1, ( (List<?>) pom.getValue( "reporting/plugins[1]/reportSets[1]/reports" ) ).size() );
+ assertEquals( "run", pom.getValue( "reporting/plugins[1]/reportSets[1]/reports[1]" ) );
+ }
+
+ /* MNG-2309*/
+
+ public void testProfileInjectionOrder()
+ throws Exception
+ {
+ PomTestWrapper pom =
+ buildPom( "profile-injection-order", "pom-a", "pom-b", "pom-e", "pom-c", "pom-d" );
+ assertEquals( "e", pom.getValue( "properties[1]/pomProperty" ) );
+ }
+
+ public void testPropertiesInheritance()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "properties-inheritance/sub" );
+ assertEquals( "parent-property", pom.getValue( "properties/parentProperty" ) );
+ assertEquals( "child-property", pom.getValue( "properties/childProperty" ) );
+ assertEquals( "child-override", pom.getValue( "properties/overriddenProperty" ) );
+ }
+
+ /* MNG-4102*/
+ public void testInheritedPropertiesInterpolatedWithValuesFromChildWithoutProfiles()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "inherited-properties-interpolation/no-profile/sub" );
+
+ assertEquals( "CHILD", pom.getValue( "properties/overridden" ) );
+ assertEquals( "CHILD", pom.getValue( "properties/interpolated" ) );
+ }
+
+ /* MNG-4102 */
+ public void testInheritedPropertiesInterpolatedWithValuesFromChildWithActiveProfiles()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "inherited-properties-interpolation/active-profile/sub" );
+
+ assertEquals( 1, pom.getMavenProject().getModel().getProfiles().size() );
+
+ buildPom( "inherited-properties-interpolation/active-profile/sub", "it-parent", "it-child" );
+ assertEquals( "CHILD", pom.getValue( "properties/overridden" ) );
+ assertEquals( "CHILD", pom.getValue( "properties/interpolated" ) );
+ }
+
+ /* MNG-3545 */
+ public void testProfileDefaultActivation()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "profile-default-deactivation", "profile4" );
+ assertEquals( 1, pom.getMavenProject().getActiveProfiles().size() );
+ assertEquals( 1, ( (List<?>) pom.getValue( "build/plugins" ) ).size() );
+ assertEquals( "2.1", pom.getValue( "build/plugins[1]/version" ) );
+ }
+
+ /* MNG-1995 */
+ public void testBooleanInterpolation()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "boolean-interpolation" );
+ assertTrue ((Boolean) pom.getValue( "repositories[1]/releases/enabled" ) );
+ assertTrue((Boolean) pom.getValue( "build/resources[1]/filtering" ) );
+ }
+
+
+ /* MNG-3899 */
+ public void testBuildExtensionInheritance()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "build-extension-inheritance/sub" );
+ assertEquals( 3, ( (List<?>) pom.getValue( "build/extensions" ) ).size() );
+ assertEquals( "b", pom.getValue( "build/extensions[1]/artifactId" ) );
+ assertEquals( "a", pom.getValue( "build/extensions[2]/artifactId" ) );
+ assertEquals( "0.2", pom.getValue( "build/extensions[2]/version" ) );
+ assertEquals( "c", pom.getValue( "build/extensions[3]/artifactId" ) );
+ }
+
+ /*MNG-1957*/
+ public void testJdkActivation()
+ throws Exception
+ {
+ Properties props = new Properties();
+ props.put( "java.version", "1.5.0_15" );
+
+ PomTestWrapper pom = buildPom( "jdk-activation", props );
+ assertEquals( 3, pom.getMavenProject().getActiveProfiles().size() );
+ assertEquals( "PASSED", pom.getValue( "properties/jdkProperty3" ) );
+ assertEquals( "PASSED", pom.getValue( "properties/jdkProperty2" ) );
+ assertEquals( "PASSED", pom.getValue( "properties/jdkProperty1" ) );
+ }
+
+ /* MNG-2174 */
+ public void testProfilePluginMngDependencies()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "profile-plugin-mng-dependencies/sub", "maven-core-it" );
+ assertEquals( "a", pom.getValue( "build/plugins[1]/dependencies[1]/artifactId" ) );
+ }
+
+ /** MNG-4116 */
+ public void testPercentEncodedUrlsMustNotBeDecoded()
+ throws Exception
+ {
+ PomTestWrapper pom = this.buildPom( "url-no-decoding" );
+ assertEquals( "http://maven.apache.org/spacy%20path", pom.getValue( "url" ) );
+ assertEquals( "http://svn.apache.org/viewvc/spacy%20path", pom.getValue( "scm/url" ) );
+ assertEquals( "scm:svn:svn+ssh://svn.apache.org/spacy%20path", pom.getValue( "scm/connection" ) );
+ assertEquals( "scm:svn:svn+ssh://svn.apache.org/spacy%20path", pom.getValue( "scm/developerConnection" ) );
+ assertEquals( "http://issues.apache.org/spacy%20path", pom.getValue( "issueManagement/url" ) );
+ assertEquals( "http://ci.apache.org/spacy%20path", pom.getValue( "ciManagement/url" ) );
+ assertEquals( "scm:svn:svn+ssh://dist.apache.org/spacy%20path",
+ pom.getValue( "distributionManagement/repository/url" ) );
+ assertEquals( "scm:svn:svn+ssh://snap.apache.org/spacy%20path",
+ pom.getValue( "distributionManagement/snapshotRepository/url" ) );
+ assertEquals( "scm:svn:svn+ssh://site.apache.org/spacy%20path",
+ pom.getValue( "distributionManagement/site/url" ) );
+ }
+
+ public void testPluginManagementInheritance()
+ throws Exception
+ {
+ PomTestWrapper pom = this.buildPom( "plugin-management-inheritance" );
+ assertEquals( "0.1-stub-SNAPSHOT",
+ pom.getValue( "build/pluginManagement/plugins[@artifactId='maven-compiler-plugin']/version" ) );
+ }
+
+ public void testProfilePlugins()
+ throws Exception
+ {
+ PomTestWrapper pom = this.buildPom( "profile-plugins", "standard" );
+ assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins" ) ).size() );
+ assertEquals( "maven-assembly2-plugin", pom.getValue( "build/plugins[2]/artifactId" ) );
+ }
+
+ public void testPluginInheritanceSimple()
+ throws Exception
+ {
+ PomTestWrapper pom = this.buildPom( "plugin-inheritance-simple/sub" );
+ assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins" ) ).size() );
+ }
+
+ public void testPluginManagementDuplicate()
+ throws Exception
+ {
+ PomTestWrapper pom = this.buildPom( "plugin-management-duplicate/sub" );
+ assertEquals( 12, ( (List<?>) pom.getValue( "build/pluginManagement/plugins" ) ).size() );
+ }
+
+ public void testDistributionManagement()
+ throws Exception
+ {
+ PomTestWrapper pom = this.buildPom( "distribution-management" );
+ assertEquals( "legacy", pom.getValue( "distributionManagement/repository/layout" ) );
+ }
+
+ public void testDependencyScopeInheritance()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "dependency-scope-inheritance/sub" );
+ String scope = (String) pom.getValue( "dependencies[1]/scope" );
+ assertEquals( "compile", scope );
+ }
+
+ public void testDependencyScope()
+ throws Exception
+ {
+ buildPom( "dependency-scope/sub" );
+ }
+
+ //This will fail on a validation error if incorrect
+ public void testDependencyManagementWithInterpolation()
+ throws Exception
+ {
+ buildPom( "dependency-management-with-interpolation/sub" );
+ }
+
+ public void testInterpolationWithSystemProperty()
+ throws Exception
+ {
+ Properties sysProps = new Properties();
+ sysProps.setProperty( "system.property", "PASSED" );
+ PomTestWrapper pom = buildPom( "sytem-property-interpolation", sysProps );
+ assertEquals( "PASSED", pom.getValue( "name" ) );
+ }
+
+ /* MNG-4129 */
+ public void testPluginExecutionInheritanceWhenChildDoesNotDeclarePlugin()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-inheritance/wo-merge" );
+ @SuppressWarnings( "unchecked" )
+ List<PluginExecution> executions =
+ (List<PluginExecution>) pom.getValue( "build/pluginsAsMap[@name='org.apache.maven.its.plugins:maven-it-plugin-log-file']/executions" );
+ assertEquals( 1, executions.size() );
+ assertEquals( "inherited-execution", executions.get( 0 ).getId() );
+ }
+
+ public void testPluginExecutionInheritanceWhenChildDoesDeclarePluginAsWell()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-inheritance/w-merge" );
+ @SuppressWarnings( "unchecked" )
+ List<PluginExecution> executions =
+ (List<PluginExecution>) pom.getValue( "build/pluginsAsMap[@name='org.apache.maven.its.plugins:maven-it-plugin-log-file']/executions" );
+ assertEquals( 1, executions.size() );
+ assertEquals( "inherited-execution", executions.get( 0 ).getId() );
+ }
+
+ /* MNG-4193 */
+ public void testValidationErrorUponNonUniqueArtifactRepositoryId()
+ throws Exception
+ {
+ try
+ {
+ buildPom( "unique-repo-id/artifact-repo" );
+ fail( "Non-unique repository ids did not cause validation error" );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // expected
+ }
+ }
+
+ /* MNG-4193 */
+ public void testValidationErrorUponNonUniquePluginRepositoryId()
+ throws Exception
+ {
+ try
+ {
+ buildPom( "unique-repo-id/plugin-repo" );
+ fail( "Non-unique repository ids did not cause validation error" );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // expected
+ }
+ }
+
+ /* MNG-4193 */
+ public void testValidationErrorUponNonUniqueArtifactRepositoryIdInProfile()
+ throws Exception
+ {
+ try
+ {
+ buildPom( "unique-repo-id/artifact-repo-in-profile" );
+ fail( "Non-unique repository ids did not cause validation error" );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // expected
+ }
+ }
+
+ /* MNG-4193 */
+ public void testValidationErrorUponNonUniquePluginRepositoryIdInProfile()
+ throws Exception
+ {
+ try
+ {
+ buildPom( "unique-repo-id/plugin-repo-in-profile" );
+ fail( "Non-unique repository ids did not cause validation error" );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // expected
+ }
+ }
+
+ /** MNG-3843 */
+ public void testPrerequisitesAreNotInherited()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "prerequisites-inheritance/child" );
+ assertSame( null, pom.getValue( "prerequisites" ) );
+ }
+
+ public void testLicensesAreInheritedButNotAggregated()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "licenses-inheritance/child-2" );
+ assertEquals( 1, ( (List<?>) pom.getValue( "licenses" ) ).size() );
+ assertEquals( "child-license", pom.getValue( "licenses[1]/name" ) );
+ assertEquals( "http://child.url/license", pom.getValue( "licenses[1]/url" ) );
+ }
+
+ public void testDevelopersAreInheritedButNotAggregated()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "developers-inheritance/child-2" );
+ assertEquals( 1, ( (List<?>) pom.getValue( "developers" ) ).size() );
+ assertEquals( "child-developer", pom.getValue( "developers[1]/name" ) );
+ }
+
+ public void testContributorsAreInheritedButNotAggregated()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "contributors-inheritance/child-2" );
+ assertEquals( 1, ( (List<?>) pom.getValue( "contributors" ) ).size() );
+ assertEquals( "child-contributor", pom.getValue( "contributors[1]/name" ) );
+ }
+
+ public void testMailingListsAreInheritedButNotAggregated()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "mailing-lists-inheritance/child-2" );
+ assertEquals( 1, ( (List<?>) pom.getValue( "mailingLists" ) ).size() );
+ assertEquals( "child-mailing-list", pom.getValue( "mailingLists[1]/name" ) );
+ }
+
+ public void testPluginInheritanceOrder()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-inheritance-order/child" );
+
+ assertEquals( "maven-it-plugin-log-file", pom.getValue( "build/plugins[1]/artifactId" ) );
+ assertEquals( "maven-it-plugin-expression", pom.getValue( "build/plugins[2]/artifactId" ) );
+ assertEquals( "maven-it-plugin-configuration", pom.getValue( "build/plugins[3]/artifactId" ) );
+
+ assertEquals( "maven-it-plugin-log-file", pom.getValue( "reporting/plugins[1]/artifactId" ) );
+ assertEquals( "maven-it-plugin-expression", pom.getValue( "reporting/plugins[2]/artifactId" ) );
+ assertEquals( "maven-it-plugin-configuration", pom.getValue( "reporting/plugins[3]/artifactId" ) );
+ }
+
+ public void testCliPropsDominateProjectPropsDuringInterpolation()
+ throws Exception
+ {
+ Properties props = new Properties();
+ props.setProperty( "testProperty", "PASSED" );
+ PomTestWrapper pom = buildPom( "interpolation-cli-wins", props );
+
+ assertEquals( "PASSED", pom.getValue( "properties/interpolatedProperty" ) );
+ }
+
+ public void testParentPomPackagingMustBePom()
+ throws Exception
+ {
+ try
+ {
+ buildPom( "parent-pom-packaging/sub" );
+ fail( "Wrong packaging of parent POM was not rejected" );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // expected
+ }
+ }
+
+ /** MNG-522, MNG-3018 */
+ public void testManagedPluginConfigurationAppliesToImplicitPluginsIntroducedByPackaging()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-management-for-implicit-plugin/child" );
+ assertEquals( "passed.txt",
+ pom.getValue( "build/plugins[@artifactId='maven-resources-plugin']/configuration/pathname" ) );
+ assertEquals( "passed.txt",
+ pom.getValue( "build/plugins[@artifactId='maven-it-plugin-log-file']/configuration/logFile" ) );
+ }
+
+ public void testDefaultPluginsExecutionContributedByPackagingExecuteBeforeUserDefinedExecutions()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-order-and-default-exec" );
+ @SuppressWarnings( "unchecked" )
+ List<PluginExecution> executions =
+ (List<PluginExecution>) pom.getValue( "build/plugins[@artifactId='maven-resources-plugin']/executions" );
+ assertNotNull( executions );
+ assertEquals( 4, executions.size() );
+ assertEquals( "default-resources", executions.get( 0 ).getId() );
+ assertEquals( "default-testResources", executions.get( 1 ).getId() );
+ assertEquals( "test-1", executions.get( 2 ).getId() );
+ assertEquals( "test-2", executions.get( 3 ).getId() );
+ }
+
+ public void testPluginDeclarationsRetainPomOrderAfterInjectionOfDefaultPlugins()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-exec-order-with-lifecycle" );
+ @SuppressWarnings( "unchecked" )
+ List<Plugin> plugins = (List<Plugin>) pom.getValue( "build/plugins" );
+ int resourcesPlugin = -1;
+ int customPlugin = -1;
+ for ( int i = 0; i < plugins.size(); i++ )
+ {
+ Plugin plugin = plugins.get( i );
+ if ( "maven-resources-plugin".equals( plugin.getArtifactId() ) )
+ {
+ assertTrue( resourcesPlugin < 0 );
+ resourcesPlugin = i;
+ }
+ else if ( "maven-it-plugin-log-file".equals( plugin.getArtifactId() ) )
+ {
+ assertTrue( customPlugin < 0 );
+ customPlugin = i;
+ }
+ }
+ assertTrue( plugins.toString(), customPlugin == resourcesPlugin - 1 );
+ }
+
+ /** MNG-4415 */
+ public void testPluginOrderAfterMergingWithInheritedPlugins()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-inheritance-merge-order/sub" );
+
+ List<String> expected = new ArrayList<String>();
+ expected.add( "maven-it-plugin-error" );
+ expected.add( "maven-it-plugin-configuration" );
+ expected.add( "maven-it-plugin-dependency-resolution" );
+ expected.add( "maven-it-plugin-packaging" );
+ expected.add( "maven-it-plugin-log-file" );
+ expected.add( "maven-it-plugin-expression" );
+ expected.add( "maven-it-plugin-fork" );
+ expected.add( "maven-it-plugin-touch" );
+
+ List<String> actual = new ArrayList<String>();
+ @SuppressWarnings( "unchecked" )
+ List<Plugin> plugins = (List<Plugin>) pom.getValue( "build/plugins" );
+ for ( Plugin plugin : plugins )
+ {
+ actual.add( plugin.getArtifactId() );
+ }
+
+ actual.retainAll( expected );
+
+ assertEquals( actual, expected );
+ }
+
+ /** MNG-4416 */
+ public void testPluginOrderAfterMergingWithInjectedPlugins()
+ throws Exception
+ {
+ PomTestWrapper pom = buildPom( "plugin-injection-merge-order" );
+
+ List<String> expected = new ArrayList<String>();
+ expected.add( "maven-it-plugin-error" );
+ expected.add( "maven-it-plugin-configuration" );
+ expected.add( "maven-it-plugin-dependency-resolution" );
+ expected.add( "maven-it-plugin-packaging" );
+ expected.add( "maven-it-plugin-log-file" );
+ expected.add( "maven-it-plugin-expression" );
+ expected.add( "maven-it-plugin-fork" );
+ expected.add( "maven-it-plugin-touch" );
+
+ List<String> actual = new ArrayList<String>();
+ @SuppressWarnings( "unchecked" )
+ List<Plugin> plugins = (List<Plugin>) pom.getValue( "build/plugins" );
+ for ( Plugin plugin : plugins )
+ {
+ actual.add( plugin.getArtifactId() );
+ }
+
+ actual.retainAll( expected );
+
+ assertEquals( actual, expected );
+ }
+
+ public void testProjectArtifactIdIsNotInheritedButMandatory()
+ throws Exception
+ {
+ try
+ {
+ buildPom( "artifact-id-inheritance/child" );
+ fail( "Missing artifactId did not cause validation error" );
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // expected
+ }
+ }
+
+ private void assertPathSuffixEquals( String expected, Object actual )
+ {
+ String a = actual.toString();
+ a = a.substring( a.length() - expected.length() ).replace( '\\', '/' );
+ assertEquals( expected, a );
+ }
+
+ private void assertPathWithNormalizedFileSeparators( Object value )
+ {
+ assertEquals( new File( value.toString() ).getPath(), value.toString() );
+ }
+
+ private PomTestWrapper buildPom( String pomPath, String... profileIds )
+ throws Exception
+ {
+ return buildPom( pomPath, null, profileIds );
+ }
+
+ private PomTestWrapper buildPom( String pomPath, Properties executionProperties, String... profileIds )
+ throws Exception
+ {
+ return buildPom( pomPath, false, executionProperties, profileIds );
+ }
+
+ private PomTestWrapper buildPom( String pomPath, boolean lenientValidation, Properties executionProperties,
+ String... profileIds )
+ throws Exception
+ {
+ File pomFile = new File( testDirectory, pomPath );
+ if ( pomFile.isDirectory() )
+ {
+ pomFile = new File( pomFile, "pom.xml" );
+ }
+
+ ProjectBuildingRequest config = new DefaultProjectBuildingRequest();
+
+ String localRepoUrl =
+ System.getProperty( "maven.repo.local", System.getProperty( "user.home" ) + "/.m2/repository" );
+ localRepoUrl = "file://" + localRepoUrl;
+ config.setLocalRepository( repositorySystem.createArtifactRepository( "local", localRepoUrl, new DefaultRepositoryLayout(), null, null ) );
+ config.setActiveProfileIds( Arrays.asList( profileIds ) );
+ config.setSystemProperties( executionProperties );
+ config.setUserProperties( executionProperties );
+ config.setValidationLevel( lenientValidation ? ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0
+ : ModelBuildingRequest.VALIDATION_LEVEL_STRICT );
+
+ DefaultRepositorySystemSession repoSession = MavenRepositorySystemUtils.newSession();
+ LocalRepository localRepo = new LocalRepository( config.getLocalRepository().getBasedir() );
+ repoSession.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( repoSession, localRepo ) );
+ config.setRepositorySession( repoSession );
+
+ return new PomTestWrapper( pomFile, projectBuilder.build( pomFile, config ).getProject() );
+ }
+
+ protected void assertModelEquals( PomTestWrapper pom, Object expected, String expression )
+ {
+ assertEquals( expected, pom.getValue( expression ) );
+ }
+
+ private static String createPath( List<String> elements )
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+ for ( String s : elements )
+ {
+ buffer.append( s ).append( File.separator );
+ }
+ return buffer.toString().substring( 0, buffer.toString().length() - 1 );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java
new file mode 100644
index 00000000..5511cb1a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java
@@ -0,0 +1,87 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Properties;
+
+import org.apache.maven.AbstractCoreMavenComponentTestCase;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.building.FileModelSource;
+import org.apache.maven.model.building.ModelSource;
+
+public class ProjectBuilderTest
+ extends AbstractCoreMavenComponentTestCase
+{
+ protected String getProjectsDirectory()
+ {
+ return "src/test/projects/project-builder";
+ }
+
+ public void testSystemScopeDependencyIsPresentInTheCompileClasspathElements()
+ throws Exception
+ {
+ File pom = getProject( "it0063" );
+
+ Properties eps = new Properties();
+ eps.setProperty( "jre.home", new File( pom.getParentFile(), "jdk/jre" ).getPath() );
+
+ MavenSession session = createMavenSession( pom, eps );
+ MavenProject project = session.getCurrentProject();
+
+ // Here we will actually not have any artifacts because the ProjectDependenciesResolver is not involved here. So
+ // right now it's not valid to ask for artifacts unless plugins require the artifacts.
+
+ project.getCompileClasspathElements();
+ }
+
+ public void testBuildFromModelSource()
+ throws Exception
+ {
+ File pomFile = new File( "src/test/resources/projects/modelsource/module01/pom.xml" );
+ MavenSession mavenSession = createMavenSession( pomFile );
+ ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest();
+ configuration.setRepositorySession( mavenSession.getRepositorySession() );
+ ModelSource modelSource = new FileModelSource( pomFile );
+ ProjectBuildingResult result =
+ lookup( org.apache.maven.project.ProjectBuilder.class ).build( modelSource, configuration );
+
+ assertNotNull( result.getProject().getParentFile() );
+ }
+
+ public void testVersionlessManagedDependency()
+ throws Exception
+ {
+ File pomFile = new File( "src/test/resources/projects/versionless-managed-dependency.xml" );
+ MavenSession mavenSession = createMavenSession( null );
+ ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest();
+ configuration.setRepositorySession( mavenSession.getRepositorySession() );
+
+ try
+ {
+ lookup( org.apache.maven.project.ProjectBuilder.class ).build( pomFile, configuration );
+ fail();
+ }
+ catch ( ProjectBuildingException e )
+ {
+ // this is expected
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/ProjectSorterTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/ProjectSorterTest.java
new file mode 100644
index 00000000..5cb45279
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/ProjectSorterTest.java
@@ -0,0 +1,363 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Extension;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginManagement;
+import org.codehaus.plexus.util.dag.CycleDetectedException;
+
+/**
+ * Test sorting projects by dependencies.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class ProjectSorterTest
+ extends TestCase
+{
+
+ private Parent createParent( MavenProject project )
+ {
+ return createParent( project.getGroupId(), project.getArtifactId(), project.getVersion() );
+ }
+
+ private Parent createParent( String groupId, String artifactId, String version )
+ {
+ Parent plugin = new Parent();
+ plugin.setGroupId( groupId );
+ plugin.setArtifactId( artifactId );
+ plugin.setVersion( version );
+ return plugin;
+ }
+
+ private Dependency createDependency( MavenProject project )
+ {
+ return createDependency( project.getGroupId(), project.getArtifactId(), project.getVersion() );
+ }
+
+ private Dependency createDependency( String groupId, String artifactId, String version )
+ {
+ Dependency depdendency = new Dependency();
+ depdendency.setGroupId( groupId );
+ depdendency.setArtifactId( artifactId );
+ depdendency.setVersion( version );
+ return depdendency;
+ }
+
+ private Plugin createPlugin( MavenProject project )
+ {
+ return createPlugin( project.getGroupId(), project.getArtifactId(), project.getVersion() );
+ }
+
+ private Plugin createPlugin( String groupId, String artifactId, String version )
+ {
+ Plugin plugin = new Plugin();
+ plugin.setGroupId( groupId );
+ plugin.setArtifactId( artifactId );
+ plugin.setVersion( version );
+ return plugin;
+ }
+
+ private Extension createExtension( String groupId, String artifactId, String version )
+ {
+ Extension extension = new Extension();
+ extension.setGroupId( groupId );
+ extension.setArtifactId( artifactId );
+ extension.setVersion( version );
+ return extension;
+ }
+
+ private static MavenProject createProject( String groupId, String artifactId, String version )
+ {
+ Model model = new Model();
+ model.setGroupId( groupId );
+ model.setArtifactId( artifactId );
+ model.setVersion( version );
+ model.setBuild( new Build() );
+ return new MavenProject( model );
+ }
+
+ public void testShouldNotFailWhenPluginDepReferencesCurrentProject()
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ MavenProject project = createProject( "group", "artifact", "1.0" );
+
+ Build build = project.getModel().getBuild();
+
+ Plugin plugin = createPlugin( "other.group", "other-artifact", "1.0" );
+
+ Dependency dep = createDependency( "group", "artifact", "1.0" );
+
+ plugin.addDependency( dep );
+
+ build.addPlugin( plugin );
+
+ new ProjectSorter( Collections.singletonList( project ) );
+ }
+
+ public void testShouldNotFailWhenManagedPluginDepReferencesCurrentProject()
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ MavenProject project = createProject( "group", "artifact", "1.0" );
+
+ Build build = project.getModel().getBuild();
+
+ PluginManagement pMgmt = new PluginManagement();
+
+ Plugin plugin = createPlugin( "other.group", "other-artifact", "1.0" );
+
+ Dependency dep = createDependency( "group", "artifact", "1.0" );
+
+ plugin.addDependency( dep );
+
+ pMgmt.addPlugin( plugin );
+
+ build.setPluginManagement( pMgmt );
+
+ new ProjectSorter( Collections.singletonList( project ) );
+ }
+
+ public void testShouldNotFailWhenProjectReferencesNonExistentProject()
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ MavenProject project = createProject( "group", "artifact", "1.0" );
+
+ Build build = project.getModel().getBuild();
+
+ Extension extension = createExtension( "other.group", "other-artifact", "1.0" );
+
+ build.addExtension( extension );
+
+ new ProjectSorter( Collections.singletonList( project ) );
+ }
+
+ public void testMatchingArtifactIdsDifferentGroupIds()
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ List<MavenProject> projects = new ArrayList<MavenProject>();
+ MavenProject project1 = createProject( "groupId1", "artifactId", "1.0" );
+ projects.add( project1 );
+ MavenProject project2 = createProject( "groupId2", "artifactId", "1.0" );
+ projects.add( project2 );
+ project1.getDependencies().add( createDependency( project2 ) );
+
+ projects = new ProjectSorter( projects ).getSortedProjects();
+
+ assertEquals( project2, projects.get( 0 ) );
+ assertEquals( project1, projects.get( 1 ) );
+ }
+
+ public void testMatchingGroupIdsDifferentArtifactIds()
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ List<MavenProject> projects = new ArrayList<MavenProject>();
+ MavenProject project1 = createProject( "groupId", "artifactId1", "1.0" );
+ projects.add( project1 );
+ MavenProject project2 = createProject( "groupId", "artifactId2", "1.0" );
+ projects.add( project2 );
+ project1.getDependencies().add( createDependency( project2 ) );
+
+ projects = new ProjectSorter( projects ).getSortedProjects();
+
+ assertEquals( project2, projects.get( 0 ) );
+ assertEquals( project1, projects.get( 1 ) );
+ }
+
+ public void testMatchingIdsAndVersions()
+ throws CycleDetectedException
+ {
+ List<MavenProject> projects = new ArrayList<MavenProject>();
+ MavenProject project1 = createProject( "groupId", "artifactId", "1.0" );
+ projects.add( project1 );
+ MavenProject project2 = createProject( "groupId", "artifactId", "1.0" );
+ projects.add( project2 );
+
+ try
+ {
+ projects = new ProjectSorter( projects ).getSortedProjects();
+ fail( "Duplicate projects should fail" );
+ }
+ catch ( DuplicateProjectException e )
+ {
+ // expected
+ assertTrue( true );
+ }
+ }
+
+ public void testMatchingIdsAndDifferentVersions()
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ List<MavenProject> projects = new ArrayList<MavenProject>();
+ MavenProject project1 = createProject( "groupId", "artifactId", "1.0" );
+ projects.add( project1 );
+ MavenProject project2 = createProject( "groupId", "artifactId", "2.0" );
+ projects.add( project2 );
+
+ projects = new ProjectSorter( projects ).getSortedProjects();
+ assertEquals( project1, projects.get( 0 ) );
+ assertEquals( project2, projects.get( 1 ) );
+ }
+
+ public void testPluginDependenciesInfluenceSorting()
+ throws Exception
+ {
+ List<MavenProject> projects = new ArrayList<MavenProject>();
+
+ MavenProject parentProject = createProject( "groupId", "parent", "1.0" );
+ projects.add( parentProject );
+
+ MavenProject declaringProject = createProject( "groupId", "declarer", "1.0" );
+ declaringProject.setParent( parentProject );
+ declaringProject.getModel().setParent( createParent( parentProject ) );
+ projects.add( declaringProject );
+
+ MavenProject pluginLevelDepProject = createProject( "groupId", "plugin-level-dep", "1.0" );
+ pluginLevelDepProject.setParent( parentProject );
+ pluginLevelDepProject.getModel().setParent( createParent( parentProject ) );
+ projects.add( pluginLevelDepProject );
+
+ MavenProject pluginProject = createProject( "groupId", "plugin", "1.0" );
+ pluginProject.setParent( parentProject );
+ pluginProject.getModel().setParent( createParent( parentProject ) );
+ projects.add( pluginProject );
+
+ Plugin plugin = createPlugin( pluginProject );
+
+ plugin.addDependency( createDependency( pluginLevelDepProject ) );
+
+ Build build = declaringProject.getModel().getBuild();
+
+ build.addPlugin( plugin );
+
+ projects = new ProjectSorter( projects ).getSortedProjects();
+
+ assertEquals( parentProject, projects.get( 0 ) );
+
+ // the order of these two is non-deterministic, based on when they're added to the reactor.
+ assertTrue( projects.contains( pluginProject ) );
+ assertTrue( projects.contains( pluginLevelDepProject ) );
+
+ // the declaring project MUST be listed after the plugin and its plugin-level dep, though.
+ assertEquals( declaringProject, projects.get( 3 ) );
+ }
+
+ public void testPluginDependenciesInfluenceSorting_DeclarationInParent()
+ throws Exception
+ {
+ List<MavenProject> projects = new ArrayList<MavenProject>();
+
+ MavenProject parentProject = createProject( "groupId", "parent-declarer", "1.0" );
+ projects.add( parentProject );
+
+ MavenProject pluginProject = createProject( "groupId", "plugin", "1.0" );
+ pluginProject.setParent( parentProject );
+ pluginProject.getModel().setParent( createParent( parentProject ) );
+ projects.add( pluginProject );
+
+ MavenProject pluginLevelDepProject = createProject( "groupId", "plugin-level-dep", "1.0" );
+ pluginLevelDepProject.setParent( parentProject );
+ pluginLevelDepProject.getModel().setParent( createParent( parentProject ) );
+ projects.add( pluginLevelDepProject );
+
+ Plugin plugin = createPlugin( pluginProject );
+
+ plugin.addDependency( createDependency( pluginLevelDepProject ) );
+
+ Build build = parentProject.getModel().getBuild();
+
+ build.addPlugin( plugin );
+
+ projects = new ProjectSorter( projects ).getSortedProjects();
+
+ System.out.println( projects );
+
+ assertEquals( parentProject, projects.get( 0 ) );
+
+ // the order of these two is non-deterministic, based on when they're added to the reactor.
+ assertTrue( projects.contains( pluginProject ) );
+ assertTrue( projects.contains( pluginLevelDepProject ) );
+ }
+
+ public void testPluginVersionsAreConsidered()
+ throws Exception
+ {
+ List<MavenProject> projects = new ArrayList<MavenProject>();
+
+ MavenProject pluginProjectA = createProject( "group", "plugin-a", "2.0-SNAPSHOT" );
+ projects.add( pluginProjectA );
+ pluginProjectA.getModel().getBuild().addPlugin( createPlugin( "group", "plugin-b", "1.0" ) );
+
+ MavenProject pluginProjectB = createProject( "group", "plugin-b", "2.0-SNAPSHOT" );
+ projects.add( pluginProjectB );
+ pluginProjectB.getModel().getBuild().addPlugin( createPlugin( "group", "plugin-a", "1.0" ) );
+
+ projects = new ProjectSorter( projects ).getSortedProjects();
+
+ assertTrue( projects.contains( pluginProjectA ) );
+ assertTrue( projects.contains( pluginProjectB ) );
+ }
+
+ public void testDependencyPrecedesProjectThatUsesSpecificDependencyVersion()
+ throws Exception
+ {
+ List<MavenProject> projects = new ArrayList<MavenProject>();
+
+ MavenProject usingProject = createProject( "group", "project", "1.0" );
+ projects.add( usingProject );
+ usingProject.getModel().addDependency( createDependency( "group", "dependency", "1.0" ) );
+
+ MavenProject pluginProject = createProject( "group", "dependency", "1.0" );
+ projects.add( pluginProject );
+
+ projects = new ProjectSorter( projects ).getSortedProjects();
+
+ assertEquals( pluginProject, projects.get( 0 ) );
+ assertEquals( usingProject, projects.get( 1 ) );
+ }
+
+ public void testDependencyPrecedesProjectThatUsesUnresolvedDependencyVersion()
+ throws Exception
+ {
+ List<MavenProject> projects = new ArrayList<MavenProject>();
+
+ MavenProject usingProject = createProject( "group", "project", "1.0" );
+ projects.add( usingProject );
+ usingProject.getModel().addDependency( createDependency( "group", "dependency", "[1.0,)" ) );
+
+ MavenProject pluginProject = createProject( "group", "dependency", "1.0" );
+ projects.add( pluginProject );
+
+ projects = new ProjectSorter( projects ).getSortedProjects();
+
+ assertEquals( pluginProject, projects.get( 0 ) );
+ assertEquals( usingProject, projects.get( 1 ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/TestMetadataSource.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/TestMetadataSource.java
new file mode 100644
index 00000000..67c0037b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/TestMetadataSource.java
@@ -0,0 +1,51 @@
+package org.apache.maven.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.metadata.ResolutionGroup;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.project.artifact.MavenMetadataSource;
+import org.codehaus.plexus.component.annotations.Component;
+
+@SuppressWarnings( "deprecation" )
+@Component( role = ArtifactMetadataSource.class, hint = "classpath" )
+public class TestMetadataSource
+ extends MavenMetadataSource
+{
+ @Override
+ public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ ResolutionGroup rg = super.retrieve( artifact, localRepository, remoteRepositories );
+
+ for ( Artifact a : rg.getArtifacts() )
+ {
+ a.setResolved( true );
+ }
+
+ return rg;
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultMavenMetadataCacheTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultMavenMetadataCacheTest.java
new file mode 100644
index 00000000..6b103b2c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultMavenMetadataCacheTest.java
@@ -0,0 +1,81 @@
+package org.apache.maven.project.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Arrays;
+import java.util.Collections;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
+import org.apache.maven.project.artifact.DefaultMavenMetadataCache.CacheKey;
+import org.apache.maven.repository.DelegatingLocalArtifactRepository;
+import org.apache.maven.repository.RepositorySystem;
+import org.codehaus.plexus.PlexusTestCase;
+
+/**
+ * @author Igor Fedorenko
+ */
+public class DefaultMavenMetadataCacheTest
+ extends PlexusTestCase
+{
+ private RepositorySystem repositorySystem;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ repositorySystem = lookup( RepositorySystem.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ repositorySystem = null;
+ super.tearDown();
+ }
+
+ public void testCacheKey()
+ throws Exception
+ {
+ Artifact a1 = repositorySystem.createArtifact( "testGroup", "testArtifact", "1.2.3", "jar" );
+ @SuppressWarnings( "deprecation" )
+ ArtifactRepository lr1 = new DelegatingLocalArtifactRepository( repositorySystem.createDefaultLocalRepository() );
+ ArtifactRepository rr1 = repositorySystem.createDefaultRemoteRepository();
+ a1.setDependencyFilter( new ExcludesArtifactFilter( Arrays.asList( "foo" ) ) );
+
+ Artifact a2 = repositorySystem.createArtifact( "testGroup", "testArtifact", "1.2.3", "jar" );
+ @SuppressWarnings( "deprecation" )
+ ArtifactRepository lr2 = new DelegatingLocalArtifactRepository( repositorySystem.createDefaultLocalRepository() );
+ ArtifactRepository rr2 = repositorySystem.createDefaultRemoteRepository();
+ a2.setDependencyFilter( new ExcludesArtifactFilter( Arrays.asList( "foo" ) ) );
+
+ // sanity checks
+ assertNotSame( a1, a2 );
+ assertNotSame( lr1, lr2 );
+ assertNotSame( rr1, rr2 );
+
+ CacheKey k1 = new CacheKey( a1, false, lr1, Collections.singletonList( rr1 ) );
+ CacheKey k2 = new CacheKey( a2, false, lr2, Collections.singletonList( rr2 ) );
+
+ assertEquals(k1.hashCode(), k2.hashCode());
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java
new file mode 100644
index 00000000..9c770da9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java
@@ -0,0 +1,183 @@
+package org.apache.maven.project.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.repository.RepositorySystem;
+import org.codehaus.plexus.PlexusTestCase;
+
+public class MavenMetadataSourceTest
+ extends PlexusTestCase
+{
+ private RepositorySystem repositorySystem;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ repositorySystem = lookup( RepositorySystem.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ repositorySystem = null;
+ super.tearDown();
+ }
+
+ public void testShouldNotCarryExclusionsOverFromDependencyToDependency()
+ throws Exception
+ {
+ /*
+ Dependency dep1 = new Dependency();
+ dep1.setGroupId( "test" );
+ dep1.setArtifactId( "test-artifact" );
+ dep1.setVersion( "1" );
+ dep1.setType( "jar" );
+
+ Exclusion exc = new Exclusion();
+ exc.setGroupId( "test" );
+ exc.setArtifactId( "test-artifact3" );
+
+ dep1.addExclusion( exc );
+
+ Dependency dep2 = new Dependency();
+ dep2.setGroupId( "test" );
+ dep2.setArtifactId( "test-artifact2" );
+ dep2.setVersion( "1" );
+ dep2.setType( "jar" );
+
+ List deps = new ArrayList();
+ deps.add( dep1 );
+ deps.add( dep2 );
+
+ ArtifactFactory factory = lookup( ArtifactFactory.class );
+
+ ArtifactFilter dependencyFilter = new ScopeArtifactFilter( Artifact.SCOPE_COMPILE );
+
+ MavenProject project = new MavenProject( new Model() );
+
+ Set result = project.createArtifacts( dependencyFilter );
+
+ for ( Iterator it = result.iterator(); it.hasNext(); )
+ {
+ Artifact artifact = ( Artifact ) it.next();
+
+ if ( "test-artifact2".equals( artifact.getArtifactId() ) )
+ {
+ ArtifactFilter filter = artifact.getDependencyFilter();
+
+ assertSame( dependencyFilter, filter );
+ }
+ }
+ */
+ }
+
+ //TODO: restore these if it makes sense
+ /*
+ public void testShouldUseCompileScopeIfDependencyScopeEmpty()
+ throws Exception
+ {
+ String groupId = "org.apache.maven";
+ String artifactId = "maven-model";
+
+ Dependency dep = new Dependency();
+
+ dep.setGroupId( groupId );
+ dep.setArtifactId( artifactId );
+ dep.setVersion( "2.0-alpha-3" );
+
+ Model model = new Model();
+
+ model.addDependency( dep );
+
+ MavenProject project = new MavenProject( model, repositorySystem );
+
+ project.setArtifacts( project.createArtifacts( null ) );
+
+ String key = ArtifactUtils.versionlessKey( groupId, artifactId );
+
+ Map artifactMap = project.getArtifactMap();
+
+ assertNotNull( "artifact-map should not be null.", artifactMap );
+ assertEquals( "artifact-map should contain 1 element.", 1, artifactMap.size() );
+
+ Artifact artifact = (Artifact) artifactMap.get( key );
+
+ assertNotNull( "dependency artifact not found in map.", artifact );
+ assertEquals( "dependency artifact has wrong scope.", Artifact.SCOPE_COMPILE, artifact.getScope() );
+
+ //check for back-propagation of default scope.
+ assertEquals( "default scope NOT back-propagated to dependency.", Artifact.SCOPE_COMPILE, dep.getScope() );
+ }
+
+ public void testShouldUseInjectedTestScopeFromDependencyManagement()
+ throws Exception
+ {
+ String groupId = "org.apache.maven";
+ String artifactId = "maven-model";
+
+ Dependency dep = new Dependency();
+
+ dep.setGroupId( groupId );
+ dep.setArtifactId( artifactId );
+ dep.setVersion( "2.0-alpha-3" );
+
+ Model model = new Model();
+
+ model.addDependency( dep );
+
+ Dependency mgd = new Dependency();
+ mgd.setGroupId( groupId );
+ mgd.setArtifactId( artifactId );
+ mgd.setScope( Artifact.SCOPE_TEST );
+
+ DependencyManagement depMgmt = new DependencyManagement();
+
+ depMgmt.addDependency( mgd );
+
+ model.setDependencyManagement( depMgmt );
+
+ MavenProject project = new MavenProject( model, repositorySystem );
+
+ TestModelDefaultsInjector injector = new TestModelDefaultsInjector();
+
+ injector.injectDefaults( model );
+
+ project.setArtifacts( project.createArtifacts( null ) );
+
+ String key = ArtifactUtils.versionlessKey( groupId, artifactId );
+
+ Map artifactMap = project.getArtifactMap();
+
+ assertNotNull( "artifact-map should not be null.", artifactMap );
+ assertEquals( "artifact-map should contain 1 element.", 1, artifactMap.size() );
+
+ Artifact artifact = (Artifact) artifactMap.get( key );
+
+ assertNotNull( "dependency artifact not found in map.", artifact );
+ assertEquals( "dependency artifact has wrong scope.", Artifact.SCOPE_TEST, artifact.getScope() );
+
+ //check for back-propagation of default scope.
+ assertEquals( "default scope NOT back-propagated to dependency.", Artifact.SCOPE_TEST, dep.getScope() );
+ }
+ */
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.java
new file mode 100644
index 00000000..8b6454da
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.java
@@ -0,0 +1,101 @@
+package org.apache.maven.project.canonical;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.project.AbstractMavenProjectTestCase;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * @author Jason van Zyl
+ */
+public class CanonicalProjectBuilderTest
+ extends AbstractMavenProjectTestCase
+{
+ public void testProjectBuilder()
+ throws Exception
+ {
+ File f = getFileForClasspathResource( "canonical-pom.xml" );
+
+ MavenProject project = getProject( f );
+
+ // ----------------------------------------------------------------------
+ // Top-level elements
+ // ----------------------------------------------------------------------
+
+ assertEquals( "4.0.0", project.getModelVersion() );
+
+ // ----------------------------------------------------------------------
+ // Plugins
+ // ----------------------------------------------------------------------
+
+ List<Plugin> plugins = project.getBuildPlugins();
+
+ // Plugin0 [plexus]
+
+ String key = "org.apache.maven.plugins:maven-plexus-plugin";
+
+ Plugin plugin = null;
+ for ( Plugin check : plugins )
+ {
+ if ( key.equals( check.getKey() ) )
+ {
+ plugin = check;
+ break;
+ }
+ }
+
+ assertNotNull( plugin );
+
+ assertEquals( "1.0", plugin.getVersion() );
+
+ Xpp3Dom configuration = (Xpp3Dom) plugin.getConfiguration();
+
+ assertEquals( "src/conf/plexus.conf", configuration.getChild( "plexusConfiguration" ).getValue() );
+
+ assertEquals( "src/conf/plexus.properties",
+ configuration.getChild( "plexusConfigurationPropertiesFile" ).getValue() );
+
+ assertEquals( "Continuum", configuration.getChild( "plexusApplicationName" ).getValue() );
+
+ // ----------------------------------------------------------------------
+ // Goal specific configuration
+ // ----------------------------------------------------------------------
+
+ List<PluginExecution> executions = plugin.getExecutions();
+
+ PluginExecution execution = executions.get( 0 );
+
+ String g0 = execution.getGoals().get( 0 );
+
+ assertEquals( "plexus:runtime", g0 );
+
+ configuration = (Xpp3Dom) execution.getConfiguration();
+
+ assertEquals( "ContinuumPro", configuration.getChild( "plexusApplicationName" ).getValue() );
+
+ // Plugin1 [antlr]
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/PomTestWrapper.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/PomTestWrapper.java
new file mode 100644
index 00000000..c204140a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/PomTestWrapper.java
@@ -0,0 +1,121 @@
+package org.apache.maven.project.harness;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Iterator;
+
+import org.apache.commons.jxpath.JXPathContext;
+import org.apache.commons.jxpath.JXPathNotFoundException;
+import org.apache.commons.jxpath.ri.JXPathContextReferenceImpl;
+import org.apache.maven.project.MavenProject;
+
+public class PomTestWrapper
+{
+
+ private File pomFile;
+
+ private JXPathContext context;
+
+ private MavenProject mavenProject;
+
+ static
+ {
+ JXPathContextReferenceImpl.addNodePointerFactory( new Xpp3DomPointerFactory() );
+ }
+
+ public PomTestWrapper( File pomFile, MavenProject mavenProject )
+ {
+ if ( mavenProject == null )
+ {
+ throw new IllegalArgumentException( "mavenProject: null" );
+ }
+ this.mavenProject = mavenProject;
+ this.pomFile = pomFile;
+ context = JXPathContext.newContext( mavenProject.getModel() );
+ }
+
+ public PomTestWrapper( MavenProject mavenProject )
+ {
+ if ( mavenProject == null )
+ {
+ throw new IllegalArgumentException( "mavenProject: null" );
+ }
+ this.mavenProject = mavenProject;
+ context = JXPathContext.newContext( mavenProject.getModel() );
+ }
+
+ public MavenProject getMavenProject()
+ {
+ return mavenProject;
+ }
+
+ public File getBasedir()
+ {
+ return ( pomFile != null ) ? pomFile.getParentFile() : null;
+ }
+
+ public void setValueOnModel( String expression, Object value )
+ {
+ context.setValue( expression, value );
+ }
+
+ /*
+ public int containerCountForUri( String uri )
+ throws IOException
+ {
+ if ( uri == null || uri.trim().equals( "" ) )
+ {
+ throw new IllegalArgumentException( "uri: null or empty" );
+ }
+ ModelDataSource source = new DefaultModelDataSource();
+ source.init( domainModel.getModelProperties(), null );
+ return source.queryFor( uri ).size();
+ }
+ */
+
+ public Iterator<?> getIteratorForXPathExpression( String expression )
+ {
+ return context.iterate( expression );
+ }
+
+ public boolean containsXPathExpression( String expression )
+ {
+ return context.getValue( expression ) != null;
+ }
+
+ public Object getValue( String expression )
+ {
+ try
+ {
+ return context.getValue( expression );
+ }
+ catch ( JXPathNotFoundException e )
+ {
+ return null;
+ }
+ }
+
+ public boolean xPathExpressionEqualsValue( String expression, String value )
+ {
+ return context.getValue( expression ) != null && context.getValue( expression ).equals( value );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomAttributeIterator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomAttributeIterator.java
new file mode 100644
index 00000000..2811a848
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomAttributeIterator.java
@@ -0,0 +1,89 @@
+package org.apache.maven.project.harness;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.jxpath.ri.QName;
+import org.apache.commons.jxpath.ri.model.NodeIterator;
+import org.apache.commons.jxpath.ri.model.NodePointer;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * An attribute iterator for JXPath to support <code>Xpp3Dom</code>.
+ *
+ * @author Benjamin Bentmann
+ */
+class Xpp3DomAttributeIterator
+ implements NodeIterator
+{
+
+ private NodePointer parent;
+
+ private Xpp3Dom node;
+
+ private List<Map.Entry<String, String>> attributes;
+
+ private Map.Entry<String, String> attribute;
+
+ private int position;
+
+ public Xpp3DomAttributeIterator( NodePointer parent, QName qname )
+ {
+ this.parent = parent;
+ this.node = (Xpp3Dom) parent.getNode();
+
+ Map<String, String> map = new LinkedHashMap<String, String>();
+ for ( String name : this.node.getAttributeNames() )
+ {
+ if ( name.equals( qname.getName() ) || "*".equals( qname.getName() ) )
+ {
+ String value = this.node.getAttribute( name );
+ map.put( name, value );
+ }
+ }
+ this.attributes = new ArrayList<Map.Entry<String, String>>( map.entrySet() );
+ }
+
+ public NodePointer getNodePointer()
+ {
+ if ( position == 0 )
+ {
+ setPosition( 1 );
+ }
+ return ( attribute == null ) ? null : new Xpp3DomAttributePointer( parent, attribute );
+ }
+
+ public int getPosition()
+ {
+ return position;
+ }
+
+ public boolean setPosition( int position )
+ {
+ this.position = position;
+ attribute = ( position > 0 && position <= attributes.size() ) ? attributes.get( position - 1 ) : null;
+ return attribute != null;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomAttributePointer.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomAttributePointer.java
new file mode 100644
index 00000000..04514b18
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomAttributePointer.java
@@ -0,0 +1,105 @@
+package org.apache.maven.project.harness;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Map;
+
+import org.apache.commons.jxpath.ri.QName;
+import org.apache.commons.jxpath.ri.model.NodePointer;
+
+/**
+ * An attribute pointer for JXPath to support <code>Xpp3Dom</code>.
+ *
+ * @author Benjamin Bentmann
+ */
+class Xpp3DomAttributePointer
+ extends NodePointer
+{
+
+ private Map.Entry<String, String> attrib;
+
+ public Xpp3DomAttributePointer( NodePointer parent, Map.Entry<String, String> attrib )
+ {
+ super( parent );
+ this.attrib = attrib;
+ }
+
+ @Override
+ public int compareChildNodePointers( NodePointer pointer1, NodePointer pointer2 )
+ {
+ // should never happen because attributes have no children
+ return 0;
+ }
+
+ @Override
+ public Object getValue()
+ {
+ return attrib.getValue();
+ }
+
+ @Override
+ public Object getBaseValue()
+ {
+ return attrib;
+ }
+
+ @Override
+ public Object getImmediateNode()
+ {
+ return attrib;
+ }
+
+ @Override
+ public int getLength()
+ {
+ return 1;
+ }
+
+ @Override
+ public QName getName()
+ {
+ return new QName( null, attrib.getKey() );
+ }
+
+ @Override
+ public boolean isActual()
+ {
+ return true;
+ }
+
+ @Override
+ public boolean isCollection()
+ {
+ return false;
+ }
+
+ @Override
+ public boolean isLeaf()
+ {
+ return true;
+ }
+
+ @Override
+ public void setValue( Object value )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomNodeIterator.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomNodeIterator.java
new file mode 100644
index 00000000..796a5ca0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomNodeIterator.java
@@ -0,0 +1,161 @@
+package org.apache.maven.project.harness;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.jxpath.ri.Compiler;
+import org.apache.commons.jxpath.ri.compiler.NodeNameTest;
+import org.apache.commons.jxpath.ri.compiler.NodeTest;
+import org.apache.commons.jxpath.ri.compiler.NodeTypeTest;
+import org.apache.commons.jxpath.ri.model.NodeIterator;
+import org.apache.commons.jxpath.ri.model.NodePointer;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * A node iterator for JXPath to support <code>Xpp3Dom</code>.
+ *
+ * @author Benjamin Bentmann
+ */
+class Xpp3DomNodeIterator
+ implements NodeIterator
+{
+
+ private NodePointer parent;
+
+ private NodeTest test;
+
+ private Xpp3Dom node;
+
+ private Xpp3Dom[] children;
+
+ private List<Xpp3Dom> filteredChildren = new ArrayList<Xpp3Dom>();
+
+ private int filteredIndex;
+
+ private Xpp3Dom child;
+
+ private int position;
+
+ public Xpp3DomNodeIterator( NodePointer parent, NodeTest test, boolean reverse, NodePointer startWith )
+ {
+ this.parent = parent;
+ this.node = (Xpp3Dom) parent.getNode();
+ this.children = this.node.getChildren();
+ if ( startWith != null )
+ {
+ Xpp3Dom startWithNode = (Xpp3Dom) startWith.getNode();
+ for ( ; filteredIndex < children.length; filteredIndex++ )
+ {
+ if ( startWithNode.equals( children[filteredIndex] ) )
+ {
+ filteredIndex++;
+ break;
+ }
+ }
+ }
+ this.test = test;
+ if ( reverse )
+ {
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ public NodePointer getNodePointer()
+ {
+ if ( position == 0 )
+ {
+ setPosition( 1 );
+ }
+ return ( child == null ) ? null : new Xpp3DomNodePointer( parent, child );
+ }
+
+ public int getPosition()
+ {
+ return position;
+ }
+
+ public boolean setPosition( int position )
+ {
+ this.position = position;
+ filterChildren( position );
+ child = ( position > 0 && position <= filteredChildren.size() ) ? filteredChildren.get( position - 1 ) : null;
+ return child != null;
+ }
+
+ private void filterChildren( int position )
+ {
+ for ( ; position > filteredChildren.size() && filteredIndex < children.length; filteredIndex++ )
+ {
+ Xpp3Dom child = children[filteredIndex];
+ if ( testNode( child ) )
+ {
+ filteredChildren.add( child );
+ }
+ }
+ }
+
+ private boolean testNode( Xpp3Dom node )
+ {
+ if ( test == null )
+ {
+ return true;
+ }
+ if ( test instanceof NodeNameTest )
+ {
+ String nodeName = node.getName();
+ if ( StringUtils.isEmpty( nodeName ) )
+ {
+ return false;
+ }
+
+ NodeNameTest nodeNameTest = (NodeNameTest) test;
+ String namespaceURI = nodeNameTest.getNamespaceURI();
+ boolean wildcard = nodeNameTest.isWildcard();
+ String testName = nodeNameTest.getNodeName().getName();
+ String testPrefix = nodeNameTest.getNodeName().getPrefix();
+ if ( wildcard && testPrefix == null )
+ {
+ return true;
+ }
+ if ( wildcard || testName.equals( nodeName ) )
+ {
+ return StringUtils.isEmpty( namespaceURI ) || StringUtils.isEmpty( testPrefix );
+ }
+ return false;
+ }
+ if ( test instanceof NodeTypeTest )
+ {
+ switch ( ( (NodeTypeTest) test ).getNodeType() )
+ {
+ case Compiler.NODE_TYPE_NODE:
+ return true;
+ case Compiler.NODE_TYPE_TEXT:
+ return node.getValue() != null;
+ default:
+ return false;
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomNodePointer.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomNodePointer.java
new file mode 100644
index 00000000..f93bd892
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomNodePointer.java
@@ -0,0 +1,155 @@
+package org.apache.maven.project.harness;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.jxpath.ri.QName;
+import org.apache.commons.jxpath.ri.compiler.NodeTest;
+import org.apache.commons.jxpath.ri.model.NodeIterator;
+import org.apache.commons.jxpath.ri.model.NodePointer;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * A node pointer for JXPath to support <code>Xpp3Dom</code>.
+ *
+ * @author Benjamin Bentmann
+ */
+class Xpp3DomNodePointer
+ extends NodePointer
+{
+
+ private Xpp3Dom node;
+
+ public Xpp3DomNodePointer( Xpp3Dom node )
+ {
+ super( null );
+ this.node = node;
+ }
+
+ public Xpp3DomNodePointer( NodePointer parent, Xpp3Dom node )
+ {
+ super( parent );
+ this.node = node;
+ }
+
+ @Override
+ public int compareChildNodePointers( NodePointer pointer1, NodePointer pointer2 )
+ {
+ Xpp3Dom node1 = (Xpp3Dom) pointer1.getBaseValue();
+ Xpp3Dom node2 = (Xpp3Dom) pointer2.getBaseValue();
+ if ( node1 == node2 )
+ {
+ return 0;
+ }
+ for ( int i = 0; i < node.getChildCount(); i++ )
+ {
+ Xpp3Dom child = node.getChild( i );
+ if ( child == node1 )
+ {
+ return -1;
+ }
+ if ( child == node2 )
+ {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ @Override
+ public Object getValue()
+ {
+ return getValue( node );
+ }
+
+ private static Object getValue( Xpp3Dom node )
+ {
+ if ( node.getValue() != null )
+ {
+ return node.getValue();
+ }
+ else
+ {
+ List<Object> children = new ArrayList<Object>();
+ for ( int i = 0; i < node.getChildCount(); i++ )
+ {
+ children.add( getValue( node.getChild( i ) ) );
+ }
+ return children;
+ }
+ }
+
+ @Override
+ public Object getBaseValue()
+ {
+ return node;
+ }
+
+ @Override
+ public Object getImmediateNode()
+ {
+ return node;
+ }
+
+ @Override
+ public int getLength()
+ {
+ return 1;
+ }
+
+ @Override
+ public QName getName()
+ {
+ return new QName( null, node.getName() );
+ }
+
+ @Override
+ public boolean isCollection()
+ {
+ return false;
+ }
+
+ @Override
+ public boolean isLeaf()
+ {
+ return node.getChildCount() <= 0;
+ }
+
+ @Override
+ public void setValue( Object value )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public NodeIterator childIterator( NodeTest test, boolean reverse, NodePointer startWith )
+ {
+ return new Xpp3DomNodeIterator( this, test, reverse, startWith );
+ }
+
+ @Override
+ public NodeIterator attributeIterator( QName qname )
+ {
+ return new Xpp3DomAttributeIterator( this, qname );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomPointerFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomPointerFactory.java
new file mode 100644
index 00000000..28c0f8ff
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomPointerFactory.java
@@ -0,0 +1,61 @@
+package org.apache.maven.project.harness;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Locale;
+
+import org.apache.commons.jxpath.ri.QName;
+import org.apache.commons.jxpath.ri.model.NodePointer;
+import org.apache.commons.jxpath.ri.model.NodePointerFactory;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * A node pointer factory for JXPath to support <code>Xpp3Dom</code>.
+ *
+ * @author Benjamin Bentmann
+ */
+public class Xpp3DomPointerFactory
+ implements NodePointerFactory
+{
+
+ public int getOrder()
+ {
+ return 200;
+ }
+
+ public NodePointer createNodePointer( QName name, Object object, Locale locale )
+ {
+ if ( object instanceof Xpp3Dom )
+ {
+ return new Xpp3DomNodePointer( (Xpp3Dom) object );
+ }
+ return null;
+ }
+
+ public NodePointer createNodePointer( NodePointer parent, QName name, Object object )
+ {
+ if ( object instanceof Xpp3Dom )
+ {
+ return new Xpp3DomNodePointer( parent, (Xpp3Dom) object );
+ }
+ return null;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/LegacyRepositoryLayout.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/LegacyRepositoryLayout.java
new file mode 100644
index 00000000..77a6baef
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/LegacyRepositoryLayout.java
@@ -0,0 +1,89 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * @author jdcasey
+ */
+@Component(role=ArtifactRepositoryLayout.class, hint="legacy")
+public class LegacyRepositoryLayout
+ implements ArtifactRepositoryLayout
+{
+ private static final String PATH_SEPARATOR = "/";
+
+ public String getId()
+ {
+ return "legacy";
+ }
+
+ public String pathOf( Artifact artifact )
+ {
+ ArtifactHandler artifactHandler = artifact.getArtifactHandler();
+
+ StringBuilder path = new StringBuilder( 128 );
+
+ path.append( artifact.getGroupId() ).append( '/' );
+ path.append( artifactHandler.getDirectory() ).append( '/' );
+ path.append( artifact.getArtifactId() ).append( '-' ).append( artifact.getVersion() );
+
+ if ( artifact.hasClassifier() )
+ {
+ path.append( '-' ).append( artifact.getClassifier() );
+ }
+
+ if ( artifactHandler.getExtension() != null && artifactHandler.getExtension().length() > 0 )
+ {
+ path.append( '.' ).append( artifactHandler.getExtension() );
+ }
+
+ return path.toString();
+ }
+
+ public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata,
+ ArtifactRepository repository )
+ {
+ return pathOfRepositoryMetadata( metadata, metadata.getLocalFilename( repository ) );
+ }
+
+ private String pathOfRepositoryMetadata( ArtifactMetadata metadata,
+ String filename )
+ {
+ StringBuilder path = new StringBuilder( 128 );
+
+ path.append( metadata.getGroupId() ).append( PATH_SEPARATOR ).append( "poms" ).append( PATH_SEPARATOR );
+
+ path.append( filename );
+
+ return path.toString();
+ }
+
+ public String pathOfRemoteRepositoryMetadata( ArtifactMetadata metadata )
+ {
+ return pathOfRepositoryMetadata( metadata, metadata.getRemoteFilename() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestArtifactHandler.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestArtifactHandler.java
new file mode 100644
index 00000000..db1fecb5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestArtifactHandler.java
@@ -0,0 +1,83 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.handler.ArtifactHandler;
+
+/**
+ * Assists unit testing.
+ *
+ * @author Benjamin Bentmann
+ */
+class TestArtifactHandler
+ implements ArtifactHandler
+{
+
+ private String type;
+
+ private String extension;
+
+ public TestArtifactHandler( String type )
+ {
+ this( type, type );
+ }
+
+ public TestArtifactHandler( String type, String extension )
+ {
+ this.type = type;
+ this.extension = extension;
+ }
+
+ public String getClassifier()
+ {
+ return null;
+ }
+
+ public String getDirectory()
+ {
+ return getPackaging() + "s";
+ }
+
+ public String getExtension()
+ {
+ return extension;
+ }
+
+ public String getLanguage()
+ {
+ return "java";
+ }
+
+ public String getPackaging()
+ {
+ return type;
+ }
+
+ public boolean isAddedToClasspath()
+ {
+ return true;
+ }
+
+ public boolean isIncludesDependencies()
+ {
+ return false;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java
new file mode 100644
index 00000000..91ace4f1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java
@@ -0,0 +1,123 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Collection;
+
+import org.codehaus.plexus.util.FileUtils;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.spi.connector.ArtifactDownload;
+import org.eclipse.aether.spi.connector.ArtifactUpload;
+import org.eclipse.aether.spi.connector.MetadataDownload;
+import org.eclipse.aether.spi.connector.MetadataUpload;
+import org.eclipse.aether.spi.connector.RepositoryConnector;
+import org.eclipse.aether.transfer.ArtifactNotFoundException;
+import org.eclipse.aether.transfer.ArtifactTransferException;
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class TestRepositoryConnector
+ implements RepositoryConnector
+{
+
+ private RemoteRepository repository;
+
+ private File basedir;
+
+ public TestRepositoryConnector( RemoteRepository repository )
+ {
+ this.repository = repository;
+ try
+ {
+ basedir = FileUtils.toFile( new URL( repository.getUrl() ) );
+ }
+ catch ( MalformedURLException e )
+ {
+ throw new IllegalStateException( e );
+ }
+ }
+
+ public void close()
+ {
+ }
+
+ public void get( Collection<? extends ArtifactDownload> artifactDownloads,
+ Collection<? extends MetadataDownload> metadataDownloads )
+ {
+ if ( artifactDownloads != null )
+ {
+ for ( ArtifactDownload download : artifactDownloads )
+ {
+ File remoteFile = new File( basedir, path( download.getArtifact() ) );
+ try
+ {
+ FileUtils.copyFile( remoteFile, download.getFile() );
+ }
+ catch ( IOException e )
+ {
+ if ( !remoteFile.exists() )
+ {
+ download.setException( new ArtifactNotFoundException( download.getArtifact(), repository ) );
+ }
+ else
+ {
+ download.setException( new ArtifactTransferException( download.getArtifact(), repository, e ) );
+ }
+ }
+ }
+ }
+ }
+
+ private String path( Artifact artifact )
+ {
+ StringBuilder path = new StringBuilder( 128 );
+
+ path.append( artifact.getGroupId().replace( '.', '/' ) ).append( '/' );
+
+ path.append( artifact.getArtifactId() ).append( '/' );
+
+ path.append( artifact.getBaseVersion() ).append( '/' );
+
+ path.append( artifact.getArtifactId() ).append( '-' ).append( artifact.getVersion() );
+
+ if ( artifact.getClassifier().length() > 0 )
+ {
+ path.append( '-' ).append( artifact.getClassifier() );
+ }
+
+ path.append( '.' ).append( artifact.getExtension() );
+
+ return path.toString();
+ }
+
+ public void put( Collection<? extends ArtifactUpload> artifactUploads,
+ Collection<? extends MetadataUpload> metadataUploads )
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnectorFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnectorFactory.java
new file mode 100644
index 00000000..17fd43f9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnectorFactory.java
@@ -0,0 +1,48 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.codehaus.plexus.component.annotations.Component;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.spi.connector.RepositoryConnector;
+import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
+import org.eclipse.aether.transfer.NoRepositoryConnectorException;
+
+/**
+ * @author Benjamin Bentmann
+ */
+@Component( role = RepositoryConnectorFactory.class, hint = "test" )
+public class TestRepositoryConnectorFactory
+ implements RepositoryConnectorFactory
+{
+
+ public RepositoryConnector newInstance( RepositorySystemSession session, RemoteRepository repository )
+ throws NoRepositoryConnectorException
+ {
+ return new TestRepositoryConnector( repository );
+ }
+
+ public float getPriority()
+ {
+ return 0;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestRepositorySystem.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestRepositorySystem.java
new file mode 100644
index 00000000..c4afc7a9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestRepositorySystem.java
@@ -0,0 +1,329 @@
+package org.apache.maven.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.MavenArtifactRepository;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.io.ModelReader;
+import org.apache.maven.project.artifact.ArtifactWithDependencies;
+import org.apache.maven.settings.Mirror;
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Server;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.StringUtils;
+import org.eclipse.aether.RepositorySystemSession;
+
+/**
+ * @author Benjamin Bentmann
+ */
+@Component( role = RepositorySystem.class )
+public class TestRepositorySystem
+ implements RepositorySystem
+{
+
+ @Requirement
+ private ModelReader modelReader;
+
+ @Requirement
+ private ArtifactFactory artifactFactory;
+
+ public ArtifactRepository buildArtifactRepository( Repository repository )
+ throws InvalidRepositoryException
+ {
+ return new MavenArtifactRepository( repository.getId(), repository.getUrl(), new DefaultRepositoryLayout(),
+ new ArtifactRepositoryPolicy(), new ArtifactRepositoryPolicy() );
+ }
+
+ public Artifact createArtifact( String groupId, String artifactId, String version, String packaging )
+ {
+ return createArtifact( groupId, artifactId, version, null, packaging );
+ }
+
+ public Artifact createArtifact( String groupId, String artifactId, String version, String scope, String type )
+ {
+ return new DefaultArtifact( groupId, artifactId, version, scope, type, null, new TestArtifactHandler( type ) );
+ }
+
+ public ArtifactRepository createArtifactRepository( String id, String url,
+ ArtifactRepositoryLayout repositoryLayout,
+ ArtifactRepositoryPolicy snapshots,
+ ArtifactRepositoryPolicy releases )
+ {
+ return new MavenArtifactRepository( id, url, repositoryLayout, snapshots, releases );
+ }
+
+ public Artifact createArtifactWithClassifier( String groupId, String artifactId, String version, String type,
+ String classifier )
+ {
+ return new DefaultArtifact( groupId, artifactId, version, null, type, classifier,
+ new TestArtifactHandler( type ) );
+ }
+
+ public ArtifactRepository createDefaultLocalRepository()
+ throws InvalidRepositoryException
+ {
+ return createLocalRepository( new File( System.getProperty( "basedir", "" ), "target/local-repo" ).getAbsoluteFile() );
+ }
+
+ public ArtifactRepository createDefaultRemoteRepository()
+ throws InvalidRepositoryException
+ {
+ return new MavenArtifactRepository( DEFAULT_REMOTE_REPO_ID, "file://"
+ + new File( System.getProperty( "basedir", "" ), "src/test/remote-repo" ).toURI().getPath(),
+ new DefaultRepositoryLayout(), new ArtifactRepositoryPolicy(),
+ new ArtifactRepositoryPolicy() );
+ }
+
+ public Artifact createDependencyArtifact( Dependency dependency )
+ {
+ Artifact artifact =
+ new DefaultArtifact( dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion(),
+ dependency.getScope(), dependency.getType(), dependency.getClassifier(),
+ new TestArtifactHandler( dependency.getType() ) );
+
+ if ( Artifact.SCOPE_SYSTEM.equals( dependency.getScope() ) )
+ {
+ artifact.setFile( new File( dependency.getSystemPath() ) );
+ artifact.setResolved( true );
+ }
+
+ return artifact;
+ }
+
+ public ArtifactRepository createLocalRepository( File localRepository )
+ throws InvalidRepositoryException
+ {
+ return new MavenArtifactRepository( DEFAULT_LOCAL_REPO_ID, "file://" + localRepository.toURI().getPath(),
+ new DefaultRepositoryLayout(), new ArtifactRepositoryPolicy(),
+ new ArtifactRepositoryPolicy() );
+ }
+
+ public Artifact createPluginArtifact( Plugin plugin )
+ {
+ VersionRange versionRange;
+ try
+ {
+ String version = plugin.getVersion();
+ if ( StringUtils.isEmpty( version ) )
+ {
+ version = "RELEASE";
+ }
+ versionRange = VersionRange.createFromVersionSpec( version );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ return null;
+ }
+
+ return artifactFactory.createPluginArtifact( plugin.getGroupId(), plugin.getArtifactId(), versionRange );
+ }
+
+ public Artifact createProjectArtifact( String groupId, String artifactId, String version )
+ {
+ return createArtifact( groupId, artifactId, version, "pom" );
+ }
+
+ public List<ArtifactRepository> getEffectiveRepositories( List<ArtifactRepository> repositories )
+ {
+ return repositories;
+ }
+
+ public Mirror getMirror( ArtifactRepository repository, List<Mirror> mirrors )
+ {
+ return null;
+ }
+
+ public void injectAuthentication( List<ArtifactRepository> repositories, List<Server> servers )
+ {
+ }
+
+ public void injectMirror( List<ArtifactRepository> repositories, List<Mirror> mirrors )
+ {
+ }
+
+ public void injectProxy( List<ArtifactRepository> repositories, List<Proxy> proxies )
+ {
+ }
+
+ public void publish( ArtifactRepository repository, File source, String remotePath,
+ ArtifactTransferListener transferListener )
+ throws ArtifactTransferFailedException
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ public ArtifactResolutionResult resolve( ArtifactResolutionRequest request )
+ {
+ ArtifactResolutionResult result = new ArtifactResolutionResult();
+
+ if ( request.isResolveRoot() )
+ {
+ try
+ {
+ resolve( request.getArtifact(), request );
+ result.addArtifact( request.getArtifact() );
+ }
+ catch ( IOException e )
+ {
+ result.addMissingArtifact( request.getArtifact() );
+ }
+ }
+
+ if ( request.isResolveTransitively() )
+ {
+ Map<String, Artifact> artifacts = new LinkedHashMap<String, Artifact>();
+
+ if ( request.getArtifactDependencies() != null )
+ {
+ for ( Artifact artifact : request.getArtifactDependencies() )
+ {
+ artifacts.put( artifact.getDependencyConflictId(), artifact );
+ }
+ }
+
+ List<Dependency> dependencies = new ArrayList<Dependency>();
+ if ( request.getArtifact() instanceof ArtifactWithDependencies )
+ {
+ dependencies = ( (ArtifactWithDependencies) request.getArtifact() ).getDependencies();
+ }
+ else
+ {
+ Artifact pomArtifact =
+ createProjectArtifact( request.getArtifact().getGroupId(), request.getArtifact().getArtifactId(),
+ request.getArtifact().getVersion() );
+ File pomFile =
+ new File( request.getLocalRepository().getBasedir(),
+ request.getLocalRepository().pathOf( pomArtifact ) );
+
+ try
+ {
+ Model model = modelReader.read( pomFile, null );
+
+ dependencies = model.getDependencies();
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ }
+ }
+
+ for ( Dependency dependency : dependencies )
+ {
+ Artifact artifact = createDependencyArtifact( dependency );
+ if ( !artifacts.containsKey( artifact.getDependencyConflictId() ) )
+ {
+ artifacts.put( artifact.getDependencyConflictId(), artifact );
+ }
+ }
+
+ for ( Artifact artifact : artifacts.values() )
+ {
+ try
+ {
+ resolve( artifact, request );
+ result.addArtifact( artifact );
+ }
+ catch ( IOException e )
+ {
+ result.addMissingArtifact( artifact );
+ }
+ }
+ }
+
+ return result;
+ }
+
+ private void resolve( Artifact artifact, ArtifactResolutionRequest request )
+ throws IOException
+ {
+ if ( Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) )
+ {
+ return;
+ }
+
+ ArtifactRepository localRepo = request.getLocalRepository();
+
+ File localFile = new File( localRepo.getBasedir(), localRepo.pathOf( artifact ) );
+
+ artifact.setFile( localFile );
+
+ if ( !localFile.exists() )
+ {
+ if ( request.getRemoteRepositories().isEmpty() )
+ {
+ throw new IOException( localFile + " does not exist and no remote repositories are configured" );
+ }
+
+ ArtifactRepository remoteRepo = request.getRemoteRepositories().get( 0 );
+
+ File remoteFile = new File( remoteRepo.getBasedir(), remoteRepo.pathOf( artifact ) );
+
+ FileUtils.copyFile( remoteFile, localFile );
+ }
+
+ artifact.setResolved( true );
+ }
+
+ public void retrieve( ArtifactRepository repository, File destination, String remotePath,
+ ArtifactTransferListener transferListener )
+ throws ArtifactTransferFailedException, ArtifactDoesNotExistException
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void injectMirror( RepositorySystemSession session, List<ArtifactRepository> repositories )
+ {
+ }
+
+ public void injectProxy( RepositorySystemSession session, List<ArtifactRepository> repositories )
+ {
+ }
+
+ public void injectAuthentication( RepositorySystemSession session, List<ArtifactRepository> repositories )
+ {
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformationTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformationTest.java
new file mode 100644
index 00000000..71be9284
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformationTest.java
@@ -0,0 +1,81 @@
+package org.apache.maven.rtinfo.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.rtinfo.RuntimeInformation;
+import org.codehaus.plexus.PlexusTestCase;
+
+public class DefaultRuntimeInformationTest
+ extends PlexusTestCase
+{
+
+ public void testGetMavenVersion()
+ throws Exception
+ {
+ RuntimeInformation rtInfo = lookup( RuntimeInformation.class );
+
+ String mavenVersion = rtInfo.getMavenVersion();
+ assertNotNull( mavenVersion );
+ assertTrue( mavenVersion.length() > 0 );
+ }
+
+ public void testIsMavenVersion()
+ throws Exception
+ {
+ RuntimeInformation rtInfo = lookup( RuntimeInformation.class );
+
+ assertTrue( rtInfo.isMavenVersion( "2.0" ) );
+ assertFalse( rtInfo.isMavenVersion( "9.9" ) );
+
+ assertTrue( rtInfo.isMavenVersion( "[2.0.11,2.1.0),[3.0,)" ) );
+ assertFalse( rtInfo.isMavenVersion( "[9.0,)" ) );
+
+ try
+ {
+ rtInfo.isMavenVersion( "[3.0," );
+ fail( "Bad version range wasn't rejected" );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ assertTrue( true );
+ }
+
+ try
+ {
+ rtInfo.isMavenVersion( "" );
+ fail( "Bad version range wasn't rejected" );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ assertTrue( true );
+ }
+
+ try
+ {
+ rtInfo.isMavenVersion( null );
+ fail( "Bad version range wasn't rejected" );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ assertTrue( true );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java
new file mode 100644
index 00000000..5c166868
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java
@@ -0,0 +1,159 @@
+package org.apache.maven.settings;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.model.Profile;
+import org.apache.maven.project.DefaultProjectBuilder;
+import org.apache.maven.project.DefaultProjectBuildingRequest;
+import org.apache.maven.project.ProjectBuilder;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.project.harness.PomTestWrapper;
+import org.apache.maven.repository.RepositorySystem;
+import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
+import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
+import org.eclipse.aether.repository.LocalRepository;
+
+public class PomConstructionWithSettingsTest
+ extends PlexusTestCase
+{
+ private static final String BASE_DIR = "src/test";
+
+ private static final String BASE_POM_DIR = BASE_DIR + "/resources-settings";
+
+ private DefaultProjectBuilder projectBuilder;
+
+ private RepositorySystem repositorySystem;
+
+ private File testDirectory;
+
+ @Override
+ protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration )
+ {
+ super.customizeContainerConfiguration( containerConfiguration );
+ containerConfiguration.setAutoWiring( true );
+ containerConfiguration.setClassPathScanning( PlexusConstants.SCANNING_INDEX );
+ }
+
+ protected void setUp()
+ throws Exception
+ {
+ testDirectory = new File( getBasedir(), BASE_POM_DIR );
+ projectBuilder = (DefaultProjectBuilder) lookup( ProjectBuilder.class );
+ repositorySystem = lookup( RepositorySystem.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ projectBuilder = null;
+
+ super.tearDown();
+ }
+
+ public void testSettingsNoPom() throws Exception
+ {
+ PomTestWrapper pom = buildPom( "settings-no-pom" );
+ assertEquals( "local-profile-prop-value", pom.getValue( "properties/local-profile-prop" ) );
+ }
+
+ /**MNG-4107 */
+ public void testPomAndSettingsInterpolation() throws Exception
+ {
+ PomTestWrapper pom = buildPom( "test-pom-and-settings-interpolation" );
+ assertEquals( "applied", pom.getValue( "properties/settingsProfile" ) );
+ assertEquals( "applied", pom.getValue( "properties/pomProfile" ) );
+ assertEquals( "settings", pom.getValue( "properties/pomVsSettings" ) );
+ assertEquals( "settings", pom.getValue( "properties/pomVsSettingsInterpolated" ) );
+ }
+
+ /**MNG-4107 */
+ public void testRepositories() throws Exception
+ {
+ PomTestWrapper pom = buildPom( "repositories" );
+ assertEquals( "maven-core-it-0", pom.getValue( "repositories[1]/id" ) );
+ }
+
+ private PomTestWrapper buildPom( String pomPath )
+ throws Exception
+ {
+ File pomFile = new File( testDirectory + File.separator + pomPath, "pom.xml" );
+ File settingsFile = new File( testDirectory + File.separator + pomPath, "settings.xml" );
+ Settings settings = readSettingsFile( settingsFile );
+
+ ProjectBuildingRequest config = new DefaultProjectBuildingRequest();
+
+ for ( org.apache.maven.settings.Profile rawProfile : settings.getProfiles() )
+ {
+ Profile profile = SettingsUtils.convertFromSettingsProfile( rawProfile );
+ config.addProfile( profile );
+ }
+
+ String localRepoUrl =
+ System.getProperty( "maven.repo.local", System.getProperty( "user.home" ) + "/.m2/repository" );
+ localRepoUrl = "file://" + localRepoUrl;
+ config.setLocalRepository( repositorySystem.createArtifactRepository( "local", localRepoUrl,
+ new DefaultRepositoryLayout(), null, null ) );
+ config.setActiveProfileIds( settings.getActiveProfiles() );
+
+ DefaultRepositorySystemSession repoSession = MavenRepositorySystemUtils.newSession();
+ LocalRepository localRepo = new LocalRepository( config.getLocalRepository().getBasedir() );
+ repoSession.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( repoSession, localRepo ) );
+ config.setRepositorySession( repoSession );
+
+ return new PomTestWrapper( pomFile, projectBuilder.build( pomFile, config ).getProject() );
+ }
+
+ private static Settings readSettingsFile( File settingsFile )
+ throws IOException, XmlPullParserException
+ {
+ Settings settings = null;
+
+ Reader reader = null;
+
+ try
+ {
+ reader = ReaderFactory.newXmlReader( settingsFile );
+
+ SettingsXpp3Reader modelReader = new SettingsXpp3Reader();
+
+ settings = modelReader.read( reader );
+ }
+ finally
+ {
+ IOUtil.close( reader );
+ }
+
+ return settings;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java
new file mode 100644
index 00000000..f2231b3f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java
@@ -0,0 +1,126 @@
+package org.apache.maven.settings;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.Random;
+
+public class SettingsUtilsTest
+ extends TestCase
+{
+
+ public void testShouldAppendRecessivePluginGroupIds()
+ {
+ Settings dominant = new Settings();
+ dominant.addPluginGroup( "org.apache.maven.plugins" );
+ dominant.addPluginGroup( "org.codehaus.modello" );
+
+ Settings recessive = new Settings();
+ recessive.addPluginGroup( "org.codehaus.plexus" );
+
+ SettingsUtils.merge( dominant, recessive, Settings.GLOBAL_LEVEL );
+
+ List<String> pluginGroups = dominant.getPluginGroups();
+
+ assertNotNull( pluginGroups );
+ assertEquals( 3, pluginGroups.size() );
+ assertEquals( "org.apache.maven.plugins", pluginGroups.get( 0 ) );
+ assertEquals( "org.codehaus.modello", pluginGroups.get( 1 ) );
+ assertEquals( "org.codehaus.plexus", pluginGroups.get( 2 ) );
+ }
+
+ public void testRoundTripProfiles()
+ {
+ Random entropy = new Random();
+ Profile p = new Profile();
+ p.setId( "id" + Long.toHexString( entropy.nextLong() ) );
+ Activation a = new Activation();
+ a.setActiveByDefault( entropy.nextBoolean() );
+ a.setJdk( "jdk" + Long.toHexString( entropy.nextLong() ) );
+ ActivationFile af = new ActivationFile();
+ af.setExists( "exists" + Long.toHexString( entropy.nextLong() ) );
+ af.setMissing( "missing" + Long.toHexString( entropy.nextLong() ) );
+ a.setFile( af );
+ ActivationProperty ap = new ActivationProperty();
+ ap.setName( "name" + Long.toHexString( entropy.nextLong() ) );
+ ap.setValue( "value" + Long.toHexString( entropy.nextLong() ) );
+ a.setProperty( ap );
+ ActivationOS ao = new ActivationOS();
+ ao.setArch( "arch" + Long.toHexString( entropy.nextLong() ) );
+ ao.setFamily( "family" + Long.toHexString( entropy.nextLong() ) );
+ ao.setName( "name" + Long.toHexString( entropy.nextLong() ) );
+ ao.setVersion( "version" + Long.toHexString( entropy.nextLong() ) );
+ a.setOs( ao );
+ p.setActivation( a );
+ Properties props = new Properties();
+ int count = entropy.nextInt( 10 );
+ for ( int i = 0; i < count; i++ )
+ {
+ props.setProperty( "name" + Long.toHexString( entropy.nextLong() ),
+ "value" + Long.toHexString( entropy.nextLong() ) );
+ }
+ p.setProperties( props );
+ count = entropy.nextInt( 3 );
+ List<Repository> repos = new ArrayList<Repository>();
+ for ( int i = 0; i < count; i++ )
+ {
+ Repository r = new Repository();
+ r.setId( "id" + Long.toHexString( entropy.nextLong() ) );
+ r.setName( "name" + Long.toHexString( entropy.nextLong() ) );
+ r.setUrl( "url" + Long.toHexString( entropy.nextLong() ) );
+ repos.add( r );
+ }
+ p.setRepositories( repos );
+ count = entropy.nextInt( 3 );
+ repos = new ArrayList<Repository>();
+ for ( int i = 0; i < count; i++ )
+ {
+ Repository r = new Repository();
+ r.setId( "id" + Long.toHexString( entropy.nextLong() ) );
+ r.setName( "name" + Long.toHexString( entropy.nextLong() ) );
+ r.setUrl( "url" + Long.toHexString( entropy.nextLong() ) );
+ repos.add( r );
+ }
+ p.setPluginRepositories( repos );
+
+ Profile clone = SettingsUtils.convertToSettingsProfile( SettingsUtils.convertFromSettingsProfile( p ) );
+
+ assertEquals( p.getId(), clone.getId() );
+ assertEquals( p.getActivation().getJdk(), clone.getActivation().getJdk() );
+ assertEquals( p.getActivation().getFile().getExists(), clone.getActivation().getFile().getExists() );
+ assertEquals( p.getActivation().getFile().getMissing(), clone.getActivation().getFile().getMissing() );
+ assertEquals( p.getActivation().getProperty().getName(), clone.getActivation().getProperty().getName() );
+ assertEquals( p.getActivation().getProperty().getValue(), clone.getActivation().getProperty().getValue() );
+ assertEquals( p.getActivation().getOs().getArch(), clone.getActivation().getOs().getArch() );
+ assertEquals( p.getActivation().getOs().getFamily(), clone.getActivation().getOs().getFamily() );
+ assertEquals( p.getActivation().getOs().getName(), clone.getActivation().getOs().getName() );
+ assertEquals( p.getActivation().getOs().getVersion(), clone.getActivation().getOs().getVersion() );
+ assertEquals( p.getProperties(), clone.getProperties() );
+ assertEquals( p.getRepositories().size(), clone.getRepositories().size() );
+ // TODO deep compare the lists
+ assertEquals( p.getPluginRepositories().size(), clone.getPluginRepositories().size() );
+ // TODO deep compare the lists
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivateTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivateTest.java
new file mode 100644
index 00000000..28a13bb2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivateTest.java
@@ -0,0 +1,166 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.toolchain.model.ToolchainModel;
+import org.codehaus.plexus.logging.Logger;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+public class DefaultToolchainManagerPrivateTest
+{
+ // Mocks to inject into toolchainManager
+ @Mock
+ private Logger logger;
+
+ @InjectMocks
+ private DefaultToolchainManagerPrivate toolchainManager;
+
+ @Mock
+ private ToolchainFactory toolchainFactory_basicType;
+
+ @Mock
+ private ToolchainFactory toolchainFactory_rareType;
+
+ @Before
+ public void setUp()
+ {
+ toolchainManager = new DefaultToolchainManagerPrivate();
+
+ MockitoAnnotations.initMocks( this );
+
+ toolchainManager.factories = new HashMap<String, ToolchainFactory>();
+ toolchainManager.factories.put( "basic", toolchainFactory_basicType );
+ toolchainManager.factories.put( "rare", toolchainFactory_rareType );
+ }
+
+ @Test
+ public void testToolchainsForAvailableType()
+ throws Exception
+ {
+ // prepare
+ MavenSession session = mock( MavenSession.class );
+ MavenExecutionRequest req = new DefaultMavenExecutionRequest();
+ when( session.getRequest() ).thenReturn( req );
+
+ ToolchainPrivate basicToolchain = mock( ToolchainPrivate.class );
+ when( toolchainFactory_basicType.createDefaultToolchain() ).thenReturn( basicToolchain );
+ ToolchainPrivate rareToolchain = mock( ToolchainPrivate.class );
+ when( toolchainFactory_rareType.createDefaultToolchain() ).thenReturn( rareToolchain );
+
+ // execute
+ ToolchainPrivate[] toolchains = toolchainManager.getToolchainsForType( "basic", session );
+
+ // verify
+ verify( logger, never() ).error( anyString() );
+ assertEquals( 1, toolchains.length );
+ }
+
+ @Test
+ public void testToolchainsForUnknownType()
+ throws Exception
+ {
+ // prepare
+ MavenSession session = mock( MavenSession.class );
+ MavenExecutionRequest req = new DefaultMavenExecutionRequest();
+ when( session.getRequest() ).thenReturn( req );
+
+ ToolchainPrivate basicToolchain = mock( ToolchainPrivate.class );
+ when( toolchainFactory_basicType.createDefaultToolchain() ).thenReturn( basicToolchain );
+ ToolchainPrivate rareToolchain = mock( ToolchainPrivate.class );
+ when( toolchainFactory_rareType.createDefaultToolchain() ).thenReturn( rareToolchain );
+
+ // execute
+ ToolchainPrivate[] toolchains = toolchainManager.getToolchainsForType( "unknown", session );
+
+ // verify
+ verify( logger ).error( "Missing toolchain factory for type: unknown. Possibly caused by misconfigured project." );
+ assertEquals( 0, toolchains.length );
+ }
+
+ @Test
+ public void testToolchainsForConfiguredType()
+ throws Exception
+ {
+ // prepare
+ MavenSession session = mock( MavenSession.class );
+ MavenExecutionRequest req = new DefaultMavenExecutionRequest();
+ when( session.getRequest() ).thenReturn( req );
+ Map<String, List<ToolchainModel>> groupedToolchains = new HashMap<String, List<ToolchainModel>>();
+ req.setToolchains( groupedToolchains );
+
+ List<ToolchainModel> basicToolchains = new ArrayList<ToolchainModel>();
+ ToolchainModel basicToolchainModel = new ToolchainModel();
+ basicToolchainModel.setType( "basic" );
+ basicToolchains.add( basicToolchainModel );
+ basicToolchains.add( basicToolchainModel );
+ groupedToolchains.put( "basic", basicToolchains );
+
+ List<ToolchainModel> rareToolchains = new ArrayList<ToolchainModel>();
+ ToolchainModel rareToolchainModel = new ToolchainModel();
+ rareToolchainModel.setType( "rare" );
+ rareToolchains.add( rareToolchainModel );
+ groupedToolchains.put( "rare", rareToolchains );
+
+ // execute
+ ToolchainPrivate[] toolchains = toolchainManager.getToolchainsForType( "basic", session );
+
+ // verify
+ verify( logger, never() ).error( anyString() );
+ assertEquals( 2, toolchains.length );
+ }
+
+ @SuppressWarnings( "unchecked" )
+ @Test( expected = MisconfiguredToolchainException.class )
+ public void testMisconfiguredToolchain()
+ throws Exception
+ {
+ // prepare
+ MavenSession session = mock( MavenSession.class );
+ MavenExecutionRequest req = new DefaultMavenExecutionRequest();
+ when( session.getRequest() ).thenReturn( req );
+ when(toolchainFactory_basicType.createDefaultToolchain()).thenThrow( MisconfiguredToolchainException.class );
+
+ // execute
+ toolchainManager.getToolchainsForType( "basic", session );
+
+ // verify
+ fail( "Should exit with a MisconfiguredToolchainException" );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerTest.java
new file mode 100644
index 00000000..d464502f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerTest.java
@@ -0,0 +1,153 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.anyMap;
+import static org.mockito.Matchers.isA;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.toolchain.model.ToolchainModel;
+import org.codehaus.plexus.logging.Logger;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+public class DefaultToolchainManagerTest
+{
+ // Mocks to inject into toolchainManager
+ @Mock
+ private Logger logger;
+
+ @InjectMocks
+ private DefaultToolchainManager toolchainManager;
+
+ @Mock
+ private ToolchainFactory toolchainFactory_basicType;
+
+ @Mock
+ private ToolchainFactory toolchainFactory_rareType;
+
+ @Before
+ public void onSetup() throws Exception
+ {
+ toolchainManager = new DefaultToolchainManager();
+
+ MockitoAnnotations.initMocks( this );
+
+ toolchainManager.factories = new HashMap<String, ToolchainFactory>();
+ toolchainManager.factories.put( "basic", toolchainFactory_basicType );
+ toolchainManager.factories.put( "rare", toolchainFactory_rareType );
+ }
+
+ @Test
+ public void testNoModels()
+ {
+ MavenSession session = mock( MavenSession.class );
+ MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
+ when( session.getRequest() ).thenReturn( executionRequest );
+
+ List<Toolchain> toolchains = toolchainManager.getToolchains( session, "unknown", null );
+
+ assertEquals( 0, toolchains.size() );
+ }
+
+ @Test
+ public void testModelNoFactory()
+ {
+ MavenSession session = mock( MavenSession.class );
+ MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
+ Map<String, List<ToolchainModel>> toolchainModels = new HashMap<String, List<ToolchainModel>>();
+ toolchainModels.put( "unknown", Collections.singletonList( new ToolchainModel() ) );
+ executionRequest.setToolchains( toolchainModels );
+ when( session.getRequest() ).thenReturn( executionRequest );
+
+ List<Toolchain> toolchains = toolchainManager.getToolchains( session, "unknown", null );
+
+ assertEquals( 0, toolchains.size() );
+ verify( logger ).error( "Missing toolchain factory for type: unknown. Possibly caused by misconfigured project." );
+ }
+
+ @Test
+ public void testModelAndFactory()
+ {
+ MavenSession session = mock( MavenSession.class );
+ MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
+ Map<String, List<ToolchainModel>> toolchainModels = new HashMap<String, List<ToolchainModel>>();
+ toolchainModels.put( "basic", Arrays.asList( new ToolchainModel(), new ToolchainModel() ) );
+ toolchainModels.put( "rare", Collections.singletonList( new ToolchainModel() ) );
+ executionRequest.setToolchains( toolchainModels );
+ when( session.getRequest() ).thenReturn( executionRequest );
+
+ List<Toolchain> toolchains = toolchainManager.getToolchains( session, "rare", null );
+
+ assertEquals( 1, toolchains.size() );
+ }
+
+ @Test
+ public void testModelsAndFactory()
+ {
+ MavenSession session = mock( MavenSession.class );
+ MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
+ Map<String, List<ToolchainModel>> toolchainModels = new HashMap<String, List<ToolchainModel>>();
+ toolchainModels.put( "basic", Arrays.asList( new ToolchainModel(), new ToolchainModel() ) );
+ toolchainModels.put( "rare", Collections.singletonList( new ToolchainModel() ) );
+ executionRequest.setToolchains( toolchainModels );
+ when( session.getRequest() ).thenReturn( executionRequest );
+
+ List<Toolchain> toolchains = toolchainManager.getToolchains( session, "basic", null );
+
+ assertEquals( 2, toolchains.size() );
+ }
+
+ @Test
+ public void testRequirements()
+ throws Exception
+ {
+ MavenSession session = mock( MavenSession.class );
+ MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
+ Map<String, List<ToolchainModel>> toolchainModels = new HashMap<String, List<ToolchainModel>>();
+ toolchainModels.put( "basic", Arrays.asList( new ToolchainModel(), new ToolchainModel() ) );
+ toolchainModels.put( "rare", Collections.singletonList( new ToolchainModel() ) );
+ executionRequest.setToolchains( toolchainModels );
+ when( session.getRequest() ).thenReturn( executionRequest );
+ ToolchainPrivate basicPrivate = mock( ToolchainPrivate.class );
+ when( basicPrivate.matchesRequirements( anyMap() ) ).thenReturn( false ).thenReturn( true );
+ when( toolchainFactory_basicType.createToolchain( isA( ToolchainModel.class ) ) ).thenReturn( basicPrivate );
+
+ List<Toolchain> toolchains =
+ toolchainManager.getToolchains( session, "basic", Collections.singletonMap( "key", "value" ) );
+
+ assertEquals( 1, toolchains.size() );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainTest.java
new file mode 100644
index 00000000..3bba8177
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainTest.java
@@ -0,0 +1,158 @@
+package org.apache.maven.toolchain;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.verify;
+
+import java.io.InputStream;
+import java.util.Collections;
+
+import org.apache.maven.toolchain.java.DefaultJavaToolChain;
+import org.apache.maven.toolchain.model.PersistedToolchains;
+import org.apache.maven.toolchain.model.ToolchainModel;
+import org.apache.maven.toolchain.model.io.xpp3.MavenToolchainsXpp3Reader;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.IOUtil;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+public class DefaultToolchainTest
+{
+ @Mock
+ private Logger logger;
+
+ private MavenToolchainsXpp3Reader reader = new MavenToolchainsXpp3Reader();
+
+ @Before
+ public void setUp() throws Exception
+ {
+ MockitoAnnotations.initMocks( this );
+ }
+
+ private DefaultToolchain newDefaultToolchain( ToolchainModel model )
+ {
+ return new DefaultToolchain( model, logger )
+ {
+ @Override
+ public String findTool( String toolName )
+ {
+ return null;
+ }
+ };
+ }
+
+ private DefaultToolchain newDefaultToolchain( ToolchainModel model, String type )
+ {
+ return new DefaultToolchain( model, type, logger )
+ {
+ @Override
+ public String findTool( String toolName )
+ {
+ return null;
+ }
+ };
+ }
+
+ @Test
+ public void testGetModel()
+ {
+ ToolchainModel model = new ToolchainModel();
+ DefaultToolchain toolchain = newDefaultToolchain( model );
+ assertEquals( model, toolchain.getModel() );
+ }
+
+ @Test
+ public void testGetType()
+ {
+ ToolchainModel model = new ToolchainModel();
+ DefaultToolchain toolchain = newDefaultToolchain( model, "TYPE" );
+ assertEquals( "TYPE", toolchain.getType() );
+
+ model.setType( "MODEL_TYPE" );
+ toolchain = newDefaultToolchain( model );
+ assertEquals( "MODEL_TYPE", toolchain.getType() );
+ }
+
+ @Test
+ public void testGetLogger()
+ {
+ ToolchainModel model = new ToolchainModel();
+ DefaultToolchain toolchain = newDefaultToolchain( model );
+ assertEquals( logger, toolchain.getLog() );
+ }
+
+ @Test
+ public void testMissingRequirementProperty()
+ {
+ ToolchainModel model = new ToolchainModel();
+ model.setType( "TYPE" );
+ DefaultToolchain toolchain = newDefaultToolchain( model );
+
+ assertFalse( toolchain.matchesRequirements( Collections.singletonMap( "name", "John Doe" ) ) );
+ verify( logger ).debug( "Toolchain type:TYPE{} is missing required property: name" );
+ }
+
+
+ @Test
+ public void testNonMatchingRequirementProperty()
+ {
+ ToolchainModel model = new ToolchainModel();
+ model.setType( "TYPE" );
+ DefaultToolchain toolchain = newDefaultToolchain( model );
+ toolchain.addProvideToken( "name", RequirementMatcherFactory.createExactMatcher( "Jane Doe" ) );
+
+ assertFalse( toolchain.matchesRequirements( Collections.singletonMap( "name", "John Doe" ) ) );
+ verify( logger ).debug( "Toolchain type:TYPE{name = Jane Doe} doesn't match required property: name" );
+ }
+
+
+ @Test
+ public void testEquals() throws Exception
+ {
+ InputStream jdksIS = null;
+ InputStream jdksExtraIS = null;
+ try
+ {
+ jdksIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
+ jdksExtraIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks-extra.xml" );
+
+ PersistedToolchains jdks = reader.read( jdksIS );
+ PersistedToolchains jdksExtra = reader.read( jdksExtraIS );
+
+ DefaultToolchain tc1 = new DefaultJavaToolChain( jdks.getToolchains().get( 0 ), null );
+ DefaultToolchain tc2 = new DefaultJavaToolChain( jdksExtra.getToolchains().get( 0 ), null );
+
+ assertTrue( tc1.equals( tc1 ) );
+ assertFalse( tc1.equals( tc2 ) );
+ assertFalse( tc2.equals( tc1 ) );
+ assertTrue( tc2.equals( tc2 ) );
+ }
+ finally
+ {
+ IOUtil.close( jdksIS );
+ IOUtil.close( jdksExtraIS );
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/RequirementMatcherFactoryTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/RequirementMatcherFactoryTest.java
new file mode 100644
index 00000000..c102b11f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/RequirementMatcherFactoryTest.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.maven.toolchain;
+
+import junit.framework.TestCase;
+
+/**
+ *
+ * @author mkleint
+ */
+public class RequirementMatcherFactoryTest
+ extends TestCase
+{
+
+ public RequirementMatcherFactoryTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * Test of createExactMatcher method, of class RequirementMatcherFactory.
+ */
+ public void testCreateExactMatcher()
+ {
+ RequirementMatcher matcher;
+ matcher = RequirementMatcherFactory.createExactMatcher( "foo" );
+ assertFalse( matcher.matches( "bar" ) );
+ assertFalse( matcher.matches( "foobar" ) );
+ assertFalse( matcher.matches( "foob" ) );
+ assertTrue( matcher.matches( "foo" ) );
+ }
+
+ /**
+ * Test of createVersionMatcher method, of class RequirementMatcherFactory.
+ */
+ public void testCreateVersionMatcher()
+ {
+ RequirementMatcher matcher;
+ matcher = RequirementMatcherFactory.createVersionMatcher( "1.5.2" );
+ assertFalse( matcher.matches( "1.5" ) );
+ assertTrue( matcher.matches( "1.5.2" ) );
+ assertFalse( matcher.matches( "[1.4,1.5)" ) );
+ assertFalse( matcher.matches( "[1.5,1.5.2)" ) );
+ assertFalse( matcher.matches( "(1.5.2,1.6)" ) );
+ assertTrue( matcher.matches( "(1.4,1.5.2]" ) );
+ assertTrue( matcher.matches( "(1.5,)" ) );
+ assertEquals( "1.5.2", matcher.toString() );
+
+ // Ensure it is not printed as 1.5.0
+ matcher = RequirementMatcherFactory.createVersionMatcher( "1.5" );
+ assertEquals( "1.5", matcher.toString() );
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/building/DefaultToolchainsBuilderTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/building/DefaultToolchainsBuilderTest.java
new file mode 100644
index 00000000..80fca094
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/building/DefaultToolchainsBuilderTest.java
@@ -0,0 +1,185 @@
+package org.apache.maven.toolchain.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyMap;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.maven.building.StringSource;
+import org.apache.maven.toolchain.io.ToolchainsParseException;
+import org.apache.maven.toolchain.io.ToolchainsReader;
+import org.apache.maven.toolchain.model.PersistedToolchains;
+import org.apache.maven.toolchain.model.ToolchainModel;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+public class DefaultToolchainsBuilderTest
+{
+ private static final String LS = System.getProperty( "line.separator" );
+
+ @Mock
+ private ToolchainsReader toolchainsReader;
+
+ @InjectMocks
+ private DefaultToolchainsBuilder toolchainBuilder = new DefaultToolchainsBuilder();
+
+ @Before
+ public void onSetup()
+ {
+ MockitoAnnotations.initMocks( this );
+ }
+
+ @Test
+ public void testBuildEmptyRequest()
+ throws Exception
+ {
+ ToolchainsBuildingRequest request = new DefaultToolchainsBuildingRequest();
+ ToolchainsBuildingResult result = toolchainBuilder.build( request );
+ assertNotNull( result.getEffectiveToolchains() );
+ assertNotNull( result.getProblems() );
+ assertEquals( 0, result.getProblems().size() );
+ }
+
+ @Test
+ public void testBuildRequestWithUserToolchains()
+ throws Exception
+ {
+ ToolchainsBuildingRequest request = new DefaultToolchainsBuildingRequest();
+ request.setUserToolchainsSource( new StringSource( "" ) );
+
+ PersistedToolchains userResult = new PersistedToolchains();
+ ToolchainModel toolchain = new ToolchainModel();
+ toolchain.setType( "TYPE" );
+ toolchain.addProvide( "key", "user_value" );
+ userResult.addToolchain( toolchain );
+ when( toolchainsReader.read( any( InputStream.class ), anyMap() ) ).thenReturn( userResult );
+
+ ToolchainsBuildingResult result = toolchainBuilder.build( request );
+ assertNotNull( result.getEffectiveToolchains() );
+ assertEquals( 1, result.getEffectiveToolchains().getToolchains().size() );
+ assertEquals( "TYPE", result.getEffectiveToolchains().getToolchains().get(0).getType() );
+ assertEquals( "user_value", result.getEffectiveToolchains().getToolchains().get(0).getProvides().getProperty( "key" ) );
+ assertNotNull( result.getProblems() );
+ assertEquals( 0, result.getProblems().size() );
+ }
+
+ @Test
+ public void testBuildRequestWithGlobalToolchains()
+ throws Exception
+ {
+ ToolchainsBuildingRequest request = new DefaultToolchainsBuildingRequest();
+ request.setGlobalToolchainsSource( new StringSource( "" ) );
+
+ PersistedToolchains globalResult = new PersistedToolchains();
+ ToolchainModel toolchain = new ToolchainModel();
+ toolchain.setType( "TYPE" );
+ toolchain.addProvide( "key", "global_value" );
+ globalResult.addToolchain( toolchain );
+ when( toolchainsReader.read( any( InputStream.class ), anyMap() ) ).thenReturn( globalResult );
+
+ ToolchainsBuildingResult result = toolchainBuilder.build( request );
+ assertNotNull( result.getEffectiveToolchains() );
+ assertEquals( 1, result.getEffectiveToolchains().getToolchains().size() );
+ assertEquals( "TYPE", result.getEffectiveToolchains().getToolchains().get(0).getType() );
+ assertEquals( "global_value", result.getEffectiveToolchains().getToolchains().get(0).getProvides().getProperty( "key" ) );
+ assertNotNull( result.getProblems() );
+ assertEquals( 0, result.getProblems().size() );
+ }
+
+ @Test
+ public void testBuildRequestWithBothToolchains()
+ throws Exception
+ {
+ ToolchainsBuildingRequest request = new DefaultToolchainsBuildingRequest();
+ request.setGlobalToolchainsSource( new StringSource( "" ) );
+ request.setUserToolchainsSource( new StringSource( "" ) );
+
+ PersistedToolchains userResult = new PersistedToolchains();
+ ToolchainModel userToolchain = new ToolchainModel();
+ userToolchain.setType( "TYPE" );
+ userToolchain.addProvide( "key", "user_value" );
+ userResult.addToolchain( userToolchain );
+
+ PersistedToolchains globalResult = new PersistedToolchains();
+ ToolchainModel globalToolchain = new ToolchainModel();
+ globalToolchain.setType( "TYPE" );
+ globalToolchain.addProvide( "key", "global_value" );
+ globalResult.addToolchain( globalToolchain );
+ when( toolchainsReader.read( any( InputStream.class ), anyMap() ) ).thenReturn( globalResult ).thenReturn( userResult );
+
+ ToolchainsBuildingResult result = toolchainBuilder.build( request );
+ assertNotNull( result.getEffectiveToolchains() );
+ assertEquals( 2, result.getEffectiveToolchains().getToolchains().size() );
+ assertEquals( "TYPE", result.getEffectiveToolchains().getToolchains().get(0).getType() );
+ assertEquals( "user_value", result.getEffectiveToolchains().getToolchains().get(0).getProvides().getProperty( "key" ) );
+ assertEquals( "TYPE", result.getEffectiveToolchains().getToolchains().get(1).getType() );
+ assertEquals( "global_value", result.getEffectiveToolchains().getToolchains().get(1).getProvides().getProperty( "key" ) );
+ assertNotNull( result.getProblems() );
+ assertEquals( 0, result.getProblems().size() );
+ }
+
+ @Test
+ public void testStrictToolchainsParseException() throws Exception
+ {
+ ToolchainsBuildingRequest request = new DefaultToolchainsBuildingRequest();
+ request.setGlobalToolchainsSource( new StringSource( "" ) );
+ ToolchainsParseException parseException = new ToolchainsParseException( "MESSAGE", 4, 2 );
+ when( toolchainsReader.read( any( InputStream.class ), anyMap() ) ).thenThrow( parseException );
+
+ try
+ {
+ toolchainBuilder.build( request );
+ }
+ catch ( ToolchainsBuildingException e )
+ {
+ assertEquals( "1 problem was encountered while building the effective toolchains" + LS +
+ "[FATAL] Non-parseable toolchains (memory): MESSAGE @ line 4, column 2" + LS, e.getMessage() );
+ }
+ }
+
+ @Test
+ public void testIOException() throws Exception
+ {
+ ToolchainsBuildingRequest request = new DefaultToolchainsBuildingRequest();
+ request.setGlobalToolchainsSource( new StringSource( "", "LOCATION" ) );
+ IOException ioException = new IOException( "MESSAGE" );
+ when( toolchainsReader.read( any( InputStream.class ), anyMap() ) ).thenThrow( ioException );
+
+ try
+ {
+ toolchainBuilder.build( request );
+ }
+ catch ( ToolchainsBuildingException e )
+ {
+ assertEquals( "1 problem was encountered while building the effective toolchains" + LS +
+ "[FATAL] Non-readable toolchains LOCATION: MESSAGE" + LS, e.getMessage() );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/building/ToolchainsBuildingExceptionTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/building/ToolchainsBuildingExceptionTest.java
new file mode 100644
index 00000000..bf745c2a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/building/ToolchainsBuildingExceptionTest.java
@@ -0,0 +1,73 @@
+package org.apache.maven.toolchain.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Collections;
+
+import org.apache.maven.building.Problem;
+import org.apache.maven.building.ProblemCollector;
+import org.apache.maven.building.ProblemCollectorFactory;
+import org.junit.Test;
+
+public class ToolchainsBuildingExceptionTest
+{
+ private static final String LS = System.getProperty( "line.separator" );
+
+ @Test
+ public void testNoProblems()
+ {
+ ToolchainsBuildingException e = new ToolchainsBuildingException( Collections.<Problem>emptyList() );
+ assertEquals( "0 problems were encountered while building the effective toolchains" + LS, e.getMessage() );
+ }
+
+ @Test
+ public void testOneProblem()
+ {
+ ProblemCollector problemCollector = ProblemCollectorFactory.newInstance( null );
+ problemCollector.add( Problem.Severity.ERROR, "MESSAGE", 3, 5, new Exception() );
+ ToolchainsBuildingException e = new ToolchainsBuildingException( problemCollector.getProblems() );
+ assertEquals( "1 problem was encountered while building the effective toolchains" + LS +
+ "[ERROR] MESSAGE @ line 3, column 5" + LS, e.getMessage() );
+ }
+
+ @Test
+ public void testUnknownPositionAndSource()
+ {
+ ProblemCollector problemCollector = ProblemCollectorFactory.newInstance( null );
+ problemCollector.add( Problem.Severity.ERROR, "MESSAGE", -1, -1, new Exception() );
+ ToolchainsBuildingException e = new ToolchainsBuildingException( problemCollector.getProblems() );
+ assertEquals( "1 problem was encountered while building the effective toolchains" + LS +
+ "[ERROR] MESSAGE" + LS, e.getMessage() );
+ }
+
+ @Test
+ public void testUnknownPosition()
+ {
+ ProblemCollector problemCollector = ProblemCollectorFactory.newInstance( null );
+ problemCollector.setSource( "SOURCE" );
+ problemCollector.add( Problem.Severity.ERROR, "MESSAGE", -1, -1, new Exception() );
+ ToolchainsBuildingException e = new ToolchainsBuildingException( problemCollector.getProblems() );
+ assertEquals( "1 problem was encountered while building the effective toolchains" + LS +
+ "[ERROR] MESSAGE @ SOURCE" + LS, e.getMessage() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/merge/MavenToolchainMergerTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/merge/MavenToolchainMergerTest.java
new file mode 100644
index 00000000..9183e175
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/merge/MavenToolchainMergerTest.java
@@ -0,0 +1,176 @@
+package org.apache.maven.toolchain.merge;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.InputStream;
+
+import org.apache.maven.toolchain.model.PersistedToolchains;
+import org.apache.maven.toolchain.model.ToolchainModel;
+import org.apache.maven.toolchain.model.TrackableBase;
+import org.apache.maven.toolchain.model.io.xpp3.MavenToolchainsXpp3Reader;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.junit.Test;
+
+public class MavenToolchainMergerTest
+{
+ private MavenToolchainMerger merger = new MavenToolchainMerger();
+
+ private MavenToolchainsXpp3Reader reader = new MavenToolchainsXpp3Reader();
+
+ @Test
+ public void testMergeNulls()
+ {
+ merger.merge( null, null, null );
+
+ PersistedToolchains pt = new PersistedToolchains();
+ merger.merge( pt, null, null );
+ merger.merge( null, pt, null );
+ }
+
+ @Test
+ public void testMergeJdk() throws Exception
+ {
+ InputStream isDominant = null;
+ InputStream isRecessive = null;
+ try
+ {
+ isDominant = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
+ isRecessive = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
+
+ PersistedToolchains dominant = reader.read( isDominant );
+ PersistedToolchains recessive = reader.read( isRecessive );
+ assertEquals( 2, dominant.getToolchains().size() );
+
+ merger.merge( dominant, recessive, TrackableBase.USER_LEVEL );
+ assertEquals( 2, dominant.getToolchains().size() );
+ }
+ finally
+ {
+ IOUtil.close( isDominant );
+ }
+ }
+
+ @Test
+ public void testMergeJdkExtra() throws Exception
+ {
+ InputStream jdksIS = null;
+ InputStream jdksExtraIS = null;
+ try
+ {
+ jdksIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
+ jdksExtraIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks-extra.xml" );
+
+ PersistedToolchains jdks = reader.read( jdksIS );
+ PersistedToolchains jdksExtra = reader.read( jdksExtraIS );
+ assertEquals( 2, jdks.getToolchains().size() );
+
+ merger.merge( jdks, jdksExtra, TrackableBase.USER_LEVEL );
+ assertEquals( 4, jdks.getToolchains().size() );
+ assertEquals( 2, jdksExtra.getToolchains().size() );
+ }
+ finally
+ {
+ IOUtil.close( jdksIS );
+ IOUtil.close( jdksExtraIS );
+ }
+
+ try
+ {
+ jdksIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
+ jdksExtraIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks-extra.xml" );
+
+ PersistedToolchains jdks = reader.read( jdksIS );
+ PersistedToolchains jdksExtra = reader.read( jdksExtraIS );
+ assertEquals( 2, jdks.getToolchains().size() );
+
+ // switch dominant with reccessive
+ merger.merge( jdksExtra, jdks, TrackableBase.USER_LEVEL );
+ assertEquals( 4, jdksExtra.getToolchains().size() );
+ assertEquals( 2, jdks.getToolchains().size() );
+ }
+ finally
+ {
+ IOUtil.close( jdksIS );
+ IOUtil.close( jdksExtraIS );
+ }
+ }
+
+ @Test
+ public void testMergeJdkExtend() throws Exception
+ {
+ InputStream jdksIS = null;
+ InputStream jdksExtendIS = null;
+ try
+ {
+ jdksIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
+ jdksExtendIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks-extend.xml" );
+
+ PersistedToolchains jdks = reader.read( jdksIS );
+ PersistedToolchains jdksExtend = reader.read( jdksExtendIS );
+ assertEquals( 2, jdks.getToolchains().size() );
+
+ merger.merge( jdks, jdksExtend, TrackableBase.USER_LEVEL );
+ assertEquals( 2, jdks.getToolchains().size() );
+ Xpp3Dom config0 = (Xpp3Dom) jdks.getToolchains().get( 0 ).getConfiguration();
+ assertEquals( "lib/tools.jar", config0.getChild( "toolsJar" ).getValue() );
+ assertEquals( 2, config0.getChildCount() );
+ Xpp3Dom config1 = (Xpp3Dom) jdks.getToolchains().get( 1 ).getConfiguration();
+ assertEquals( 2, config1.getChildCount() );
+ assertEquals( "lib/classes.jar", config1.getChild( "toolsJar" ).getValue() );
+ assertEquals( 2, jdksExtend.getToolchains().size() );
+ }
+ finally
+ {
+ IOUtil.close( jdksIS );
+ IOUtil.close( jdksExtendIS );
+ }
+
+ try
+ {
+ jdksIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
+ jdksExtendIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks-extend.xml" );
+
+ PersistedToolchains jdks = reader.read( jdksIS );
+ PersistedToolchains jdksExtend = reader.read( jdksExtendIS );
+ assertEquals( 2, jdks.getToolchains().size() );
+
+ // switch dominant with reccessive
+ merger.merge( jdksExtend, jdks, TrackableBase.USER_LEVEL );
+ assertEquals( 2, jdksExtend.getToolchains().size() );
+ Xpp3Dom config0 = (Xpp3Dom) jdksExtend.getToolchains().get( 0 ).getConfiguration();
+ assertEquals( "lib/tools.jar", config0.getChild( "toolsJar" ).getValue() );
+ assertEquals( 2, config0.getChildCount() );
+ Xpp3Dom config1 = (Xpp3Dom) jdksExtend.getToolchains().get( 1 ).getConfiguration();
+ assertEquals( 2, config1.getChildCount() );
+ assertEquals( "lib/classes.jar", config1.getChild( "toolsJar" ).getValue() );
+ assertEquals( 2, jdks.getToolchains().size() );
+ }
+ finally
+ {
+ IOUtil.close( jdksIS );
+ IOUtil.close( jdksExtendIS );
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/default-maven/cyclic-reference/module-a/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/default-maven/cyclic-reference/module-a/pom.xml
new file mode 100644
index 00000000..56ec3412
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/default-maven/cyclic-reference/module-a/pom.xml
@@ -0,0 +1,19 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>cyclic-reference</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>module-a</artifactId>
+
+ <dependencies>
+ <dependency>
+ <groupId>cyclic-reference</groupId>
+ <artifactId>module-b</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/default-maven/cyclic-reference/module-b/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/default-maven/cyclic-reference/module-b/pom.xml
new file mode 100644
index 00000000..ffa4f347
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/default-maven/cyclic-reference/module-b/pom.xml
@@ -0,0 +1,19 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>cyclic-reference</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>module-b</artifactId>
+
+ <dependencies>
+ <dependency>
+ <groupId>cyclic-reference</groupId>
+ <artifactId>module-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/default-maven/cyclic-reference/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/default-maven/cyclic-reference/pom.xml
new file mode 100644
index 00000000..e2666190
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/default-maven/cyclic-reference/pom.xml
@@ -0,0 +1,14 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>cyclic-reference</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>module-a</module>
+ <module>module-b</module>
+ </modules>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/mojo-configuration/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/mojo-configuration/pom.xml
new file mode 100644
index 00000000..a821765b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/mojo-configuration/pom.xml
@@ -0,0 +1,67 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.lifecycle.test</groupId>
+ <artifactId>mojo-configuration</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <name>project-with-additional-lifecycle-elements</name>
+ <url>http://maven.apache.org</url>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin</artifactId>
+ <version>0.1</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>xpp3-reader</goal>
+ </goals>
+ <phase>generate-sources</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-basic/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-basic/pom.xml
new file mode 100644
index 00000000..ab8584d9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-basic/pom.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.lifecycle.test</groupId>
+ <artifactId>project-basic</artifactId>
+ <version>1.0</version>
+ <packaging>jar</packaging>
+
+ <name>Test Project</name>
+ <inceptionYear>2009</inceptionYear>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/pom.xml
new file mode 100644
index 00000000..83080888
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/pom.xml
@@ -0,0 +1,72 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.lifecycle.test</groupId>
+ <artifactId>project-with-additional-lifecycle-elements</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <name>project-with-additional-lifecycle-elements</name>
+ <url>http://maven.apache.org</url>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin</artifactId>
+ <version>0.1</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate-metadata</goal>
+ <goal>generate-test-metadata</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/src/main/java/org/apache/maven/lifecycle/test/App.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/src/main/java/org/apache/maven/lifecycle/test/App.java
new file mode 100644
index 00000000..826279cc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/src/main/java/org/apache/maven/lifecycle/test/App.java
@@ -0,0 +1,13 @@
+package org.apache.maven.lifecycle.test;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/src/test/java/org/apache/maven/lifecycle/test/AppTest.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/src/test/java/org/apache/maven/lifecycle/test/AppTest.java
new file mode 100644
index 00000000..469cb2c4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/src/test/java/org/apache/maven/lifecycle/test/AppTest.java
@@ -0,0 +1,38 @@
+package org.apache.maven.lifecycle.test;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-inheritance/pom.xml
new file mode 100644
index 00000000..0f49e9ae
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-inheritance/pom.xml
@@ -0,0 +1,628 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-parent</artifactId>
+ <version>11</version>
+ <relativePath>../pom/maven/pom.xml</relativePath>
+ </parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Apache Maven</name>
+ <description>Maven is a project development management and
+ comprehension tool. Based on the concept of a project object model:
+ builds, dependency management, documentation creation, site
+ publication, and distribution publication are all controlled from
+ the declarative file. Maven can be extended by plugins to utilise a
+ number of other development tools for reporting or the build
+ process.
+ </description>
+ <url>http://maven.apache.org/</url>
+ <inceptionYear>2001</inceptionYear>
+ <properties>
+ <classWorldsVersion>1.3</classWorldsVersion>
+ <commonsCliVersion>1.0</commonsCliVersion>
+ <!--
+
+ Do not update this, Doxia will be decoupled completely from 3.x and someone can
+ create a rendering engine for it if they like when the release stabilizes. JVZ
+
+ -->
+ <doxiaVersion>1.0-alpha-9</doxiaVersion>
+ <easyMockVersion>1.2_Java1.3</easyMockVersion>
+ <junitVersion>3.8.1</junitVersion>
+ <plexusVersion>1.0-beta-3.0.7</plexusVersion>
+ <plexusInteractivityVersion>1.0-alpha-6</plexusInteractivityVersion>
+ <plexusInterpolationVersion>1.1</plexusInterpolationVersion>
+ <plexusPluginManagerVersion>1.0-alpha-1</plexusPluginManagerVersion>
+ <plexusUtilsVersion>1.5.8</plexusUtilsVersion>
+ <plexusJetty6Version>1.6</plexusJetty6Version>
+ <plexusWebdavVersion>1.0</plexusWebdavVersion>
+ <wagonVersion>1.0-beta-4</wagonVersion>
+ <modelBuilderVersion>1.7-SNAPSHOT</modelBuilderVersion>
+ <mercuryVersion>1.0-alpha-6-SNAPSHOT</mercuryVersion>
+ <mercuryMp3Version>1.0-alpha-1</mercuryMp3Version>
+ <securityDispatcherVersion>1.2</securityDispatcherVersion>
+ <woodstoxVersion>3.2.6</woodstoxVersion>
+ <modelloVersion>1.0.1-SNAPSHOT</modelloVersion>
+ <jxpathVersion>1.3</jxpathVersion>
+ </properties>
+ <issueManagement>
+ <system>jira</system>
+ <url>http://jira.codehaus.org/browse/MNG</url>
+ </issueManagement>
+ <mailingLists>
+ <mailingList>
+ <name>Maven Developer List</name>
+ <subscribe>dev-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>dev-unsubscribe@maven.apache.org</unsubscribe>
+ <post>dev@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-dev</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/dev@maven.apache.org/</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven-Developers-f179.html</otherArchive>
+ <otherArchive>http://maven.dev.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Maven User List</name>
+ <subscribe>users-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>users-unsubscribe@maven.apache.org</unsubscribe>
+ <post>users@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-users</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/users@maven.apache.org/</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven---Users-f178.html</otherArchive>
+ <otherArchive>http://maven.users.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Maven Issues List</name>
+ <subscribe>issues-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>issues-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-issues/</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/issues@maven.apache.org</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven---Issues-f15573.html</otherArchive>
+ <otherArchive>http://maven.issues.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Maven Commits List</name>
+ <subscribe>commits-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>commits-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-commits</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/commits@maven.apache.org</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven---Commits-f15575.html</otherArchive>
+ <otherArchive>http://maven.commits.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <!--
+ duplication from parent pom - temporary until they inherit
+ properly
+ -->
+ <mailingList>
+ <name>Maven Announcements List</name>
+ <post>announce@maven.apache.org</post>
+ <subscribe>announce-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>announce-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-announce/</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/announce@maven.apache.org</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven-Announcements-f15617.html</otherArchive>
+ <otherArchive>http://maven.announce.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Maven Notifications List</name>
+ <subscribe>notifications-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>notifications-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-notifications/</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/notifications@maven.apache.org</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven---Notifications-f15574.html</otherArchive>
+ <otherArchive>http://maven.notifications.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ </mailingLists>
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/maven/components/trunk</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/components/trunk</developerConnection>
+ <url>http://svn.apache.org/viewcvs.cgi/maven/components/trunk</url>
+ </scm>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-metadata</artifactId>
+ <version>${plexusVersion}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate-metadata</goal>
+ <goal>generate-test-metadata</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <tagBase>https://svn.apache.org/repos/asf/maven/components/tags</tagBase>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>${modelloVersion}</version>
+ <configuration>
+ <useJava5>true</useJava5>
+ </configuration>
+ <executions>
+ <execution>
+ <id>site-docs</id>
+ <phase>pre-site</phase>
+ <goals>
+ <goal>xdoc</goal>
+ <goal>xsd</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>standard</id>
+ <goals>
+ <goal>java</goal>
+ <goal>xpp3-reader</goal>
+ <goal>xpp3-writer</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>1.0.0</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.4.2</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.2-beta-2</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.4-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ <modules>
+ <module>maven-core</module>
+ <module>apache-maven</module>
+ <module>maven-model</module>
+ <module>maven-plugin-api</module>
+ <module>maven-project</module>
+ <module>maven-reporting-api</module>
+ <module>maven-project-builder</module>
+ <module>maven-mercury</module>
+ <module>maven-embedder</module>
+ <module>maven-toolchain</module>
+ <module>maven-compat</module>
+ <module>maven-repository</module>
+ <module>maven-repository-mercury</module>
+ </modules>
+ <!--start-->
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junitVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <dependencyManagement>
+ <!--end-->
+ <dependencies>
+ <!-- Maven Modules -->
+ <!--start-->
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-mercury</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-lifecycle</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-reporting-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-profile</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-toolchain</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-embedder</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project-builder</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-compat</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <!--end-->
+ <!-- Plexus -->
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>${plexusUtilsVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>${plexusVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-annotations</artifactId>
+ <version>${plexusVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-classworlds</artifactId>
+ <version>${classWorldsVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interpolation</artifactId>
+ <version>${plexusInterpolationVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interactivity-api</artifactId>
+ <version>${plexusInteractivityVersion}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <!-- Plexus test dependencies -->
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-jetty6</artifactId>
+ <version>${plexusJetty6Version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.spice</groupId>
+ <artifactId>plexus-webdav</artifactId>
+ <version>${plexusWebdavVersion}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- Wagon -->
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http-lightweight</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh-external</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <!-- Doxia -->
+ <dependency>
+ <groupId>org.apache.maven.doxia</groupId>
+ <artifactId>doxia-sink-api</artifactId>
+ <version>${doxiaVersion}</version>
+ </dependency>
+ <!-- Maven Shared -->
+ <dependency>
+ <groupId>org.sonatype.spice</groupId>
+ <artifactId>model-builder</artifactId>
+ <version>${modelBuilderVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.woodstox</groupId>
+ <artifactId>wstx-asl</artifactId>
+ <version>${woodstoxVersion}</version>
+ </dependency>
+ <!-- Commons -->
+ <dependency>
+ <groupId>commons-cli</groupId>
+ <artifactId>commons-cli</artifactId>
+ <version>${commonsCliVersion}</version>
+ <exclusions>
+ <exclusion>
+ <artifactId>commons-lang</artifactId>
+ <groupId>commons-lang</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>commons-logging</artifactId>
+ <groupId>commons-logging</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>commons-jxpath</groupId>
+ <artifactId>commons-jxpath</artifactId>
+ <version>${jxpathVersion}</version>
+ </dependency>
+
+ <!-- Mercury -->
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-artifact</artifactId>
+ <version>${mercuryVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-external</artifactId>
+ <version>${mercuryVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-plexus</artifactId>
+ <version>${mercuryVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo-virtual</artifactId>
+ <version>${mercuryVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.mercury</groupId>
+ <artifactId>mercury-mp3-cli</artifactId>
+ <version>${mercuryMp3Version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-sec-dispatcher</artifactId>
+ <version>${securityDispatcherVersion}</version>
+ </dependency>
+
+
+ <!-- Mercury test dependencies -->
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo-local-m2</artifactId>
+ <version>${mercuryVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo-remote-m2</artifactId>
+ <version>${mercuryVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-md-sat</artifactId>
+ <version>${mercuryVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-util</artifactId>
+ <version>${mercuryVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-transport-http</artifactId>
+ <version>${mercuryVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-transport-http</artifactId>
+ <version>${mercuryVersion}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-plugin-manager</artifactId>
+ <version>${plexusPluginManagerVersion}</version>
+ </dependency>
+ <!--start-->
+ <dependency>
+ <groupId>easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <version>${easyMockVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <!--end-->
+ </dependencies>
+ <!--start-->
+ </dependencyManagement>
+ <!--end-->
+ <distributionManagement>
+ <site>
+ <id>apache.website</id>
+ <url>scp://people.apache.org/www/maven.apache.org/ref/${project.version}/</url>
+ </site>
+ </distributionManagement>
+ <profiles>
+ <profile>
+ <id>osgi</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>manifest</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <!-- Needed for including the manifest, see MJAR-71 -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ <configuration>
+ <archive>
+ <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+ </archive>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>release</id>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <inherited>false</inherited>
+ <configuration>
+ <descriptors>
+ <descriptor>src/main/assembly/src.xml</descriptor>
+ </descriptors>
+ <tarLongFileMode>gnu</tarLongFileMode>
+ <finalName>maven-${project.version}-src</finalName>
+ </configuration>
+ <executions>
+ <execution>
+ <id>make-assembly</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>strict</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-enforcer-plugin</artifactId>
+ <version>1.0-alpha-3</version>
+ <executions>
+ <execution>
+ <id>enforce-jdk-15</id>
+ <goals>
+ <goal>enforce</goal>
+ </goals>
+ <configuration>
+ <rules>
+ <requireJavaVersion>
+ <version>1.5</version>
+ </requireJavaVersion>
+ </rules>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-multiple-executions/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-multiple-executions/pom.xml
new file mode 100644
index 00000000..e7a38347
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-multiple-executions/pom.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>project-with-multiple-executions</artifactId>
+ <version>1.0.1</version>
+ <packaging>maven-plugin</packaging>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>0.1</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin</artifactId>
+ <version>0.1</version>
+ <executions>
+ <execution>
+ <id>remote-resources</id>
+ <goals>
+ <goal>xpp3-writer</goal>
+ <goal>java</goal>
+ <goal>xpp3-reader</goal>
+ </goals>
+ <configuration>
+ <version>1.1.0</version>
+ <models>
+ <model>src/main/mdo/remote-resources.mdo</model>
+ </models>
+ </configuration>
+ </execution>
+ <execution>
+ <id>supplemental-models</id>
+ <goals>
+ <goal>xpp3-writer</goal>
+ <goal>java</goal>
+ <goal>xpp3-reader</goal>
+ </goals>
+ <configuration>
+ <version>1.0.0</version>
+ <models>
+ <model>src/main/mdo/supplemental-model.mdo</model>
+ </models>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-multiple-executions/src/main/mdo/remote-resources.mdo b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-multiple-executions/src/main/mdo/remote-resources.mdo
new file mode 100644
index 00000000..c64cfbc8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-multiple-executions/src/main/mdo/remote-resources.mdo
@@ -0,0 +1,61 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<model>
+ <id>remoteResourcesBundle</id>
+ <name>RemoteResourcesBundle</name>
+ <description><![CDATA[
+ A bundle of remote resources.
+ This is the model specification for remote-resources.xml.
+ ]]></description>
+ <defaults>
+ <default>
+ <key>package</key>
+ <value>org.apache.maven.plugin.resources.remote</value>
+ </default>
+ </defaults>
+ <classes>
+ <class rootElement="true" xml.tagName="remoteResourcesBundle">
+ <name>RemoteResourcesBundle</name>
+ <version>1.1.0</version>
+ <description>Root element of the remote-resources.xml file.</description>
+ <fields>
+ <field>
+ <name>remoteResources</name>
+ <version>1.1.0</version>
+ <description><![CDATA[
+ Remote resources that are contained in a remote resources bundle.
+ ]]></description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>sourceEncoding</name>
+ <version>1.1.0</version>
+ <description><![CDATA[
+ Source encoding of the remote resources contained in the bundle.
+ ]]></description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ </classes>
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-multiple-executions/src/main/mdo/supplemental-model.mdo b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-multiple-executions/src/main/mdo/supplemental-model.mdo
new file mode 100644
index 00000000..102149df
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-multiple-executions/src/main/mdo/supplemental-model.mdo
@@ -0,0 +1,61 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<model>
+ <id>supplementalModel</id>
+ <name>SupplementalDataModel</name>
+ <description>Provides access to supplemental POM data models.</description>
+ <defaults>
+ <default>
+ <key>package</key>
+ <value>org.apache.maven.plugin.resources.remote</value>
+ </default>
+ </defaults>
+ <classes>
+ <class rootElement="true" xml.tagName="supplementalDataModels" xsd.compositor="sequence">
+ <name>SupplementalDataModel</name>
+ <version>1.0.0</version>
+ <description>Root element of the supplemental-models.xml file.</description>
+ <fields>
+ <field xml.listStyle="flat">
+ <name>supplement</name>
+ <version>1.0.0</version>
+ <description>Snippets of POM xml files used to supplement the data model.</description>
+ <association>
+ <type>Supplement</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>Supplement</name>
+ <version>1.0.0</version>
+ <description>A single supplement</description>
+ <fields>
+ <field>
+ <name>project</name>
+ <version>1.0.0</version>
+ <description>Snippets of POM xml files used to supplement the data model.</description>
+ <type>DOM</type>
+ </field>
+ </fields>
+ </class>
+ </classes>
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-plugin-level-configuration-only/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-plugin-level-configuration-only/pom.xml
new file mode 100644
index 00000000..b3bb2dd9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-plugin-level-configuration-only/pom.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>project-plugin-level-configuration-only</artifactId>
+ <version>1.0.1</version>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>1.0.1</version>
+ <configuration>
+ <version>1.1.0</version>
+ <models>
+ <model>src/main/mdo/remote-resources.mdo</model>
+ </models>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-listener-dependency-injection/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-listener-dependency-injection/pom.xml
new file mode 100644
index 00000000..41b99c72
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-listener-dependency-injection/pom.xml
@@ -0,0 +1,30 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.lifecycle-listener.test</groupId>
+ <artifactId>simple</artifactId>
+ <version>1.0</version>
+
+ <properties>
+ <foo>${injected}</foo>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin</artifactId>
+ <version>0.1</version>
+ <executions>
+ <execution>
+ <id>test</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>it</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-participant-reactor-dependency-injection/module-a/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-participant-reactor-dependency-injection/module-a/pom.xml
new file mode 100644
index 00000000..6a173f61
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-participant-reactor-dependency-injection/module-a/pom.xml
@@ -0,0 +1,12 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>lifecycle-participant-reactor-dependency-injection</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0</version>
+ </parent>
+
+ <artifactId>module-a</artifactId>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-participant-reactor-dependency-injection/module-b/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-participant-reactor-dependency-injection/module-b/pom.xml
new file mode 100644
index 00000000..795111a2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-participant-reactor-dependency-injection/module-b/pom.xml
@@ -0,0 +1,12 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>lifecycle-participant-reactor-dependency-injection</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0</version>
+ </parent>
+
+ <artifactId>module-b</artifactId>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-participant-reactor-dependency-injection/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-participant-reactor-dependency-injection/pom.xml
new file mode 100644
index 00000000..2830b321
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-participant-reactor-dependency-injection/pom.xml
@@ -0,0 +1,13 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>lifecycle-participant-reactor-dependency-injection</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>module-a</module>
+ <module>module-b</module>
+ </modules>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/mng-5003-plugin-realm-cache/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/mng-5003-plugin-realm-cache/pom.xml
new file mode 100644
index 00000000..55f8e317
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/mng-5003-plugin-realm-cache/pom.xml
@@ -0,0 +1,8 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng5003</groupId>
+ <artifactId>mng-5003-plugin-realm-cache</artifactId>
+ <version>1.0</version>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-contributing-system-scope-plugin-dep/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-contributing-system-scope-plugin-dep/pom.xml
new file mode 100644
index 00000000..a9fa3cac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-contributing-system-scope-plugin-dep/pom.xml
@@ -0,0 +1,44 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3586</groupId>
+ <artifactId>test2</artifactId>
+ <version>1.0</version>
+
+ <name>Maven Integration Test :: MNG-3586</name>
+ <description>
+ Test that plugin dependencies with scope system are part of the plugin class realm.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin</artifactId>
+ <version>0.1</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3586</groupId>
+ <artifactId>tools</artifactId>
+ <version>1.5.0</version>
+ <scope>system</scope>
+ <systemPath>${basedir}/tools.jar</systemPath>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <id>load</id>
+ <phase>validate</phase>
+ <configuration>
+ <resourcePaths>maven-core-it.properties</resourcePaths>
+ <pluginClassLoaderOutput>target/pcl.properties</pluginClassLoaderOutput>
+ </configuration>
+ <goals>
+ <goal>load</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-contributing-system-scope-plugin-dep/tools.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-contributing-system-scope-plugin-dep/tools.jar
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-contributing-system-scope-plugin-dep/tools.jar
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-build-extensions-plugin/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-build-extensions-plugin/pom.xml
new file mode 100644
index 00000000..d4e34a5d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-build-extensions-plugin/pom.xml
@@ -0,0 +1,31 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.test</groupId>
+ <artifactId>project-with-build-extensions-plugin</artifactId>
+ <version>1.0</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin</artifactId>
+ <version>0.1</version>
+ <extensions>true</extensions>
+ <executions>
+ <execution>
+ <id>load</id>
+ <phase>validate</phase>
+ <configuration>
+ <resourcePaths>maven-core-it.properties</resourcePaths>
+ <pluginClassLoaderOutput>target/pcl.properties</pluginClassLoaderOutput>
+ </configuration>
+ <goals>
+ <goal>load</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-inheritance/pom.xml
new file mode 100644
index 00000000..0f49e9ae
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-inheritance/pom.xml
@@ -0,0 +1,628 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-parent</artifactId>
+ <version>11</version>
+ <relativePath>../pom/maven/pom.xml</relativePath>
+ </parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Apache Maven</name>
+ <description>Maven is a project development management and
+ comprehension tool. Based on the concept of a project object model:
+ builds, dependency management, documentation creation, site
+ publication, and distribution publication are all controlled from
+ the declarative file. Maven can be extended by plugins to utilise a
+ number of other development tools for reporting or the build
+ process.
+ </description>
+ <url>http://maven.apache.org/</url>
+ <inceptionYear>2001</inceptionYear>
+ <properties>
+ <classWorldsVersion>1.3</classWorldsVersion>
+ <commonsCliVersion>1.0</commonsCliVersion>
+ <!--
+
+ Do not update this, Doxia will be decoupled completely from 3.x and someone can
+ create a rendering engine for it if they like when the release stabilizes. JVZ
+
+ -->
+ <doxiaVersion>1.0-alpha-9</doxiaVersion>
+ <easyMockVersion>1.2_Java1.3</easyMockVersion>
+ <junitVersion>3.8.1</junitVersion>
+ <plexusVersion>1.0-beta-3.0.7</plexusVersion>
+ <plexusInteractivityVersion>1.0-alpha-6</plexusInteractivityVersion>
+ <plexusInterpolationVersion>1.1</plexusInterpolationVersion>
+ <plexusPluginManagerVersion>1.0-alpha-1</plexusPluginManagerVersion>
+ <plexusUtilsVersion>1.5.8</plexusUtilsVersion>
+ <plexusJetty6Version>1.6</plexusJetty6Version>
+ <plexusWebdavVersion>1.0</plexusWebdavVersion>
+ <wagonVersion>1.0-beta-4</wagonVersion>
+ <modelBuilderVersion>1.7-SNAPSHOT</modelBuilderVersion>
+ <mercuryVersion>1.0-alpha-6-SNAPSHOT</mercuryVersion>
+ <mercuryMp3Version>1.0-alpha-1</mercuryMp3Version>
+ <securityDispatcherVersion>1.2</securityDispatcherVersion>
+ <woodstoxVersion>3.2.6</woodstoxVersion>
+ <modelloVersion>1.0.1-SNAPSHOT</modelloVersion>
+ <jxpathVersion>1.3</jxpathVersion>
+ </properties>
+ <issueManagement>
+ <system>jira</system>
+ <url>http://jira.codehaus.org/browse/MNG</url>
+ </issueManagement>
+ <mailingLists>
+ <mailingList>
+ <name>Maven Developer List</name>
+ <subscribe>dev-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>dev-unsubscribe@maven.apache.org</unsubscribe>
+ <post>dev@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-dev</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/dev@maven.apache.org/</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven-Developers-f179.html</otherArchive>
+ <otherArchive>http://maven.dev.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Maven User List</name>
+ <subscribe>users-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>users-unsubscribe@maven.apache.org</unsubscribe>
+ <post>users@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-users</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/users@maven.apache.org/</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven---Users-f178.html</otherArchive>
+ <otherArchive>http://maven.users.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Maven Issues List</name>
+ <subscribe>issues-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>issues-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-issues/</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/issues@maven.apache.org</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven---Issues-f15573.html</otherArchive>
+ <otherArchive>http://maven.issues.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Maven Commits List</name>
+ <subscribe>commits-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>commits-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-commits</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/commits@maven.apache.org</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven---Commits-f15575.html</otherArchive>
+ <otherArchive>http://maven.commits.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <!--
+ duplication from parent pom - temporary until they inherit
+ properly
+ -->
+ <mailingList>
+ <name>Maven Announcements List</name>
+ <post>announce@maven.apache.org</post>
+ <subscribe>announce-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>announce-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-announce/</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/announce@maven.apache.org</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven-Announcements-f15617.html</otherArchive>
+ <otherArchive>http://maven.announce.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Maven Notifications List</name>
+ <subscribe>notifications-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>notifications-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-notifications/</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/notifications@maven.apache.org</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven---Notifications-f15574.html</otherArchive>
+ <otherArchive>http://maven.notifications.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ </mailingLists>
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/maven/components/trunk</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/components/trunk</developerConnection>
+ <url>http://svn.apache.org/viewcvs.cgi/maven/components/trunk</url>
+ </scm>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-metadata</artifactId>
+ <version>${plexusVersion}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate-metadata</goal>
+ <goal>generate-test-metadata</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <tagBase>https://svn.apache.org/repos/asf/maven/components/tags</tagBase>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>${modelloVersion}</version>
+ <configuration>
+ <useJava5>true</useJava5>
+ </configuration>
+ <executions>
+ <execution>
+ <id>site-docs</id>
+ <phase>pre-site</phase>
+ <goals>
+ <goal>xdoc</goal>
+ <goal>xsd</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>standard</id>
+ <goals>
+ <goal>java</goal>
+ <goal>xpp3-reader</goal>
+ <goal>xpp3-writer</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>1.0.0</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.4.2</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.2-beta-2</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.4-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ <modules>
+ <module>maven-core</module>
+ <module>apache-maven</module>
+ <module>maven-model</module>
+ <module>maven-plugin-api</module>
+ <module>maven-project</module>
+ <module>maven-reporting-api</module>
+ <module>maven-project-builder</module>
+ <module>maven-mercury</module>
+ <module>maven-embedder</module>
+ <module>maven-toolchain</module>
+ <module>maven-compat</module>
+ <module>maven-repository</module>
+ <module>maven-repository-mercury</module>
+ </modules>
+ <!--start-->
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junitVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <dependencyManagement>
+ <!--end-->
+ <dependencies>
+ <!-- Maven Modules -->
+ <!--start-->
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-mercury</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-lifecycle</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-reporting-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-profile</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-toolchain</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-embedder</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project-builder</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-compat</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <!--end-->
+ <!-- Plexus -->
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>${plexusUtilsVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>${plexusVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-annotations</artifactId>
+ <version>${plexusVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-classworlds</artifactId>
+ <version>${classWorldsVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interpolation</artifactId>
+ <version>${plexusInterpolationVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interactivity-api</artifactId>
+ <version>${plexusInteractivityVersion}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <!-- Plexus test dependencies -->
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-jetty6</artifactId>
+ <version>${plexusJetty6Version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.spice</groupId>
+ <artifactId>plexus-webdav</artifactId>
+ <version>${plexusWebdavVersion}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- Wagon -->
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http-lightweight</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh-external</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <!-- Doxia -->
+ <dependency>
+ <groupId>org.apache.maven.doxia</groupId>
+ <artifactId>doxia-sink-api</artifactId>
+ <version>${doxiaVersion}</version>
+ </dependency>
+ <!-- Maven Shared -->
+ <dependency>
+ <groupId>org.sonatype.spice</groupId>
+ <artifactId>model-builder</artifactId>
+ <version>${modelBuilderVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.woodstox</groupId>
+ <artifactId>wstx-asl</artifactId>
+ <version>${woodstoxVersion}</version>
+ </dependency>
+ <!-- Commons -->
+ <dependency>
+ <groupId>commons-cli</groupId>
+ <artifactId>commons-cli</artifactId>
+ <version>${commonsCliVersion}</version>
+ <exclusions>
+ <exclusion>
+ <artifactId>commons-lang</artifactId>
+ <groupId>commons-lang</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>commons-logging</artifactId>
+ <groupId>commons-logging</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>commons-jxpath</groupId>
+ <artifactId>commons-jxpath</artifactId>
+ <version>${jxpathVersion}</version>
+ </dependency>
+
+ <!-- Mercury -->
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-artifact</artifactId>
+ <version>${mercuryVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-external</artifactId>
+ <version>${mercuryVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-plexus</artifactId>
+ <version>${mercuryVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo-virtual</artifactId>
+ <version>${mercuryVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.mercury</groupId>
+ <artifactId>mercury-mp3-cli</artifactId>
+ <version>${mercuryMp3Version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-sec-dispatcher</artifactId>
+ <version>${securityDispatcherVersion}</version>
+ </dependency>
+
+
+ <!-- Mercury test dependencies -->
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo-local-m2</artifactId>
+ <version>${mercuryVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo-remote-m2</artifactId>
+ <version>${mercuryVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-md-sat</artifactId>
+ <version>${mercuryVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-util</artifactId>
+ <version>${mercuryVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-transport-http</artifactId>
+ <version>${mercuryVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-transport-http</artifactId>
+ <version>${mercuryVersion}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-plugin-manager</artifactId>
+ <version>${plexusPluginManagerVersion}</version>
+ </dependency>
+ <!--start-->
+ <dependency>
+ <groupId>easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <version>${easyMockVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <!--end-->
+ </dependencies>
+ <!--start-->
+ </dependencyManagement>
+ <!--end-->
+ <distributionManagement>
+ <site>
+ <id>apache.website</id>
+ <url>scp://people.apache.org/www/maven.apache.org/ref/${project.version}/</url>
+ </site>
+ </distributionManagement>
+ <profiles>
+ <profile>
+ <id>osgi</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>manifest</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <!-- Needed for including the manifest, see MJAR-71 -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ <configuration>
+ <archive>
+ <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+ </archive>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>release</id>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <inherited>false</inherited>
+ <configuration>
+ <descriptors>
+ <descriptor>src/main/assembly/src.xml</descriptor>
+ </descriptors>
+ <tarLongFileMode>gnu</tarLongFileMode>
+ <finalName>maven-${project.version}-src</finalName>
+ </configuration>
+ <executions>
+ <execution>
+ <id>make-assembly</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>strict</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-enforcer-plugin</artifactId>
+ <version>1.0-alpha-3</version>
+ <executions>
+ <execution>
+ <id>enforce-jdk-15</id>
+ <goals>
+ <goal>enforce</goal>
+ </goals>
+ <configuration>
+ <rules>
+ <requireJavaVersion>
+ <version>1.5</version>
+ </requireJavaVersion>
+ </rules>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/pom.xml
new file mode 100644
index 00000000..32124c53
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/pom.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3906</name>
+ <description>
+ Test that project-level plugin dependencies are properly merged during inheritance.
+ </description>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-class-loader</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>e</artifactId>
+ <version>0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>d</artifactId>
+ <version>0.1</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/pom.xml
new file mode 100644
index 00000000..e13262b0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/pom.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child</artifactId>
+
+ <name>Maven Integration Test :: MNG-3906</name>
+ <description>
+ Test that project-level plugin dependencies are properly merged during inheritance.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-class-loader</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>c</artifactId>
+ <version>0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>a</artifactId>
+ <version>0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <id>load</id>
+ <phase>validate</phase>
+ <configuration>
+ <resourcePaths>org/apache/maven/its/mng3906/SomeClass.class</resourcePaths>
+ <pluginClassLoaderOutput>target/pcl.properties</pluginClassLoaderOutput>
+ </configuration>
+ <goals>
+ <goal>load</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.1/a-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.1/a-0.1.jar
new file mode 100644
index 00000000..0db2c9f4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.1/a-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.1/a-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.1/a-0.1.pom
new file mode 100644
index 00000000..ed095b25
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.1/a-0.1.pom
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </properties>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>pom.xml</include>
+ <include>src/**</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.2/a-0.2.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.2/a-0.2.jar
new file mode 100644
index 00000000..c5fb69a1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.2/a-0.2.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.2/a-0.2.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.2/a-0.2.pom
new file mode 100644
index 00000000..cb5373bd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.2/a-0.2.pom
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>a</artifactId>
+ <version>0.2</version>
+ <packaging>jar</packaging>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </properties>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>pom.xml</include>
+ <include>src/**</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/maven-metadata.xml
new file mode 100644
index 00000000..472f1c8c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/maven-metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?><metadata>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <release>0.2</release>
+ <versions>
+ <version>0.1</version>
+ <version>0.2</version>
+ </versions>
+ <lastUpdated>20081214111115</lastUpdated>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/b/0.1/b-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/b/0.1/b-0.1.jar
new file mode 100644
index 00000000..7817617f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/b/0.1/b-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/b/0.1/b-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/b/0.1/b-0.1.pom
new file mode 100644
index 00000000..d4dbbb73
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/b/0.1/b-0.1.pom
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </properties>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>pom.xml</include>
+ <include>src/**</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/b/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/b/maven-metadata.xml
new file mode 100644
index 00000000..2847985b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/b/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?><metadata>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <release>0.1</release>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20081214111129</lastUpdated>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/c/0.1/c-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/c/0.1/c-0.1.jar
new file mode 100644
index 00000000..a4dcec7a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/c/0.1/c-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/c/0.1/c-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/c/0.1/c-0.1.pom
new file mode 100644
index 00000000..afc967cb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/c/0.1/c-0.1.pom
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>c</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </properties>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>pom.xml</include>
+ <include>src/**</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/c/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/c/maven-metadata.xml
new file mode 100644
index 00000000..bcc92824
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/c/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?><metadata>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>c</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <release>0.1</release>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20081214111138</lastUpdated>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/d/0.1/d-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/d/0.1/d-0.1.jar
new file mode 100644
index 00000000..067491b4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/d/0.1/d-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/d/0.1/d-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/d/0.1/d-0.1.pom
new file mode 100644
index 00000000..bfd077cb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/d/0.1/d-0.1.pom
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>d</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </properties>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>pom.xml</include>
+ <include>src/**</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/d/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/d/maven-metadata.xml
new file mode 100644
index 00000000..06b6e18d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/d/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?><metadata>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>d</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <release>0.1</release>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20081214111146</lastUpdated>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/e/0.1/e-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/e/0.1/e-0.1.jar
new file mode 100644
index 00000000..2469da59
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/e/0.1/e-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/e/0.1/e-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/e/0.1/e-0.1.pom
new file mode 100644
index 00000000..24f2705e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/e/0.1/e-0.1.pom
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>e</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </properties>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>pom.xml</include>
+ <include>src/**</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/e/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/e/maven-metadata.xml
new file mode 100644
index 00000000..95023c7a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/e/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?><metadata>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>e</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <release>0.1</release>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20081214111155</lastUpdated>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/settings-template.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/settings-template.xml
new file mode 100644
index 00000000..cde42158
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/settings-template.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<settings>
+ <profiles>
+ <profile>
+ <id>maven-core-it-repo</id>
+ <repositories>
+ <repository>
+ <id>maven-core-it</id>
+ <url>@baseurl@/repo</url>
+ <releases>
+ <checksumPolicy>ignore</checksumPolicy>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>maven-core-it</id>
+ <url>@baseurl@/repo</url>
+ <releases>
+ <checksumPolicy>ignore</checksumPolicy>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+ </profile>
+ </profiles>
+ <activeProfiles>
+ <activeProfile>maven-core-it-repo</activeProfile>
+ </activeProfiles>
+</settings>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/it0063/jdk/jre/placeholder.txt b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/it0063/jdk/jre/placeholder.txt
new file mode 100644
index 00000000..e26e8608
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/it0063/jdk/jre/placeholder.txt
@@ -0,0 +1 @@
+need it so that empty folder does not get deleted \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/it0063/jdk/lib/tools.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/it0063/jdk/lib/tools.jar
new file mode 100644
index 00000000..d6435519
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/it0063/jdk/lib/tools.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/it0063/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/it0063/pom.xml
new file mode 100644
index 00000000..0d7b08a9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/it0063/pom.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.it0063</groupId>
+ <artifactId>maven-it-it0063</artifactId>
+ <version>1.0</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: it0063</name>
+ <description>Test the use of a system scoped dependency to a (fake) tools.jar.</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.sun</groupId>
+ <artifactId>tools</artifactId>
+ <version>1.4.2</version>
+ <scope>system</scope>
+ <systemPath>${jre.home}/../lib/tools.jar</systemPath>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-dependency-resolution</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <compileClassPath>target/compile.txt</compileClassPath>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/consumer/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/consumer/pom.xml
new file mode 100644
index 00000000..a70b208c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/consumer/pom.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3023</groupId>
+ <artifactId>parent</artifactId>
+ <version>1</version>
+ </parent>
+
+ <artifactId>consumer</artifactId>
+
+ <name>Maven Integration Test :: MNG-3023 :: Consumer</name>
+ <description>Test that reactor projects are included in dependency resolution.</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3023</groupId>
+ <artifactId>dependency</artifactId>
+ <version>1</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-dependency-resolution</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>compile-classpath</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ <configuration>
+ <compileClassPath>${project.build.directory}/compile.classpath</compileClassPath>
+ <significantPathLevels>1</significantPathLevels>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/dependency/dependency-1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/dependency/dependency-1.jar
new file mode 100644
index 00000000..d1fb4ec7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/dependency/dependency-1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/dependency/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/dependency/pom.xml
new file mode 100644
index 00000000..e783f85c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/dependency/pom.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3023</groupId>
+ <artifactId>parent</artifactId>
+ <version>1</version>
+ </parent>
+
+ <artifactId>dependency</artifactId>
+
+ <name>Maven Integration Test :: MNG-3023 :: Dependency</name>
+ <description>Test that reactor projects are included in dependency resolution.</description>
+
+ <build>
+ <outputDirectory>dependency-classes</outputDirectory>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-artifact</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>compile</id>
+ <phase>initialize</phase>
+ <goals>
+ <goal>set</goal>
+ </goals>
+ <configuration>
+ <mainFile>dependency-classes</mainFile>
+ </configuration>
+ </execution>
+ <execution>
+ <id>install</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>set</goal>
+ <goal>attach-pom</goal>
+ <goal>install</goal>
+ </goals>
+ <configuration>
+ <mainFile>dependency-1.jar</mainFile>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/pom.xml
new file mode 100644
index 00000000..23f09ce5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/pom.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3023</groupId>
+ <artifactId>parent</artifactId>
+ <version>1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3023</name>
+ <description>Test that reactor projects are included in dependency resolution.</description>
+
+ <modules>
+ <module>dependency</module>
+ <module>consumer</module>
+ </modules>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/it0063/jdk/jre/placeholder.txt b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/it0063/jdk/jre/placeholder.txt
new file mode 100644
index 00000000..e26e8608
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/it0063/jdk/jre/placeholder.txt
@@ -0,0 +1 @@
+need it so that empty folder does not get deleted \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/it0063/jdk/lib/tools.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/it0063/jdk/lib/tools.jar
new file mode 100644
index 00000000..d6435519
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/it0063/jdk/lib/tools.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/it0063/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/it0063/pom.xml
new file mode 100644
index 00000000..0d7b08a9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/it0063/pom.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.it0063</groupId>
+ <artifactId>maven-it-it0063</artifactId>
+ <version>1.0</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: it0063</name>
+ <description>Test the use of a system scoped dependency to a (fake) tools.jar.</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.sun</groupId>
+ <artifactId>tools</artifactId>
+ <version>1.4.2</version>
+ <scope>system</scope>
+ <systemPath>${jre.home}/../lib/tools.jar</systemPath>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-dependency-resolution</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <compileClassPath>target/compile.txt</compileClassPath>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/project-with-exclusions/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/project-with-exclusions/pom.xml
new file mode 100644
index 00000000..9fae2925
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/project-with-exclusions/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.its.mng4034</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>maven-core-it-support</artifactId>
+ <version>1.3</version>
+ <scope>runtime</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.jar
new file mode 100644
index 00000000..609ec21b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.pom
new file mode 100644
index 00000000..f4514188
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.pom
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: Dummy Artifact</name>
+ <description>
+
+ </description>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/a/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/a/maven-metadata.xml
new file mode 100644
index 00000000..8099175e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/a/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20091023222756</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.jar
new file mode 100644
index 00000000..19df0485
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.pom
new file mode 100644
index 00000000..ca20cbf5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.pom
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: Dummy Artifact</name>
+ <description>
+
+ </description>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/b/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/b/maven-metadata.xml
new file mode 100644
index 00000000..e77af628
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/b/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20091023222817</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/0.1/maven-it-plugin-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/0.1/maven-it-plugin-0.1.jar
new file mode 100644
index 00000000..84a4bf7a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/0.1/maven-it-plugin-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/0.1/maven-it-plugin-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/0.1/maven-it-plugin-0.1.pom
new file mode 100644
index 00000000..4cd0ff00
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/0.1/maven-it-plugin-0.1.pom
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin</artifactId>
+ <version>0.1</version>
+ <packaging>maven-plugin</packaging>
+
+ <name>Maven Integration Test Plugin</name>
+ <description>
+ A test plugin to assist testing of Maven core.
+ </description>
+ <inceptionYear>2009</inceptionYear>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>pom.xml</include>
+ <include>src/**</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/0.1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/0.1/pom.xml
new file mode 100644
index 00000000..4cd0ff00
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/0.1/pom.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin</artifactId>
+ <version>0.1</version>
+ <packaging>maven-plugin</packaging>
+
+ <name>Maven Integration Test Plugin</name>
+ <description>
+ A test plugin to assist testing of Maven core.
+ </description>
+ <inceptionYear>2009</inceptionYear>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>pom.xml</include>
+ <include>src/**</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/maven-metadata.xml
new file mode 100644
index 00000000..65155293
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/maven-metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <latest>0.1</latest>
+ <release>0.1</release>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20091023233513</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-metadata.xml
new file mode 100644
index 00000000..637ec122
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-metadata.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <plugins>
+ <plugin>
+ <name>Maven Integration Test Plugin</name>
+ <prefix>it</prefix>
+ <artifactId>maven-it-plugin</artifactId>
+ </plugin>
+ </plugins>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.jar
new file mode 100644
index 00000000..5150c162
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.pom
new file mode 100644
index 00000000..f4ea8d1d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.pom
@@ -0,0 +1,23 @@
+<project>
+ <parent>
+ <artifactId>maven</artifactId>
+ <groupId>org.apache.maven</groupId>
+ <version>2.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <name>Maven Plugin API</name>
+ <version>2.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <distributionManagement>
+ <status>deployed</status>
+ </distributionManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/maven/2.0/maven-2.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/maven/2.0/maven-2.0.pom
new file mode 100644
index 00000000..3fe5d31d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/maven/2.0/maven-2.0.pom
@@ -0,0 +1,264 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <packaging>pom</packaging>
+ <name>Maven</name>
+ <version>2.0</version>
+ <description>Maven is a project development management and comprehension tool. Based on the concept of a project object model: builds, dependency management, documentation creation, site publication, and distribution publication are all controlled from the declarative file. Maven can be extended by plugins to utilise a number of other development tools for reporting or the build process.</description>
+ <url>http://maven.apache.org/maven2/</url>
+ <issueManagement>
+ <system>jira</system>
+ <url>http://jira.codehaus.org/browse/MNG</url>
+ </issueManagement>
+ <ciManagement>
+ <system>continuum</system>
+ <notifiers>
+ <notifier>
+ <configuration>
+ <address>commits@maven.apache.org</address>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <mailingLists>
+ <mailingList>
+ <name>Maven User List</name>
+ <subscribe>users-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>users-unsubscribe@maven.apache.org</unsubscribe>
+ <post>users@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-users</archive>
+ </mailingList>
+ <mailingList>
+ <name>Maven Developer List</name>
+ <subscribe>dev-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>dev-unsubscribe@maven.apache.org</unsubscribe>
+ <post>dev@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-dev</archive>
+ </mailingList>
+ <mailingList>
+ <name>Maven Commits List</name>
+ <subscribe>commits-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>commits-unsubscribe@maven.apache.org</unsubscribe>
+ <post>commits@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-dev</archive>
+ </mailingList>
+ <mailingList>
+ <name>Apache Announce List</name>
+ <subscribe>announce-subscribe@apache.org</subscribe>
+ <unsubscribe>announce-unsubscribe@apache.org</unsubscribe>
+ <post>announce@apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/www-announce/</archive>
+ </mailingList>
+ </mailingLists>
+ <developers>
+ <developer>
+ <id>jvanzyl</id>
+ <name>Jason van Zyl</name>
+ <email>jason@maven.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Chair</role>
+ </roles>
+ <timezone>-5</timezone>
+ </developer>
+ <developer>
+ <id>brett</id>
+ <name>Brett Porter</name>
+ <email>brett@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+10</timezone>
+ </developer>
+ <developer>
+ <id>evenisse</id>
+ <name>Emmanuel Venisse</name>
+ <email>evenisse@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>jdcasey</id>
+ <name>John Casey</name>
+ <email>jdcasey@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>-5</timezone>
+ </developer>
+ <developer>
+ <id>kenney</id>
+ <name>Kenney Westerhof</name>
+ <email>kenney@apache.org</email>
+ <organization>Neonics</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>trygvis</id>
+ <name>Trygve Laugstol</name>
+ <email>trygvis@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>vmassol</id>
+ <name>Vincent Massol</name>
+ <email>vmassol@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>vsiveton</id>
+ <name>Vincent Siveton</name>
+ <email>vsiveton@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>-5</timezone>
+ </developer>
+ </developers>
+ <licenses>
+ <license>
+ <name>The Apache Software License, Version 2.0</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/maven/components/tags/maven-2.0</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/components/tags/maven-2.0</developerConnection>
+ <url>http://svn.apache.org/viewcvs.cgi/maven/components/tags/maven-2.0</url>
+ </scm>
+ <organization>
+ <name>Apache Software Foundation</name>
+ <url>http://www.apache.org/</url>
+ </organization>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <tagBase>https://svn.apache.org/repos/asf/maven/components/tags</tagBase>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ <modules>
+ <module>maven-archiver</module>
+ <module>maven-artifact</module>
+ <module>maven-artifact-manager</module>
+ <module>maven-artifact-ant</module>
+ <module>maven-artifact-test</module>
+ <module>maven-core</module>
+ <module>maven-error-diagnostics</module>
+ <module>maven-model</module>
+ <module>maven-monitor</module>
+ <module>maven-plugin-api</module>
+ <module>maven-plugin-descriptor</module>
+ <module>maven-plugin-parameter-documenter</module>
+ <module>maven-plugin-registry</module>
+ <module>maven-plugin-tools</module>
+ <module>maven-profile</module>
+ <module>maven-project</module>
+ <module>maven-reporting</module>
+ <module>maven-repository-metadata</module>
+ <module>maven-script</module>
+ <module>maven-settings</module>
+ </modules>
+ <repositories>
+ <repository>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <id>snapshots</id>
+ <name>Maven Central Development Repository</name>
+ <url>http://snapshots.maven.codehaus.org/maven2</url>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <id>snapshots</id>
+ <name>Maven Central Plugins Development Repository</name>
+ <url>http://snapshots.maven.codehaus.org/maven2</url>
+ </pluginRepository>
+ </pluginRepositories>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>1.0-alpha-8</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.0.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ <version>1.0-alpha-5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh</artifactId>
+ <version>1.0-alpha-5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <version>1.0-alpha-5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http-lightweight</artifactId>
+ <version>1.0-alpha-5</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <distributionManagement>
+ <repository>
+ <id>repo1</id>
+ <name>Maven Central Repository</name>
+ <url>scp://repo1.maven.org/home/projects/maven/repository-staging/to-ibiblio/maven2</url>
+ </repository>
+ <snapshotRepository>
+ <id>snapshots</id>
+ <name>Maven Central Development Repository</name>
+ <url>scp://repo1.maven.org/home/projects/maven/repository-staging/snapshots/maven2</url>
+ </snapshotRepository>
+ <site>
+ <id>website</id>
+ <url>scp://minotaur.apache.org/www/maven.apache.org/maven2/</url>
+ </site>
+ </distributionManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-clean-plugin/0.1/maven-clean-plugin-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-clean-plugin/0.1/maven-clean-plugin-0.1.jar
new file mode 100644
index 00000000..ee01f101
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-clean-plugin/0.1/maven-clean-plugin-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-clean-plugin/0.1/maven-clean-plugin-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-clean-plugin/0.1/maven-clean-plugin-0.1.pom
new file mode 100644
index 00000000..e4318d07
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-clean-plugin/0.1/maven-clean-plugin-0.1.pom
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>0.1</version>
+ <packaging>maven-plugin</packaging>
+
+ <name>Maven Integration Test Plugin</name>
+ <description>
+ A test plugin to assist testing of Maven core.
+ </description>
+ <inceptionYear>2009</inceptionYear>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>pom.xml</include>
+ <include>src/**</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-clean-plugin/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-clean-plugin/maven-metadata.xml
new file mode 100644
index 00000000..91261b37
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-clean-plugin/maven-metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <latest>0.1</latest>
+ <release>0.1</release>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20091023224342</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-compiler-plugin/0.1/maven-compiler-plugin-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-compiler-plugin/0.1/maven-compiler-plugin-0.1.jar
new file mode 100644
index 00000000..e5ef4464
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-compiler-plugin/0.1/maven-compiler-plugin-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-compiler-plugin/0.1/maven-compiler-plugin-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-compiler-plugin/0.1/maven-compiler-plugin-0.1.pom
new file mode 100644
index 00000000..22371630
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-compiler-plugin/0.1/maven-compiler-plugin-0.1.pom
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>0.1</version>
+ <packaging>maven-plugin</packaging>
+
+ <name>Maven Integration Test Plugin</name>
+ <description>
+ A test plugin to assist testing of Maven core.
+ </description>
+ <inceptionYear>2009</inceptionYear>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>pom.xml</include>
+ <include>src/**</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-compiler-plugin/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-compiler-plugin/maven-metadata.xml
new file mode 100644
index 00000000..544f16ea
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-compiler-plugin/maven-metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <latest>0.1</latest>
+ <release>0.1</release>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20091023224813</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-deploy-plugin/0.1/maven-deploy-plugin-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-deploy-plugin/0.1/maven-deploy-plugin-0.1.jar
new file mode 100644
index 00000000..f2432a6d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-deploy-plugin/0.1/maven-deploy-plugin-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-deploy-plugin/0.1/maven-deploy-plugin-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-deploy-plugin/0.1/maven-deploy-plugin-0.1.pom
new file mode 100644
index 00000000..82ed5748
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-deploy-plugin/0.1/maven-deploy-plugin-0.1.pom
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>0.1</version>
+ <packaging>maven-plugin</packaging>
+
+ <name>Maven Integration Test Plugin</name>
+ <description>
+ A test plugin to assist testing of Maven core.
+ </description>
+ <inceptionYear>2009</inceptionYear>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>pom.xml</include>
+ <include>src/**</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-deploy-plugin/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-deploy-plugin/maven-metadata.xml
new file mode 100644
index 00000000..f0af94c7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-deploy-plugin/maven-metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <latest>0.1</latest>
+ <release>0.1</release>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20091023224421</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-install-plugin/0.1/maven-install-plugin-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-install-plugin/0.1/maven-install-plugin-0.1.jar
new file mode 100644
index 00000000..a6adb988
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-install-plugin/0.1/maven-install-plugin-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-install-plugin/0.1/maven-install-plugin-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-install-plugin/0.1/maven-install-plugin-0.1.pom
new file mode 100644
index 00000000..1ce2bd06
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-install-plugin/0.1/maven-install-plugin-0.1.pom
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>0.1</version>
+ <packaging>maven-plugin</packaging>
+
+ <name>Maven Integration Test Plugin</name>
+ <description>
+ A test plugin to assist testing of Maven core.
+ </description>
+ <inceptionYear>2009</inceptionYear>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>pom.xml</include>
+ <include>src/**</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-install-plugin/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-install-plugin/maven-metadata.xml
new file mode 100644
index 00000000..bb528791
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-install-plugin/maven-metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <latest>0.1</latest>
+ <release>0.1</release>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20091023224444</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-jar-plugin/0.1/maven-jar-plugin-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-jar-plugin/0.1/maven-jar-plugin-0.1.jar
new file mode 100644
index 00000000..0b03b350
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-jar-plugin/0.1/maven-jar-plugin-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-jar-plugin/0.1/maven-jar-plugin-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-jar-plugin/0.1/maven-jar-plugin-0.1.pom
new file mode 100644
index 00000000..d8abdf6f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-jar-plugin/0.1/maven-jar-plugin-0.1.pom
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>0.1</version>
+ <packaging>maven-plugin</packaging>
+
+ <name>Maven Integration Test Plugin</name>
+ <description>
+ A test plugin to assist testing of Maven core.
+ </description>
+ <inceptionYear>2009</inceptionYear>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>pom.xml</include>
+ <include>src/**</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml
new file mode 100644
index 00000000..6b734ad5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <latest>0.1</latest>
+ <release>0.1</release>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20091023232454</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-metadata.xml
new file mode 100644
index 00000000..615714cc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-metadata.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <plugins>
+ <plugin>
+ <name>Maven Integration Test Plugin</name>
+ <prefix>clean</prefix>
+ <artifactId>maven-clean-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <name>Maven Integration Test Plugin</name>
+ <prefix>deploy</prefix>
+ <artifactId>maven-deploy-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <name>Maven Integration Test Plugin</name>
+ <prefix>install</prefix>
+ <artifactId>maven-install-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <name>Maven Integration Test Plugin</name>
+ <prefix>jar</prefix>
+ <artifactId>maven-jar-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <name>Maven Integration Test Plugin</name>
+ <prefix>surefire</prefix>
+ <artifactId>maven-surefire-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <name>Maven Integration Test Plugin</name>
+ <prefix>compiler</prefix>
+ <artifactId>maven-compiler-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <name>Maven Integration Test Plugin</name>
+ <prefix>resources</prefix>
+ <artifactId>maven-resources-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <name>Maven Integration Test Plugin</name>
+ <prefix>plugin</prefix>
+ <artifactId>maven-plugin-plugin</artifactId>
+ </plugin>
+ </plugins>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-plugin-plugin/0.1/maven-plugin-plugin-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-plugin-plugin/0.1/maven-plugin-plugin-0.1.jar
new file mode 100644
index 00000000..e2eab46e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-plugin-plugin/0.1/maven-plugin-plugin-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-plugin-plugin/0.1/maven-plugin-plugin-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-plugin-plugin/0.1/maven-plugin-plugin-0.1.pom
new file mode 100644
index 00000000..7df6bdbc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-plugin-plugin/0.1/maven-plugin-plugin-0.1.pom
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>0.1</version>
+ <packaging>maven-plugin</packaging>
+
+ <name>Maven Integration Test Plugin</name>
+ <description>
+ A test plugin to assist testing of Maven core.
+ </description>
+ <inceptionYear>2009</inceptionYear>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>pom.xml</include>
+ <include>src/**</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-plugin-plugin/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-plugin-plugin/maven-metadata.xml
new file mode 100644
index 00000000..4c29db7d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-plugin-plugin/maven-metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <latest>0.1</latest>
+ <release>0.1</release>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20091023225046</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-resources-plugin/0.1/maven-resources-plugin-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-resources-plugin/0.1/maven-resources-plugin-0.1.jar
new file mode 100644
index 00000000..ffa11df4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-resources-plugin/0.1/maven-resources-plugin-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-resources-plugin/0.1/maven-resources-plugin-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-resources-plugin/0.1/maven-resources-plugin-0.1.pom
new file mode 100644
index 00000000..782dbf7d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-resources-plugin/0.1/maven-resources-plugin-0.1.pom
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>0.1</version>
+ <packaging>maven-plugin</packaging>
+
+ <name>Maven Integration Test Plugin</name>
+ <description>
+ A test plugin to assist testing of Maven core.
+ </description>
+ <inceptionYear>2009</inceptionYear>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>pom.xml</include>
+ <include>src/**</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-resources-plugin/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-resources-plugin/maven-metadata.xml
new file mode 100644
index 00000000..38c5503a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-resources-plugin/maven-metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <latest>0.1</latest>
+ <release>0.1</release>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20091023224958</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-surefire-plugin/0.1/maven-surefire-plugin-0.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-surefire-plugin/0.1/maven-surefire-plugin-0.1.jar
new file mode 100644
index 00000000..989e5837
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-surefire-plugin/0.1/maven-surefire-plugin-0.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-surefire-plugin/0.1/maven-surefire-plugin-0.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-surefire-plugin/0.1/maven-surefire-plugin-0.1.pom
new file mode 100644
index 00000000..3588a043
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-surefire-plugin/0.1/maven-surefire-plugin-0.1.pom
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>0.1</version>
+ <packaging>maven-plugin</packaging>
+
+ <name>Maven Integration Test Plugin</name>
+ <description>
+ A test plugin to assist testing of Maven core.
+ </description>
+ <inceptionYear>2009</inceptionYear>
+
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ </repository>
+ </distributionManagement>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>pom.xml</include>
+ <include>src/**</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-surefire-plugin/maven-metadata.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-surefire-plugin/maven-metadata.xml
new file mode 100644
index 00000000..c6d1df93
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-surefire-plugin/maven-metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>0.1</version>
+ <versioning>
+ <latest>0.1</latest>
+ <release>0.1</release>
+ <versions>
+ <version>0.1</version>
+ </versions>
+ <lastUpdated>20091023225125</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar
new file mode 100644
index 00000000..5c50e177
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom
new file mode 100644
index 00000000..6cf90799
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <parent>
+ <artifactId>plexus</artifactId>
+ <groupId>org.codehaus.plexus</groupId>
+ <version>1.0.4</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>plexus-utils</artifactId>
+ <name>Plexus Common Utilities</name>
+ <version>1.1</version>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>org/codehaus/plexus/util/FileBasedTestCase.java</exclude>
+ <exclude>**/Test*.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <distributionManagement>
+ <status>deployed</status>
+ </distributionManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/artifact-id-inheritance/child/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/artifact-id-inheritance/child/pom.xml
new file mode 100644
index 00000000..eee189d4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/artifact-id-inheritance/child/pom.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <!-- while groupId and version are inherited, artifactId is not and must be specified -->
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/artifact-id-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/artifact-id-inheritance/pom.xml
new file mode 100644
index 00000000..f22afbc0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/artifact-id-inheritance/pom.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <!--
+ NOTE: This extends the test to check an edge case of URL adjustment which must not error out during inheritance
+ if the child misses the artifactId (as to be reported by validation).
+ -->
+ <url>http://maven.apache.org/</url>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/basedir-aligned-interpolation/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/basedir-aligned-interpolation/pom.xml
new file mode 100644
index 00000000..1885fc48
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/basedir-aligned-interpolation/pom.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3822</groupId>
+ <artifactId>test1</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-3822</name>
+ <description>
+ Verify that POM interpolation uses basedir-aligned build directories.
+ </description>
+
+ <properties>
+ <!-- this is where we collect all the interpolated values for the POM dump -->
+ <buildMainSrc>${project.build.sourceDirectory}</buildMainSrc>
+ <buildTestSrc>${project.build.testSourceDirectory}</buildTestSrc>
+ <buildScriptSrc>${project.build.scriptSourceDirectory}</buildScriptSrc>
+ <buildOut>${project.build.directory}</buildOut>
+ <buildMainOut>${project.build.outputDirectory}</buildMainOut>
+ <buildTestOut>${project.build.testOutputDirectory}</buildTestOut>
+ <siteOut>${project.reporting.outputDirectory}</siteOut>
+ </properties>
+
+ <build>
+ <!--
+ NOTE: Deliberately set all build directories to relative paths to ensure they really need basedir alignment.
+ -->
+ <sourceDirectory>src/main/java</sourceDirectory>
+ <testSourceDirectory>src/test/java</testSourceDirectory>
+ <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
+ <directory>target</directory>
+ <outputDirectory>target/classes</outputDirectory>
+ <testOutputDirectory>target/test-classes</testOutputDirectory>
+ </build>
+
+ <reporting>
+ <outputDirectory>target/site</outputDirectory>
+ </reporting>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/basedir-interpolation/pom-with-unusual-name.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/basedir-interpolation/pom-with-unusual-name.xml
new file mode 100644
index 00000000..1c037e63
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/basedir-interpolation/pom-with-unusual-name.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3944</groupId>
+ <artifactId>test1</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-3944</name>
+ <description>
+ Test that interpolation of ${basedir} works for a POM that is not named "pom.xml"
+ </description>
+
+ <properties>
+ <!-- this is where we collect all the interpolated values for the POM dump -->
+ <prop0>${basedir}</prop0>
+ <prop1>${project.basedir}</prop1>
+ </properties>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/baseurl-interpolation/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/baseurl-interpolation/pom.xml
new file mode 100644
index 00000000..f1d4e6ca
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/baseurl-interpolation/pom.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3760</groupId>
+ <artifactId>test1</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-3760</name>
+ <description>
+ Test interpolation of ${project.baseUri}
+ </description>
+
+ <properties>
+ <!-- this is where we collect all the interpolated values for the POM dump -->
+ <prop1>${project.baseUri}</prop1>
+ </properties>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/boolean-interpolation/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/boolean-interpolation/pom.xml
new file mode 100644
index 00000000..992eac1e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/boolean-interpolation/pom.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng1995</groupId>
+ <artifactId>test1</artifactId>
+ <version>1.0</version>
+
+ <name>Maven Integration Test :: MNG-1995</name>
+ <description>
+ Verify that POM fields that are of type boolean can be interpolated with expressions.
+ </description>
+
+ <properties>
+ <filter.resources>true</filter.resources>
+ <releasesEnabled>true</releasesEnabled>
+ </properties>
+
+ <repositories>
+ <repository>
+ <id>maven-core-it</id>
+ <url>file:///${basedir}/repo</url>
+ <releases>
+ <!-- That's the boolean POM field we would like to interpolate -->
+ <enabled>${releasesEnabled}</enabled>
+ </releases>
+ </repository>
+ </repositories>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ <!-- That's the boolean POM field we would like to interpolate -->
+ <filtering>${filter.resources}</filtering>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-expression</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <outputFile>target/expression.properties</outputFile>
+ <expressions>
+ <expression>project/build/resources/0/filtering</expression>
+ <expression>project/repositories</expression>
+ </expressions>
+ </configuration>
+ <executions>
+ <execution>
+ <id>test</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>eval</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/build-extension-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/build-extension-inheritance/pom.xml
new file mode 100644
index 00000000..262af4fb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/build-extension-inheritance/pom.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3899</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3899</name>
+ <description>
+ Test that build extensions are properly merged during inheritance.
+ </description>
+
+ <build>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.its.mng3899</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </extension>
+ <extension>
+ <groupId>org.apache.maven.its.mng3899</groupId>
+ <artifactId>c</artifactId>
+ <version>0.1</version>
+ </extension>
+ </extensions>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/build-extension-inheritance/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/build-extension-inheritance/sub/pom.xml
new file mode 100644
index 00000000..dc8f6f5b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/build-extension-inheritance/sub/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3899</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child</artifactId>
+
+ <name>Maven Integration Test :: MNG-3899</name>
+ <description>
+ Test that build extensions are properly merged during inheritance.
+ </description>
+
+ <build>
+ <!-- project extensions should precede inherited extensions -->
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.its.mng3899</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ </extension>
+ <extension>
+ <!-- project extensions should override inherited extension with equal gid:aid -->
+ <groupId>org.apache.maven.its.mng3899</groupId>
+ <artifactId>a</artifactId>
+ <version>0.2</version>
+ </extension>
+ </extensions>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-expression</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <goals>
+ <goal>eval</goal>
+ </goals>
+ <configuration>
+ <outputFile>target/extension.properties</outputFile>
+ <expressions>
+ <expression>project/build/extensions</expression>
+ </expressions>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/complete-model/w-parent/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/complete-model/w-parent/pom.xml
new file mode 100644
index 00000000..ebcd7d1e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/complete-model/w-parent/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <!-- minimal parent just to have one more level of inheritance -->
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/complete-model/w-parent/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/complete-model/w-parent/sub/pom.xml
new file mode 100644
index 00000000..68ca28dd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/complete-model/w-parent/sub/pom.xml
@@ -0,0 +1,319 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <groupId>org.apache.maven.its.mng</groupId>
+ <artifactId>test</artifactId>
+ <version>0.2</version>
+ <packaging>pom</packaging>
+
+ <name>project-name</name>
+ <description>project-description</description>
+ <url>http://project.url/</url>
+ <inceptionYear>2009</inceptionYear>
+ <organization>
+ <name>project-org</name>
+ <url>http://project-org.url/</url>
+ </organization>
+ <licenses>
+ <license>
+ <name>project-license</name>
+ <url>http://project.url/license</url>
+ <distribution>repo</distribution>
+ <comments>free</comments>
+ </license>
+ </licenses>
+
+ <developers>
+ <developer>
+ <id>dev</id>
+ <name>project-developer</name>
+ <email>developer@</email>
+ <url>http://developer</url>
+ <organization>developer</organization>
+ <organizationUrl>http://devel.org</organizationUrl>
+ <roles>
+ <role>devel</role>
+ </roles>
+ <timezone>-1</timezone>
+ <properties>
+ <developer>yes</developer>
+ </properties>
+ </developer>
+ </developers>
+ <contributors>
+ <contributor>
+ <name>project-contributor</name>
+ <email>contributor@</email>
+ <url>http://contributor</url>
+ <organization>contributor</organization>
+ <organizationUrl>http://contrib.org</organizationUrl>
+ <roles>
+ <role>contrib</role>
+ </roles>
+ <timezone>+1</timezone>
+ <properties>
+ <contributor>yes</contributor>
+ </properties>
+ </contributor>
+ </contributors>
+
+ <mailingLists>
+ <mailingList>
+ <name>project-mailing-list</name>
+ <subscribe>subscribe@</subscribe>
+ <unsubscribe>unsubscribe@</unsubscribe>
+ <post>post@</post>
+ <archive>mail-archive</archive>
+ <otherArchives>
+ <otherArchive>other-archive</otherArchive>
+ </otherArchives>
+ </mailingList>
+ </mailingLists>
+
+ <prerequisites>
+ <maven>2.0.1</maven>
+ </prerequisites>
+
+ <scm>
+ <url>http://project.url/trunk</url>
+ <connection>http://project.url/scm</connection>
+ <developerConnection>https://project.url/scm</developerConnection>
+ <tag>TAG</tag>
+ </scm>
+ <issueManagement>
+ <system>issues</system>
+ <url>http://project.url/issues</url>
+ </issueManagement>
+ <ciManagement>
+ <system>ci</system>
+ <url>http://project.url/ci</url>
+ <notifiers>
+ <notifier>
+ <type>irc</type>
+ <address>ci@</address>
+ <sendOnError>true</sendOnError>
+ <sendOnFailure>false</sendOnFailure>
+ <sendOnSuccess>false</sendOnSuccess>
+ <sendOnWarning>false</sendOnWarning>
+ <configuration>
+ <ciProp>ci</ciProp>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <distributionManagement>
+ <repository>
+ <url>http://project.url/dist</url>
+ <id>project.distros</id>
+ <name>distros</name>
+ </repository>
+ <snapshotRepository>
+ <url>http://project.url/snaps</url>
+ <id>project.snaps</id>
+ <name>snaps</name>
+ <uniqueVersion>false</uniqueVersion>
+ </snapshotRepository>
+ <site>
+ <url>http://project.url/site</url>
+ <id>project.site</id>
+ <name>docs</name>
+ </site>
+ <downloadUrl>http://project.url/download</downloadUrl>
+ <relocation>
+ <groupId>reloc-gid</groupId>
+ <artifactId>reloc-aid</artifactId>
+ <version>reloc-version</version>
+ <message>project-reloc-msg</message>
+ </relocation>
+ </distributionManagement>
+
+ <modules>
+ <module>sub</module>
+ </modules>
+
+ <properties>
+ <itProperty>project-property</itProperty>
+ </properties>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>managed-dep</artifactId>
+ <version>0.1</version>
+ <type>war</type>
+ <scope>runtime</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>excluded-managed-dep</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>dep</artifactId>
+ <version>0.2</version>
+ <type>ejb</type>
+ <scope>test</scope>
+ <optional>true</optional>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>excluded-dep</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+
+ <repositories>
+ <repository>
+ <id>project-remote-repo</id>
+ <url>http://project.url/remote</url>
+ <name>repo</name>
+ </repository>
+ </repositories>
+
+ <build>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.its.ext</groupId>
+ <artifactId>ext</artifactId>
+ <version>3.0</version>
+ </extension>
+ </extensions>
+
+ <defaultGoal>test</defaultGoal>
+ <directory>build</directory>
+ <sourceDirectory>sources/main</sourceDirectory>
+ <scriptSourceDirectory>sources/scripts</scriptSourceDirectory>
+ <testSourceDirectory>sources/test</testSourceDirectory>
+ <outputDirectory>build/main</outputDirectory>
+ <testOutputDirectory>build/test</testOutputDirectory>
+ <finalName>coreit</finalName>
+ <resources>
+ <resource>
+ <directory>res/main</directory>
+ <filtering>true</filtering>
+ <targetPath>main</targetPath>
+ <includes>
+ <include>main.included</include>
+ </includes>
+ <excludes>
+ <exclude>main.excluded</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <testResources>
+ <testResource>
+ <directory>res/test</directory>
+ <filtering>true</filtering>
+ <targetPath>test</targetPath>
+ <includes>
+ <include>test.included</include>
+ </includes>
+ <excludes>
+ <exclude>test.excluded</exclude>
+ </excludes>
+ </testResource>
+ </testResources>
+ <filters>
+ <filter>src/main/filter/it.properties</filter>
+ </filters>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-build</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <outputFile>test.properties</outputFile>
+ </configuration>
+ <executions>
+ <execution>
+ <id>test</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>eval</goal>
+ </goals>
+ <configuration>
+ <outputFile>pom.properties</outputFile>
+ </configuration>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>build-plugin-dep</artifactId>
+ <version>0.3</version>
+ <type>zip</type>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>excluded-build-plugin-dep</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <excludeDefaults>true</excludeDefaults>
+ <outputDirectory>docs</outputDirectory>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-reporting</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <configuration>
+ <outputFile>test.html</outputFile>
+ </configuration>
+ <reportSets>
+ <reportSet>
+ <id>it</id>
+ <reports>
+ <report>run</report>
+ </reports>
+ <configuration>
+ <outputFile>index.html</outputFile>
+ </configuration>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ </plugins>
+ </reporting>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/complete-model/wo-parent/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/complete-model/wo-parent/pom.xml
new file mode 100644
index 00000000..7b1ad794
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/complete-model/wo-parent/pom.xml
@@ -0,0 +1,313 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng</groupId>
+ <artifactId>test</artifactId>
+ <version>0.2</version>
+ <packaging>pom</packaging>
+
+ <name>project-name</name>
+ <description>project-description</description>
+ <url>http://project.url/</url>
+ <inceptionYear>2009</inceptionYear>
+ <organization>
+ <name>project-org</name>
+ <url>http://project-org.url/</url>
+ </organization>
+ <licenses>
+ <license>
+ <name>project-license</name>
+ <url>http://project.url/license</url>
+ <distribution>repo</distribution>
+ <comments>free</comments>
+ </license>
+ </licenses>
+
+ <developers>
+ <developer>
+ <id>dev</id>
+ <name>project-developer</name>
+ <email>developer@</email>
+ <url>http://developer</url>
+ <organization>developer</organization>
+ <organizationUrl>http://devel.org</organizationUrl>
+ <roles>
+ <role>devel</role>
+ </roles>
+ <timezone>-1</timezone>
+ <properties>
+ <developer>yes</developer>
+ </properties>
+ </developer>
+ </developers>
+ <contributors>
+ <contributor>
+ <name>project-contributor</name>
+ <email>contributor@</email>
+ <url>http://contributor</url>
+ <organization>contributor</organization>
+ <organizationUrl>http://contrib.org</organizationUrl>
+ <roles>
+ <role>contrib</role>
+ </roles>
+ <timezone>+1</timezone>
+ <properties>
+ <contributor>yes</contributor>
+ </properties>
+ </contributor>
+ </contributors>
+
+ <mailingLists>
+ <mailingList>
+ <name>project-mailing-list</name>
+ <subscribe>subscribe@</subscribe>
+ <unsubscribe>unsubscribe@</unsubscribe>
+ <post>post@</post>
+ <archive>mail-archive</archive>
+ <otherArchives>
+ <otherArchive>other-archive</otherArchive>
+ </otherArchives>
+ </mailingList>
+ </mailingLists>
+
+ <prerequisites>
+ <maven>2.0.1</maven>
+ </prerequisites>
+
+ <scm>
+ <url>http://project.url/trunk</url>
+ <connection>http://project.url/scm</connection>
+ <developerConnection>https://project.url/scm</developerConnection>
+ <tag>TAG</tag>
+ </scm>
+ <issueManagement>
+ <system>issues</system>
+ <url>http://project.url/issues</url>
+ </issueManagement>
+ <ciManagement>
+ <system>ci</system>
+ <url>http://project.url/ci</url>
+ <notifiers>
+ <notifier>
+ <type>irc</type>
+ <address>ci@</address>
+ <sendOnError>true</sendOnError>
+ <sendOnFailure>false</sendOnFailure>
+ <sendOnSuccess>false</sendOnSuccess>
+ <sendOnWarning>false</sendOnWarning>
+ <configuration>
+ <ciProp>ci</ciProp>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <distributionManagement>
+ <repository>
+ <url>http://project.url/dist</url>
+ <id>project.distros</id>
+ <name>distros</name>
+ </repository>
+ <snapshotRepository>
+ <url>http://project.url/snaps</url>
+ <id>project.snaps</id>
+ <name>snaps</name>
+ <uniqueVersion>false</uniqueVersion>
+ </snapshotRepository>
+ <site>
+ <url>http://project.url/site</url>
+ <id>project.site</id>
+ <name>docs</name>
+ </site>
+ <downloadUrl>http://project.url/download</downloadUrl>
+ <relocation>
+ <groupId>reloc-gid</groupId>
+ <artifactId>reloc-aid</artifactId>
+ <version>reloc-version</version>
+ <message>project-reloc-msg</message>
+ </relocation>
+ </distributionManagement>
+
+ <modules>
+ <module>sub</module>
+ </modules>
+
+ <properties>
+ <itProperty>project-property</itProperty>
+ </properties>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>managed-dep</artifactId>
+ <version>0.1</version>
+ <type>war</type>
+ <scope>runtime</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>excluded-managed-dep</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>dep</artifactId>
+ <version>0.2</version>
+ <type>ejb</type>
+ <scope>test</scope>
+ <optional>true</optional>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>excluded-dep</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+
+ <repositories>
+ <repository>
+ <id>project-remote-repo</id>
+ <url>http://project.url/remote</url>
+ <name>repo</name>
+ </repository>
+ </repositories>
+
+ <build>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.its.ext</groupId>
+ <artifactId>ext</artifactId>
+ <version>3.0</version>
+ </extension>
+ </extensions>
+
+ <defaultGoal>test</defaultGoal>
+ <directory>build</directory>
+ <sourceDirectory>sources/main</sourceDirectory>
+ <scriptSourceDirectory>sources/scripts</scriptSourceDirectory>
+ <testSourceDirectory>sources/test</testSourceDirectory>
+ <outputDirectory>build/main</outputDirectory>
+ <testOutputDirectory>build/test</testOutputDirectory>
+ <finalName>coreit</finalName>
+ <resources>
+ <resource>
+ <directory>res/main</directory>
+ <filtering>true</filtering>
+ <targetPath>main</targetPath>
+ <includes>
+ <include>main.included</include>
+ </includes>
+ <excludes>
+ <exclude>main.excluded</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <testResources>
+ <testResource>
+ <directory>res/test</directory>
+ <filtering>true</filtering>
+ <targetPath>test</targetPath>
+ <includes>
+ <include>test.included</include>
+ </includes>
+ <excludes>
+ <exclude>test.excluded</exclude>
+ </excludes>
+ </testResource>
+ </testResources>
+ <filters>
+ <filter>src/main/filter/it.properties</filter>
+ </filters>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-build</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <outputFile>test.properties</outputFile>
+ </configuration>
+ <executions>
+ <execution>
+ <id>test</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>eval</goal>
+ </goals>
+ <configuration>
+ <outputFile>pom.properties</outputFile>
+ </configuration>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>build-plugin-dep</artifactId>
+ <version>0.3</version>
+ <type>zip</type>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>excluded-build-plugin-dep</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <excludeDefaults>true</excludeDefaults>
+ <outputDirectory>docs</outputDirectory>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-reporting</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <configuration>
+ <outputFile>test.html</outputFile>
+ </configuration>
+ <reportSets>
+ <reportSet>
+ <id>it</id>
+ <reports>
+ <report>run</report>
+ </reports>
+ <configuration>
+ <outputFile>index.html</outputFile>
+ </configuration>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ </plugins>
+ </reporting>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/config-with-plugin-mng/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/config-with-plugin-mng/pom.xml
new file mode 100644
index 00000000..e13c8a89
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/config-with-plugin-mng/pom.xml
@@ -0,0 +1,39 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>nexus.xml</id>
+ <configuration>
+ <version>1.0.8</version>
+ </configuration>
+ </execution>
+ <execution>
+ <id>security.xml</id>
+ <configuration>
+ <version>1.0.0</version>
+ <model>src/main/mdo/security.xml</model>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>1.0-alpha-21</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/consecutive_empty_elements/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/consecutive_empty_elements/pom.xml
new file mode 100644
index 00000000..16d1968f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/consecutive_empty_elements/pom.xml
@@ -0,0 +1,14 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>test</groupId>
+ <artifactId>artifact</artifactId>
+ <version>1.0</version>
+
+ <developers>
+ <developer>
+ <organization/>
+ <organizationUrl/>
+ </developer>
+ </developers>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/contributors-inheritance/child-2/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/contributors-inheritance/child-2/pom.xml
new file mode 100644
index 00000000..745289fd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/contributors-inheritance/child-2/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <!--
+ While <contributors> are inherited, they are not aggregated, only the child elements are used.
+ -->
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>parent-1</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <groupId>org.apache.maven.its.mng3843.child</groupId>
+ <artifactId>child-2</artifactId>
+ <version>0.2</version>
+ <packaging>jar</packaging>
+
+ <contributors>
+ <contributor>
+ <name>child-contributor</name>
+ </contributor>
+ </contributors>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/contributors-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/contributors-inheritance/pom.xml
new file mode 100644
index 00000000..1f65eb5f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/contributors-inheritance/pom.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>parent-1</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <contributors>
+ <contributor>
+ <name>parent-contributor</name>
+ </contributor>
+ </contributors>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-inheritance/maven-parent.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-inheritance/maven-parent.xml
new file mode 100644
index 00000000..6d642626
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-inheritance/maven-parent.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-parent</artifactId>
+ <version>11</version>
+ <packaging>pom</packaging>
+
+ <name>Apache Maven</name>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-inheritance/pom.xml
new file mode 100644
index 00000000..c2c061c3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-inheritance/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-parent</artifactId>
+ <version>11</version>
+ <relativePath>maven-parent.xml</relativePath>
+ </parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <properties>
+ <junitVersion>3.8.1</junitVersion>
+ </properties>
+ <!--start-->
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junitVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <!--end-->
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-inheritance/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-inheritance/sub/pom.xml
new file mode 100644
index 00000000..788c5a72
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-inheritance/sub/pom.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language
+ governing permissions and limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>maven</artifactId>
+ <groupId>org.apache.maven</groupId>
+ <version>3.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project-builder</artifactId>
+ <version>3.0-SNAPSHOT</version>
+ <name>Maven Project Builder</name>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.4</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-management-with-interpolation/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-management-with-interpolation/pom.xml
new file mode 100644
index 00000000..49ffab5a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-management-with-interpolation/pom.xml
@@ -0,0 +1,19 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>asm-parent</artifactId>
+ <groupId>asm</groupId>
+ <version>3.0</version>
+ <packaging>pom</packaging>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <artifactId>asm-util</artifactId>
+ <groupId>${project.groupId}</groupId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-management-with-interpolation/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-management-with-interpolation/sub/pom.xml
new file mode 100644
index 00000000..2423568e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-management-with-interpolation/sub/pom.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?><project>
+ <parent>
+ <artifactId>asm-parent</artifactId>
+ <groupId>asm</groupId>
+ <version>3.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>asm-xml</artifactId>
+ <version>3.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>asm</groupId>
+ <artifactId>asm-util</artifactId>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-order/w-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-order/w-plugin-mngt/pom.xml
new file mode 100644
index 00000000..5882ab5c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-order/w-plugin-mngt/pom.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4003</groupId>
+ <artifactId>test</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-4003</name>
+ <description>
+ Verify that dependencies survive the project construction in the POM order.
+ </description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4003</groupId>
+ <artifactId>a</artifactId>
+ <version>1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4003</groupId>
+ <artifactId>c</artifactId>
+ <version>1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4003</groupId>
+ <artifactId>b</artifactId>
+ <version>1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4003</groupId>
+ <artifactId>d</artifactId>
+ <version>1</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <!-- NOTE: The combination with a plugin management section is an essential part of the test -->
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-order/wo-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-order/wo-plugin-mngt/pom.xml
new file mode 100644
index 00000000..57bd6d0f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-order/wo-plugin-mngt/pom.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4003</groupId>
+ <artifactId>test</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-4003</name>
+ <description>
+ Verify that dependencies survive the project construction in the POM order.
+ </description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4003</groupId>
+ <artifactId>a</artifactId>
+ <version>1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4003</groupId>
+ <artifactId>c</artifactId>
+ <version>1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4003</groupId>
+ <artifactId>b</artifactId>
+ <version>1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4003</groupId>
+ <artifactId>d</artifactId>
+ <version>1</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <!-- NOTE: The combination with a plugin section is an essential part of the test -->
+ <plugins>
+ <plugin>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope-inheritance/pom.xml
new file mode 100644
index 00000000..9f2ab958
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope-inheritance/pom.xml
@@ -0,0 +1,16 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>p0</artifactId>
+ <groupId>maven</groupId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <version>1.0</version>
+ <artifactId>a</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope-inheritance/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope-inheritance/sub/pom.xml
new file mode 100644
index 00000000..80c5570c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope-inheritance/sub/pom.xml
@@ -0,0 +1,19 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>p1</artifactId>
+ <version>1.0</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <version>1.0</version>
+ <artifactId>a</artifactId>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope/pom.xml
new file mode 100644
index 00000000..0f9ae5c6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope/pom.xml
@@ -0,0 +1,18 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t10</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <name>p0</name>
+ <version>1.0</version>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t10-a</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope/sub/pom.xml
new file mode 100644
index 00000000..8cec33d1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope/sub/pom.xml
@@ -0,0 +1,24 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven-t10</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-t10</groupId>
+ <artifactId>p1</artifactId>
+ <packaging>pom</packaging>
+ <name>p1</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>t10-a</artifactId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/developers-inheritance/child-2/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/developers-inheritance/child-2/pom.xml
new file mode 100644
index 00000000..dad2375b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/developers-inheritance/child-2/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <!--
+ While <developers> are inherited, they are not aggregated, only the child elements are used.
+ -->
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>parent-1</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <groupId>org.apache.maven.its.mng3843.child</groupId>
+ <artifactId>child-2</artifactId>
+ <version>0.2</version>
+ <packaging>jar</packaging>
+
+ <developers>
+ <developer>
+ <name>child-developer</name>
+ </developer>
+ </developers>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/developers-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/developers-inheritance/pom.xml
new file mode 100644
index 00000000..6e7c44d1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/developers-inheritance/pom.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>parent-1</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <developers>
+ <developer>
+ <name>parent-developer</name>
+ </developer>
+ </developers>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/distribution-management/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/distribution-management/pom.xml
new file mode 100644
index 00000000..1a0acb08
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/distribution-management/pom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.it0061</groupId>
+ <artifactId>maven-it-it0061</artifactId>
+ <version>1.0</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: it0061</name>
+
+ <distributionManagement>
+ <repository>
+ <id>test</id>
+ <url>file:target/test-repo</url>
+ <layout>legacy</layout>
+ </repository>
+ </distributionManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dual-execution-ids/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dual-execution-ids/pom.xml
new file mode 100644
index 00000000..8833c089
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dual-execution-ids/pom.xml
@@ -0,0 +1,28 @@
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-parent</artifactId>
+ <version>1.0.0-alpha-3-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-remote-resources-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>process</goal>
+ </goals>
+ <configuration>
+ <resourceBundles>
+ <resourceBundle>org.apache:apache-jar-resource-bundle:1.5</resourceBundle>
+ </resourceBundles>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dual-execution-ids/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dual-execution-ids/sub/pom.xml
new file mode 100644
index 00000000..6ebd5994
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dual-execution-ids/sub/pom.xml
@@ -0,0 +1,43 @@
+<project>
+
+<parent>
+ <artifactId>mercury-parent</artifactId>
+ <groupId>org.apache.maven.mercury</groupId>
+ <version>1.0.0-alpha-3-SNAPSHOT</version>
+</parent>
+
+<modelVersion>4.0.0</modelVersion>
+<groupId>org.apache.maven.mercury</groupId>
+<artifactId>mercury-util</artifactId>
+<name>Mercury Shared Utilities</name>
+<version>1.0.0-alpha-3-SNAPSHOT</version>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-remote-resources-plugin</artifactId>
+ <version>1.0</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-remote-resources-plugin</artifactId>
+ <version>1.0</version>
+ <executions>
+ <execution>
+ <id>default</id>
+ <goals>
+ <goal>process</goal>
+ </goals>
+ <configuration>
+ <resourceBundles>
+ <resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
+ </resourceBundles>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+</build>
+ </project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/duplicate-exclusions-dependency/nexus-parent.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/duplicate-exclusions-dependency/nexus-parent.xml
new file mode 100644
index 00000000..d2ac100c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/duplicate-exclusions-dependency/nexus-parent.xml
@@ -0,0 +1,29 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus-parent</artifactId>
+ <version>8-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <properties>
+ <plexus.version>1.0-beta-3.0.5-SNAPSHOT</plexus.version>
+ </properties>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>${plexus.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/duplicate-exclusions-dependency/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/duplicate-exclusions-dependency/pom.xml
new file mode 100644
index 00000000..b12db4f0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/duplicate-exclusions-dependency/pom.xml
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus-parent</artifactId>
+ <version>8-SNAPSHOT</version>
+ <relativePath>nexus-parent.xml</relativePath>
+ </parent>
+
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus</artifactId>
+ <packaging>pom</packaging>
+ <name>Nexus Repository Manager</name>
+ <version>1.3.0-SNAPSHOT</version>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <scope>provided</scope>
+ <version>${plexus.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/duplicate-exclusions-dependency/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/duplicate-exclusions-dependency/sub/pom.xml
new file mode 100644
index 00000000..37b166d1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/duplicate-exclusions-dependency/sub/pom.xml
@@ -0,0 +1,16 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>nexus-proxy</artifactId>
+ <dependencies>
+ <!-- For App basic -->
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/empty-distMng-repo-url/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/empty-distMng-repo-url/pom.xml
new file mode 100644
index 00000000..91ce38df
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/empty-distMng-repo-url/pom.xml
@@ -0,0 +1,15 @@
+<project >
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-parent</artifactId>
+ <packaging>pom</packaging>
+ <version>11</version>
+
+ <distributionManagement>
+ <repository>
+ <id>dummy</id>
+ <name>Dummy to avoid accidental deploys</name>
+ <url />
+ </repository>
+ </distributionManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/empty-scm/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/empty-scm/pom.xml
new file mode 100644
index 00000000..a0462ddd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/empty-scm/pom.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <!--
+ This (almost) minimal POM tests direct inheritance from the super POM.
+ -->
+
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>test-1</artifactId>
+ <version>0.1</version>
+
+ <name>test</name>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-expression</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <goals>
+ <goal>eval</goal>
+ </goals>
+ <configuration>
+ <outputFile>target/pom.properties</outputFile>
+ <expressions>
+ <expression>project</expression>
+ </expressions>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/equal-plugin-deps/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/equal-plugin-deps/pom.xml
new file mode 100644
index 00000000..d33b2bae
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/equal-plugin-deps/pom.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3838</groupId>
+ <artifactId>test</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-3838</name>
+ <description>
+ Verify that using the same dependency for different plugins doesn't blow up the project builder.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <dependencies>
+ <!-- NOTE: That's exactly the same dependency as for the other plugin. -->
+ <dependency>
+ <groupId>org.apache.maven.its.mng3838</groupId>
+ <artifactId>dep</artifactId>
+ <version>123</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-b</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <dependencies>
+ <!-- NOTE: That's exactly the same dependency as for the other plugin. -->
+ <dependency>
+ <groupId>org.apache.maven.its.mng3838</groupId>
+ <artifactId>dep</artifactId>
+ <version>123</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/equal-plugin-exec-ids/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/equal-plugin-exec-ids/pom.xml
new file mode 100644
index 00000000..a05d45d0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/equal-plugin-exec-ids/pom.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3821</groupId>
+ <artifactId>test</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-3821</name>
+ <description>
+ Verify that using the same id for executions/reportsets of different plugins doesn't blow up the project builder.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>the-one-and-only-id</id>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-b</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>the-one-and-only-id</id>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <reportSets>
+ <reportSet>
+ <id>the-one-and-only-id</id>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-b</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <reportSets>
+ <reportSet>
+ <id>the-one-and-only-id</id>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ </plugins>
+ </reporting>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/execution-configuration-join/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/execution-configuration-join/pom.xml
new file mode 100644
index 00000000..28defaa2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/execution-configuration-join/pom.xml
@@ -0,0 +1,35 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>1.0-alpha-21</version>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>1.0-alpha-21</version>
+ <executions>
+ <execution>
+ <configuration>
+ <fileset dir="${basedir}">
+ <include name="LICENSE.txt" />
+ <include name="NOTICE.txt" />
+ </fileset>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/execution-configuration-subcollections/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/execution-configuration-subcollections/pom.xml
new file mode 100644
index 00000000..e5b19d4e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/execution-configuration-subcollections/pom.xml
@@ -0,0 +1,42 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>test</groupId>
+ <artifactId>nexus</artifactId>
+ <packaging>pom</packaging>
+ <name>Nexus Repository Manager</name>
+ <version>1.1-M1</version>
+
+ <!-- build information for the project -->
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-enforcer-plugin</artifactId>
+ <version>1.0</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>enforce</goal>
+ </goals>
+ <id>enforce</id>
+ <configuration>
+ <rules>
+ <bannedDependencies>
+ <excludes>
+ <exclude>commons-logging:*</exclude>
+ </excludes>
+ <message>a</message>
+ </bannedDependencies>
+ <bannedDependencies>
+ <excludes>
+ <exclude>*:plexus-component-api</exclude>
+ </excludes>
+ </bannedDependencies>
+ </rules>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/execution-configuration/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/execution-configuration/pom.xml
new file mode 100644
index 00000000..130174d5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/execution-configuration/pom.xml
@@ -0,0 +1,58 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>1.0-alpha-21</version>
+ <executions>
+ <execution>
+ <id>nexus.xml</id>
+ <goals>
+ <goal>java</goal>
+ <goal>xpp3-reader</goal>
+ <goal>xpp3-writer</goal>
+ </goals>
+ <configuration>
+ <version>1.0.8</version>
+ <packagedVersions>
+ <packagedVersion>1.0.0</packagedVersion>
+ <packagedVersion>1.0.1</packagedVersion>
+ <packagedVersion>1.0.6</packagedVersion>
+ </packagedVersions>
+ <model>src/main/mdo/nexus.xml</model>
+ </configuration>
+ </execution>
+
+ <execution>
+ <id>security.xml</id>
+ <goals>
+ <goal>java1</goal>
+ <goal>xpp3-reader1</goal>
+ <goal>xpp3-writer1</goal>
+ </goals>
+ <configuration>
+ <version>1.0.0</version>
+ <model>src/main/mdo/security.xml</model>
+ </configuration>
+ </execution>
+
+ </executions>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>1.0-alpha-21</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/foo/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/foo/sub/pom.xml
new file mode 100644
index 00000000..c5e3d9a6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/foo/sub/pom.xml
@@ -0,0 +1,418 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <!--
+ <parent>
+ <groupId>org.apache.maven.archetype</groupId>
+ <artifactId>maven-archetype</artifactId>
+ <version>2.0-alpha-1</version>
+ </parent>
+ -->
+ <artifactId>archetype-common</artifactId>
+ <name>Maven Archetype Common</name>
+ <packaging>jar</packaging>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>net.sourceforge.jchardet</groupId>
+ <artifactId>jchardet</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>jdom</groupId>
+ <artifactId>jdom</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-plugin-testing-harness</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-velocity</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>velocity</groupId>
+ <artifactId>velocity</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.cargo</groupId>
+ <artifactId>cargo-core-api-container</artifactId>
+ <version>0.9</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.cargo</groupId>
+ <artifactId>cargo-core-api-util</artifactId>
+ <version>0.9</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.cargo</groupId>
+ <artifactId>cargo-core-api-generic</artifactId>
+ <version>0.9</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.cargo</groupId>
+ <artifactId>cargo-core-api-module</artifactId>
+ <version>0.9</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.cargo</groupId>
+ <artifactId>cargo-core-container-jetty</artifactId>
+ <version>0.9</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty</artifactId>
+ <version>6.1.4</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http</artifactId>
+ <version>1.0-beta-2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>archetype-repository</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>archetype-proxy</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <testResources>
+ <testResource>
+ <directory>src/test/resources</directory>
+ <filtering>true</filtering>
+ </testResource>
+ </testResources>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>1.0-alpha-14</version>
+ <executions>
+ <execution>
+ <id>archetype-common</id>
+ <goals>
+ <goal>java</goal>
+ <goal>xsd</goal>
+ <goal>xpp3-reader</goal>
+ <goal>xpp3-writer</goal>
+ </goals>
+ <configuration>
+ <version>1.0.0</version>
+ <model>src/main/mdo/archetype-common.mdo</model>
+ </configuration>
+ </execution>
+ <execution>
+ <id>archetype-registry</id>
+ <goals>
+ <goal>java</goal>
+ <goal>xsd</goal>
+ <goal>xpp3-reader</goal>
+ <goal>xpp3-writer</goal>
+ </goals>
+ <configuration>
+ <version>1.0.0</version>
+ <model>src/main/mdo/archetype-registry.mdo</model>
+ </configuration>
+ </execution>
+ <execution>
+ <id>archetype-descriptor</id>
+ <goals>
+ <goal>java</goal>
+ <goal>xsd</goal>
+ <goal>xpp3-reader</goal>
+ <goal>xpp3-writer</goal>
+ </goals>
+ <configuration>
+ <version>1.0.0</version>
+ <model>src/main/mdo/archetype-descriptor.mdo</model>
+ </configuration>
+ </execution>
+ <execution>
+ <id>archetype-catalog</id>
+ <goals>
+ <goal>java</goal>
+ <goal>xsd</goal>
+ <goal>xpp3-reader</goal>
+ <goal>xpp3-writer</goal>
+ </goals>
+ <configuration>
+ <version>1.0.0</version>
+ <model>src/main/mdo/archetype-catalog.mdo</model>
+ </configuration>
+ </execution>
+ <execution>
+ <id>archetype-old</id>
+ <goals>
+ <goal>java</goal>
+ <goal>xsd</goal>
+ <goal>xpp3-reader</goal>
+ <goal>xpp3-writer</goal>
+ </goals>
+ <configuration>
+ <version>1.0.0</version>
+ <model>src/main/mdo/archetype.mdo</model>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy</id>
+ <phase>process-test-resources</phase>
+ <goals>
+ <goal>copy-dependencies</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.build.directory}/wars</outputDirectory>
+ <overWriteReleases>true</overWriteReleases>
+ <overWriteSnapshots>true</overWriteSnapshots>
+ <includeTypes>war</includeTypes>
+ <stripVersion>true</stripVersion>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>ant</groupId>
+ <artifactId>ant-antlr</artifactId>
+ <version>1.6.5</version>
+ </dependency>
+ </dependencies>
+
+ <executions>
+ <execution>
+ <id>archetype-test</id>
+ <phase>process-test-resources</phase>
+ <configuration>
+ <tasks>
+ <property name="test.projects.name" value="basic" />
+ <property name="test.projects.version" value="1.0" />
+ <property name="test.projects.archetype" value="${test.projects.name}-${test.projects.version}" />
+ <property name="test.projects.source.directory" value="${test.projects.archetype}" />
+ <property name="test.projects.target.directory" value="archetypes/${test.projects.name}/${test.projects.version}" />
+ <property name="test.projects.repository" value="repositories/central" />
+
+ <mkdir dir="${basedir}/target/test-classes/${test.projects.repository}/${test.projects.target.directory}/" />
+
+ <jar destfile="${basedir}/target/test-classes/${test.projects.repository}/${test.projects.target.directory}/${test.projects.archetype}.jar" basedir="${basedir}/src/test/archetypes/${test.projects.source.directory}/" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ <execution>
+ <id>archetype-test-partial</id>
+ <phase>process-test-resources</phase>
+ <configuration>
+ <tasks>
+ <property name="test.projects.name" value="partial" />
+ <property name="test.projects.version" value="1.0" />
+ <property name="test.projects.archetype" value="${test.projects.name}-${test.projects.version}" />
+ <property name="test.projects.source.directory" value="${test.projects.archetype}" />
+ <property name="test.projects.target.directory" value="archetypes/${test.projects.name}/${test.projects.version}" />
+ <property name="test.projects.repository" value="repositories/central" />
+ <mkdir dir="${basedir}/target/test-classes/${test.projects.repository}/${test.projects.target.directory}/" />
+
+ <jar destfile="${basedir}/target/test-classes/${test.projects.repository}/${test.projects.target.directory}/${test.projects.archetype}.jar" basedir="${basedir}/src/test/archetypes/${test.projects.source.directory}/" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ <execution>
+ <id>archetype-test-site</id>
+ <phase>process-test-resources</phase>
+ <configuration>
+ <tasks>
+ <property name="test.projects.name" value="site" />
+ <property name="test.projects.version" value="1.0" />
+ <property name="test.projects.archetype" value="${test.projects.name}-${test.projects.version}" />
+ <property name="test.projects.source.directory" value="${test.projects.archetype}" />
+ <property name="test.projects.target.directory" value="archetypes/${test.projects.name}/${test.projects.version}" />
+ <property name="test.projects.repository" value="repositories/central" />
+
+ <mkdir dir="${basedir}/target/test-classes/${test.projects.repository}/${test.projects.target.directory}/" />
+
+ <jar destfile="${basedir}/target/test-classes/${test.projects.repository}/${test.projects.target.directory}/${test.projects.archetype}.jar" basedir="${basedir}/src/test/archetypes/${test.projects.source.directory}/" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ <execution>
+ <id>archetype-test-old</id>
+ <phase>process-test-resources</phase>
+ <configuration>
+ <tasks>
+ <property name="test.projects.name" value="old" />
+ <property name="test.projects.version" value="1.0" />
+ <property name="test.projects.archetype" value="${test.projects.name}-${test.projects.version}" />
+ <property name="test.projects.source.directory" value="${test.projects.archetype}" />
+ <property name="test.projects.target.directory" value="archetypes/${test.projects.name}/${test.projects.version}" />
+ <property name="test.projects.repository" value="repositories/central" />
+
+ <mkdir dir="${basedir}/target/test-classes/${test.projects.repository}/${test.projects.target.directory}/" />
+
+ <jar destfile="${basedir}/target/test-classes/${test.projects.repository}/${test.projects.target.directory}/${test.projects.archetype}.jar" basedir="${basedir}/src/test/archetypes/${test.projects.source.directory}/" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ <execution>
+ <id>archetype-test-fileset</id>
+ <phase>process-test-resources</phase>
+ <configuration>
+ <tasks>
+ <property name="test.projects.name" value="fileset" />
+ <property name="test.projects.version" value="1.0" />
+ <property name="test.projects.archetype" value="${test.projects.name}-${test.projects.version}" />
+ <property name="test.projects.source.directory" value="${test.projects.archetype}" />
+ <property name="test.projects.target.directory" value="archetypes/${test.projects.name}/${test.projects.version}" />
+ <property name="test.projects.repository" value="repositories/central" />
+
+ <mkdir dir="${basedir}/target/test-classes/${test.projects.repository}/${test.projects.target.directory}/" />
+
+ <jar destfile="${basedir}/target/test-classes/${test.projects.repository}/${test.projects.target.directory}/${test.projects.archetype}.jar" basedir="${basedir}/src/test/archetypes/${test.projects.source.directory}/" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ <execution>
+ <id>repository-metadata</id>
+ <phase>process-test-resources</phase>
+ <configuration>
+ <tasks>
+ <property name="test.projects.source.directory" value="${test.projects.archetype}" />
+ <property name="test.projects.target.directory" value="archetypes" />
+ <property name="test.projects.repository" value="repositories/central" />
+
+ <mkdir dir="${basedir}/target/test-classes/${test.projects.repository}/${test.projects.target.directory}" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>**/ArchetyperRoundtripTest.java</exclude>
+ <exclude>**/ArchetyperRoundtripWithProxyTest.java</exclude>
+ <exclude>**/DefaultRepositoryCrawlerTest.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ </plugins>
+ </reporting>
+
+ <profiles>
+ <profile>
+ <id>internal-catalog</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <includes>
+ <include>**/*Verification.java</include>
+ </includes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/full-interpolation/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/full-interpolation/pom.xml
new file mode 100644
index 00000000..503dadb9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/full-interpolation/pom.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3833</groupId>
+ <artifactId>coreit</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-3833</name>
+ <description>
+ Test that POM interpolation fully interpolates all properties in data flow chain, i.e. where property
+ A depends on property B, and property B depends on property C and so on.
+ </description>
+
+ <properties>
+ <!--
+ NOTE: Both the ordering (i.e. neither ascending nor descending) and the number of properties is crucial to
+ exhibit the bug.
+ -->
+ <property23>${property22}</property23>
+ <property21>${property20}</property21>
+ <property19>${property18}</property19>
+ <property17>${property16}</property17>
+ <property15>${property14}</property15>
+ <property13>${property12}</property13>
+ <property11>${property10}</property11>
+ <property09>${property08}</property09>
+ <property07>${property06}</property07>
+ <property05>${property04}</property05>
+ <property03>${property02}</property03>
+ <property01>${property00}</property01>
+ <property00>PASSED</property00>
+ <property02>${property01}</property02>
+ <property04>${property03}</property04>
+ <property06>${property05}</property06>
+ <property10>${property09}</property10>
+ <property12>${property11}</property12>
+ <property08>${property07}</property08>
+ <property14>${property13}</property14>
+ <property16>${property15}</property16>
+ <property18>${property17}</property18>
+ <property20>${property19}</property20>
+ <property22>${property21}</property22>
+ </properties>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/id-container-joining-with-empty-elements/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/id-container-joining-with-empty-elements/pom.xml
new file mode 100644
index 00000000..4db43cd4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/id-container-joining-with-empty-elements/pom.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3979</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3979</name>
+ <description>
+ Test that during inheritance the merging/joining of sub trees with equal identifier doesn't crash if the parent
+ POM has a non-empty element and the child POM has an empty element to join.
+ </description>
+
+ <properties>
+ <prop0>test</prop0>
+ </properties>
+
+ <repositories>
+ <repository>
+ <id>equal-repo-id</id>
+ <url>http://maven.apache.org/null</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ <releases>
+ <checksumPolicy>ignore</checksumPolicy>
+ </releases>
+ </repository>
+ </repositories>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-log-file</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>equal-build-exec-id</id>
+ <phase>initialize</phase>
+ <goals>
+ <goal>reset</goal>
+ </goals>
+ <configuration>
+ <logFile>target/exec.log</logFile>
+ <string>test</string>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-log-file</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <reportSets>
+ <reportSet>
+ <id>equal-report-exec-id</id>
+ <reports>
+ <report>reset</report>
+ </reports>
+ <configuration>
+ <logFile>target/exec.log</logFile>
+ <string>test</string>
+ </configuration>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ </plugins>
+ </reporting>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/id-container-joining-with-empty-elements/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/id-container-joining-with-empty-elements/sub/pom.xml
new file mode 100644
index 00000000..e65d26c2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/id-container-joining-with-empty-elements/sub/pom.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3979</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child</artifactId>
+
+ <name>Maven Integration Test :: MNG-3979</name>
+ <description>
+ Test that during inheritance the merging/joining of sub trees with equal identifier doesn't crash if the parent
+ POM has a non-empty element and the child POM has an empty element to join.
+ </description>
+
+ <properties/>
+
+ <repositories>
+ <repository>
+ <id>equal-repo-id</id>
+ <url>file:///${basedir}/null</url>
+ <snapshots/>
+ <releases/>
+ </repository>
+ </repositories>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-log-file</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>equal-build-exec-id</id>
+ <phase>initialize</phase>
+ <goals/>
+ <configuration/>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-log-file</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <reportSets>
+ <reportSet>
+ <id>equal-report-exec-id</id>
+ <reports/>
+ <configuration/>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ </plugins>
+ </reporting>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/active-profile/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/active-profile/pom.xml
new file mode 100644
index 00000000..640cf288
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/active-profile/pom.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4102</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-4102</name>
+ <description>
+ Verify that the effective value of an inherited property reflects the values of any nested property
+ as defined by the child. This boils down to the order of inheritance and (parent) interpolation.
+ </description>
+
+ <properties>
+ <overridden>PARENT</overridden>
+ <!-- Test the effective value of this property in the child when "overridden" is defined by child as well -->
+ <interpolated>${overridden}</interpolated>
+ </properties>
+
+ <profiles>
+ <profile>
+ <id>it-parent</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/active-profile/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/active-profile/sub/pom.xml
new file mode 100644
index 00000000..2aa40ded
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/active-profile/sub/pom.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng4102</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <groupId>org.apache.maven.its.mng4102</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-4102 :: Child</name>
+ <description>
+ Verify that the effective value of an inherited property reflects the values of any nested property
+ as defined by the child. This boils down to the order of inheritance and (parent) interpolation.
+ </description>
+
+ <properties>
+ <overridden>CHILD</overridden>
+ </properties>
+
+ <profiles>
+ <profile>
+ <id>it-child</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/no-profile/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/no-profile/pom.xml
new file mode 100644
index 00000000..3e11a6d6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/no-profile/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4102</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-4102</name>
+ <description>
+ Verify that the effective value of an inherited property reflects the values of any nested property
+ as defined by the child. This boils down to the order of inheritance and (parent) interpolation.
+ </description>
+
+ <properties>
+ <overridden>PARENT</overridden>
+ <!-- Test the effective value of this property in the child when "overridden" is defined by child as well -->
+ <interpolated>${overridden}</interpolated>
+ </properties>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/no-profile/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/no-profile/sub/pom.xml
new file mode 100644
index 00000000..49c8fd21
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/no-profile/sub/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng4102</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <groupId>org.apache.maven.its.mng4102</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-4102 :: Child</name>
+ <description>
+ Verify that the effective value of an inherited property reflects the values of any nested property
+ as defined by the child. This boils down to the order of inheritance and (parent) interpolation.
+ </description>
+
+ <properties>
+ <overridden>CHILD</overridden>
+ </properties>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/interpolation-cli-wins/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/interpolation-cli-wins/pom.xml
new file mode 100644
index 00000000..39d8d9f8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/interpolation-cli-wins/pom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4208</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-4208</name>
+ <description>
+ Test that CLI properties specified by the user override project properties during interpolation.
+ </description>
+
+ <properties>
+ <testProperty>FAILED</testProperty>
+ <interpolatedProperty>${testProperty}</interpolatedProperty>
+ </properties>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/jdk-activation/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/jdk-activation/pom.xml
new file mode 100644
index 00000000..c0431f58
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/jdk-activation/pom.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng1957</groupId>
+ <artifactId>test</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-1957</name>
+ <description>
+ Test that JDK profile activation allows version ranges.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-expression</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <goals>
+ <goal>eval</goal>
+ </goals>
+ <configuration>
+ <outputFile>target/jdk.properties</outputFile>
+ <expressions>
+ <expression>project/properties</expression>
+ </expressions>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>test-1</id>
+ <activation>
+ <jdk>[1.4,)</jdk>
+ </activation>
+ <properties>
+ <jdkProperty1>PASSED</jdkProperty1>
+ </properties>
+ </profile>
+ <profile>
+ <id>test-2</id>
+ <activation>
+ <jdk>(,100)</jdk>
+ </activation>
+ <properties>
+ <jdkProperty2>PASSED</jdkProperty2>
+ </properties>
+ </profile>
+ <profile>
+ <id>test-3</id>
+ <activation>
+ <jdk>(1.3,100)</jdk>
+ </activation>
+ <properties>
+ <jdkProperty3>PASSED</jdkProperty3>
+ </properties>
+ </profile>
+ <profile>
+ <id>test-4</id>
+ <activation>
+ <jdk>(100,)</jdk>
+ </activation>
+ <properties>
+ <jdkProperty4>FAILED</jdkProperty4>
+ </properties>
+ </profile>
+ <profile>
+ <id>test-5</id>
+ <activation>
+ <jdk>(,1.4)</jdk>
+ </activation>
+ <properties>
+ <jdkProperty5>FAILED</jdkProperty5>
+ </properties>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/join-different-containers-same-id/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/join-different-containers-same-id/pom.xml
new file mode 100644
index 00000000..b3f48caa
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/join-different-containers-same-id/pom.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>mng3984</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>MNG-3984</name>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-b</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>foo</id>
+ <goals>
+ <goal>a</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>foo</id>
+ <goals>
+ <goal>b</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/licenses-inheritance/child-2/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/licenses-inheritance/child-2/pom.xml
new file mode 100644
index 00000000..9fd30bf5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/licenses-inheritance/child-2/pom.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <!--
+ While <licenses> are inherited, they are not aggregated, only the child licenses are used.
+ -->
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>parent-1</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <groupId>org.apache.maven.its.mng3843.child</groupId>
+ <artifactId>child-2</artifactId>
+ <version>0.2</version>
+ <packaging>jar</packaging>
+
+ <licenses>
+ <license>
+ <name>child-license</name>
+ <url>http://child.url/license</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/licenses-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/licenses-inheritance/pom.xml
new file mode 100644
index 00000000..641bb37f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/licenses-inheritance/pom.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>parent-1</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <licenses>
+ <license>
+ <name>parent-license</name>
+ <url>http://parent.url/license</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/limited-inheritance/child/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/limited-inheritance/child/pom.xml
new file mode 100644
index 00000000..8e9e6237
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/limited-inheritance/child/pom.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3845</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child</artifactId>
+
+ <organization>
+ <name>child-org</name>
+ </organization>
+
+ <scm>
+ <developerConnection>https://child.url/scm</developerConnection>
+ </scm>
+ <issueManagement>
+ <url>http://child.url/issues</url>
+ </issueManagement>
+ <ciManagement>
+ <system>child-ci</system>
+ <url>http://child.url/ci</url>
+ </ciManagement>
+ <distributionManagement>
+ <repository>
+ <id>child-distros</id>
+ <url>ssh://child.url/distros</url>
+ </repository>
+ <snapshotRepository>
+ <id>child-snaps</id>
+ <url>ssh://child.url/snaps</url>
+ </snapshotRepository>
+ <site>
+ <id>child-site</id>
+ <url>scp://child.url/site</url>
+ </site>
+ </distributionManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/limited-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/limited-inheritance/pom.xml
new file mode 100644
index 00000000..8bbe6eae
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/limited-inheritance/pom.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3845</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3845</name>
+ <description>
+ Test that inheritance is all-or-nothing for certain sub-trees of the POM.
+ </description>
+
+ <organization>
+ <name>parent-org</name>
+ <url>http://parent.url/org</url>
+ </organization>
+
+ <scm>
+ <url>http://parent.url/viewvc</url>
+ <connection>http://parent.url/scm</connection>
+ <developerConnection>https://parent.url/scm</developerConnection>
+ <tag>parent-tag</tag>
+ </scm>
+ <issueManagement>
+ <system>parent-issues</system>
+ <url>http://parent.url/issues</url>
+ </issueManagement>
+ <ciManagement>
+ <system>parent-ci</system>
+ <url>http://parent.url/ci</url>
+ <notifiers>
+ <notifier>
+ <type>irc</type>
+ <sendOnError>true</sendOnError>
+ <sendOnFailure>true</sendOnFailure>
+ <sendOnSuccess>false</sendOnSuccess>
+ <sendOnWarning>false</sendOnWarning>
+ <configuration>
+ <address>irc://parent.url/#ci</address>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <distributionManagement>
+ <repository>
+ <id>parent-distros</id>
+ <name>parent-distros</name>
+ <url>ssh://parent.url/distros</url>
+ <uniqueVersion>false</uniqueVersion>
+ <layout>legacy</layout>
+ </repository>
+ <snapshotRepository>
+ <id>parent-snaps</id>
+ <name>parent-snaps</name>
+ <url>ssh://parent.url/snaps</url>
+ <uniqueVersion>false</uniqueVersion>
+ <layout>legacy</layout>
+ </snapshotRepository>
+ <site>
+ <id>parent-site</id>
+ <name>parent-site</name>
+ <url>scp://parent.url/site</url>
+ </site>
+ </distributionManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/mailing-lists-inheritance/child-2/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/mailing-lists-inheritance/child-2/pom.xml
new file mode 100644
index 00000000..95ce7fe6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/mailing-lists-inheritance/child-2/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <!--
+ While <mailingLists> are inherited, they are not aggregated, only the child elements are used.
+ -->
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>parent-1</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <groupId>org.apache.maven.its.mng3843.child</groupId>
+ <artifactId>child-2</artifactId>
+ <version>0.2</version>
+ <packaging>jar</packaging>
+
+ <mailingLists>
+ <mailingList>
+ <name>child-mailing-list</name>
+ </mailingList>
+ </mailingLists>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/mailing-lists-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/mailing-lists-inheritance/pom.xml
new file mode 100644
index 00000000..c9b05dfd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/mailing-lists-inheritance/pom.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>parent-1</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <mailingLists>
+ <mailingList>
+ <name>parent-mailing-list</name>
+ </mailingList>
+ </mailingLists>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/managed-profile-dependency/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/managed-profile-dependency/pom.xml
new file mode 100644
index 00000000..88c9813a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/managed-profile-dependency/pom.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4034</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-4034</name>
+ <description>
+ Verify that dependencies defined in profiles are subject to the dependency management of the parent.
+ </description>
+
+ <modules>
+ <module>sub</module>
+ </modules>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>maven-core-it-support</artifactId>
+ <version>1.3</version>
+ <scope>runtime</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/managed-profile-dependency/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/managed-profile-dependency/sub/pom.xml
new file mode 100644
index 00000000..88204fcd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/managed-profile-dependency/sub/pom.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng4034</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+
+ <groupId>org.apache.maven.its.mng4034</groupId>
+ <artifactId>child</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-4034</name>
+ <description>
+ Verify that dependencies defined in profiles are subject to the dependency management of the parent.
+ </description>
+
+ <profiles>
+ <profile>
+ <id>maven-core-it</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>maven-core-it-support</artifactId>
+ <!-- version should be injected from dependency management of parent -->
+ </dependency>
+ </dependencies>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-filter-order/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-filter-order/pom.xml
new file mode 100644
index 00000000..6f4df9ac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-filter-order/pom.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4008</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-4008</name>
+ <description>
+ Verify that filter definitions are properly merged.
+ </description>
+
+ <build>
+ <filters>
+ <!-- NOTE: The first filter is deliberately defined by the child as well, so should not be added twice -->
+ <filter>src/main/filters/child-a.properties</filter>
+ <filter>src/main/filters/parent-c.properties</filter>
+ <filter>src/main/filters/parent-b.properties</filter>
+ <filter>src/main/filters/parent-d.properties</filter>
+ </filters>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-filter-order/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-filter-order/sub/pom.xml
new file mode 100644
index 00000000..7e7155bf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-filter-order/sub/pom.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng4008</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0</version>
+ </parent>
+
+ <groupId>org.apache.maven.its.mng4008</groupId>
+ <artifactId>test</artifactId>
+ <version>1.0</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-4008</name>
+ <description>
+ Verify that filter definitions are properly merged.
+ </description>
+
+ <build>
+ <filters>
+ <filter>src/main/filters/child-a.properties</filter>
+ <filter>src/main/filters/child-c.properties</filter>
+ <filter>src/main/filters/child-b.properties</filter>
+ <filter>src/main/filters/child-d.properties</filter>
+ </filters>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mngt/pom.xml
new file mode 100644
index 00000000..aba6bdf0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mngt/pom.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3906</name>
+ <description>
+ Test that project-level plugin dependencies are properly merged during inheritance.
+ </description>
+
+ <build>
+ <!-- NOTE: This parent uses plugin management -->
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-class-loader</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>e</artifactId>
+ <version>1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>a</artifactId>
+ <version>1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>d</artifactId>
+ <version>1</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mngt/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mngt/sub/pom.xml
new file mode 100644
index 00000000..1877ea54
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mngt/sub/pom.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child</artifactId>
+
+ <name>Maven Integration Test :: MNG-3906</name>
+ <description>
+ Test that project-level plugin dependencies are properly merged during inheritance.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-class-loader</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>c</artifactId>
+ <version>1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>a</artifactId>
+ <version>2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>b</artifactId>
+ <version>1</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mngt/pom.xml
new file mode 100644
index 00000000..10226cfb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mngt/pom.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3906</name>
+ <description>
+ Test that project-level plugin dependencies are properly merged during inheritance.
+ </description>
+
+ <build>
+ <!-- NOTE: This parent does not use plugin management -->
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-class-loader</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>e</artifactId>
+ <version>1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>a</artifactId>
+ <version>1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>d</artifactId>
+ <version>1</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mngt/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mngt/sub/pom.xml
new file mode 100644
index 00000000..1877ea54
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mngt/sub/pom.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child</artifactId>
+
+ <name>Maven Integration Test :: MNG-3906</name>
+ <description>
+ Test that project-level plugin dependencies are properly merged during inheritance.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-class-loader</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>c</artifactId>
+ <version>1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>a</artifactId>
+ <version>2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3906</groupId>
+ <artifactId>b</artifactId>
+ <version>1</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mngt/pom.xml
new file mode 100644
index 00000000..fc09dba1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mngt/pom.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3937</groupId>
+ <artifactId>parent-2</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3937</name>
+ <description>
+ Test that during inheritance/merging of a plugin execution the goals specified by child and parent are properly
+ ordered.
+ </description>
+
+ <build>
+ <!-- This project uses plugin management for the test plugin -->
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>merge</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>parent-b</goal>
+ <goal>merged</goal>
+ <goal>parent-a</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mngt/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mngt/sub/pom.xml
new file mode 100644
index 00000000..2148aa9b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mngt/sub/pom.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3937</groupId>
+ <artifactId>parent-2</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child-2</artifactId>
+
+ <name>Maven Integration Test :: MNG-3937</name>
+ <description>
+ Test that during inheritance/merging of a plugin execution the goals specified by child and parent are properly
+ ordered.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>merge</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>child-a</goal>
+ <goal>merged</goal>
+ <goal>child-b</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mngt/pom.xml
new file mode 100644
index 00000000..b9c3f18b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mngt/pom.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3937</groupId>
+ <artifactId>parent-1</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3937</name>
+ <description>
+ Test that during inheritance/merging of a plugin execution the goals specified by child and parent are properly
+ ordered.
+ </description>
+
+ <build>
+ <!-- This project does not use plugin management for the test plugin -->
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>merge</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>parent-b</goal>
+ <goal>merged</goal>
+ <goal>parent-a</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mngt/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mngt/sub/pom.xml
new file mode 100644
index 00000000..fab233b2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mngt/sub/pom.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3937</groupId>
+ <artifactId>parent-1</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child-1</artifactId>
+
+ <name>Maven Integration Test :: MNG-3937</name>
+ <description>
+ Test that during inheritance/merging of a plugin execution the goals specified by child and parent are properly
+ ordered.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>merge</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>child-a</goal>
+ <goal>merged</goal>
+ <goal>child-b</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mngt/pom.xml
new file mode 100644
index 00000000..ee4dedcf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mngt/pom.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3925</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3925</name>
+ <description>
+ Test that plugin executions (in the same phase) are properly ordered after inheritance/merge with
+ parent executions.
+ </description>
+
+ <build>
+ <!-- This project uses plugin management for the test plugin -->
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>parent-1</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>parent-1</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>parent-2</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>parent-2</goal>
+ </goals>
+ </execution>
+ <execution>
+ <!-- NOTE: <id> deliberately omitted to use default value -->
+ <phase>validate</phase>
+ <goals>
+ <goal>parent-default</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mngt/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mngt/sub/pom.xml
new file mode 100644
index 00000000..bf777db9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mngt/sub/pom.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3925</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child</artifactId>
+
+ <name>Maven Integration Test :: MNG-3925</name>
+ <description>
+ Test that plugin executions (in the same phase) are properly ordered after inheritance/merge with
+ parent executions.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>child-1</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>child-1</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>child-2</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>child-2</goal>
+ </goals>
+ </execution>
+ <execution>
+ <!-- NOTE: <id> deliberately omitted to use default value -->
+ <phase>validate</phase>
+ <goals>
+ <goal>child-default</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mngt/pom.xml
new file mode 100644
index 00000000..a816975f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mngt/pom.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3925</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3925</name>
+ <description>
+ Test that plugin executions (in the same phase) are properly ordered after inheritance/merge with
+ parent executions.
+ </description>
+
+ <build>
+ <!-- This project does not use plugin management for the test plugin -->
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>parent-1</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>parent-1</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>parent-2</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>parent-2</goal>
+ </goals>
+ </execution>
+ <execution>
+ <!-- NOTE: <id> deliberately omitted to use default value -->
+ <phase>validate</phase>
+ <goals>
+ <goal>parent-default</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mngt/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mngt/sub/pom.xml
new file mode 100644
index 00000000..bf777db9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mngt/sub/pom.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3925</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child</artifactId>
+
+ <name>Maven Integration Test :: MNG-3925</name>
+ <description>
+ Test that plugin executions (in the same phase) are properly ordered after inheritance/merge with
+ parent executions.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>child-1</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>child-1</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>child-2</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>child-2</goal>
+ </goals>
+ </execution>
+ <execution>
+ <!-- NOTE: <id> deliberately omitted to use default value -->
+ <phase>validate</phase>
+ <goals>
+ <goal>child-default</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/micromailer/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/micromailer/pom.xml
new file mode 100644
index 00000000..780faac2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/micromailer/pom.xml
@@ -0,0 +1,124 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.sonatype.spice</groupId>
+ <artifactId>spice-parent</artifactId>
+ <version>11</version>
+ <relativePath>spice-parent-9.pom</relativePath>
+ </parent>
+
+ <groupId>org.sonatype.micromailer</groupId>
+ <artifactId>micromailer</artifactId>
+ <version>1.0.3</version>
+ <packaging>jar</packaging>
+ <name>Micro Mailer</name>
+ <!-- SCM -->
+ <scm>
+ <connection>scm:svn:http://svn.sonatype.org/spice/trunk/micromailer</connection>
+ <url>http://svn.sonatype.org/spice/trunk/micromailer</url>
+ <developerConnection>scm:svn:https://svn.sonatype.org/spice/trunk/micromailer</developerConnection>
+ </scm>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>1.0-alpha-47</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging-api</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.5.5</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+
+ <!-- Mail composition -->
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-velocity</artifactId>
+ <version>1.1.7</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>velocity</groupId>
+ <artifactId>velocity</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.velocity</groupId>
+ <artifactId>velocity</artifactId>
+ <version>1.5</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+
+ <!-- Mail sending -->
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ <version>1.4</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+
+ <!-- Testing -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.2</version>
+ <type>jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <version>1.3.8</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>child-descriptor</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/micromailer/spice-parent-9.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/micromailer/spice-parent-9.pom
new file mode 100644
index 00000000..695c3c93
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/micromailer/spice-parent-9.pom
@@ -0,0 +1,103 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.sonatype.spice</groupId>
+ <artifactId>spice-parent</artifactId>
+ <version>11</version>
+ <packaging>pom</packaging>
+ <name>Sonatype Spice Components</name>
+
+ <scm>
+ <connection>scm:svn:http://svn.sonatype.org/spice/trunk/spice-parent</connection>
+ <url>http://svn.sonatype.org/spice/trunk/spice-parent</url>
+ <developerConnection>scm:svn:https://svn.sonatype.org/spice/trunk/spice-parent</developerConnection>
+ </scm>
+
+ <properties>
+ <!-- 2008.12.07 Oleg: reverted to 6.1.12 as http transport only works with that version
+ | Please always sync with mercury-http-transport !!
+ -->
+ <jetty.version>6.1.12</jetty.version>
+ </properties>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>1.0-beta-1</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging-api</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-annotations</artifactId>
+ <version>1.0-beta-1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.5.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-client</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.5</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-metadata</artifactId>
+ <version>1.0-beta-1</version>
+ <executions>
+ <execution>
+ <id>process-classes</id>
+ <goals>
+ <goal>generate-metadata</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <version>1.3.8</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/multiple-filters/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/multiple-filters/pom.xml
new file mode 100644
index 00000000..1141efb5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/multiple-filters/pom.xml
@@ -0,0 +1,17 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>a</groupId>
+ <artifactId>b</artifactId>
+ <version>1.0</version>
+
+ <build>
+ <filters>
+ <filter>src/main/filters/a.properties</filter>
+ <filter>src/main/filters/c.properties</filter>
+ <filter>src/main/filters/b.properties</filter>
+ <filter>src/main/filters/d.properties</filter>
+ </filters>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/multiple-repos/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/multiple-repos/pom.xml
new file mode 100644
index 00000000..e59cd0c3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/multiple-repos/pom.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>mng3984</groupId>
+ <artifactId>test-1</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>MNG-3984</name>
+ <repositories>
+ <repository>
+ <id>central-parent</id>
+ <name>Maven Repository Switchboard</name>
+ <layout>default</layout>
+ <url>http://repo1.maven.org/maven2</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
+
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/multiple-repos/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/multiple-repos/sub/pom.xml
new file mode 100644
index 00000000..d7b21020
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/multiple-repos/sub/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>mng3984</groupId>
+ <artifactId>test-1</artifactId>
+ <version>0.1</version>
+ </parent>
+ <groupId>mng3984</groupId>
+ <artifactId>test-2</artifactId>
+ <version>0.1</version>
+
+ <name>MNG-3984</name>
+ <repositories>
+ <repository>
+ <id>central-child</id>
+ <name>Maven Repository Switchboard</name>
+ <layout>default</layout>
+ <url>http://repo1.maven.org/maven2</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/nested-build-dir-interpolation/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/nested-build-dir-interpolation/pom.xml
new file mode 100644
index 00000000..5632fad4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/nested-build-dir-interpolation/pom.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3904</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-3904</name>
+ <description>
+ Test that properties which refer to build directories which in turn refer to other build directories are
+ properly interpolated.
+ </description>
+
+ <properties>
+ <!-- These are the properties of interest -->
+ <dir0>${project.build.outputDirectory}/dir0</dir0>
+ <dir1>${project.build.testSourceDirectory}/dir1</dir1>
+ <dir2>${project.reporting.outputDirectory}/dir2</dir2>
+ </properties>
+
+ <build>
+ <!-- Test properties which finally refer to ${project.basedir} -->
+ <directory>${project.basedir}/target</directory>
+ <outputDirectory>${project.build.directory}/classes</outputDirectory>
+ <!-- Test properties which finally refer to ${basedir} -->
+ <sourceDirectory>${basedir}/src</sourceDirectory>
+ <testSourceDirectory>${project.build.sourceDirectory}/test</testSourceDirectory>
+ </build>
+
+ <reporting>
+ <outputDirectory>${project.build.directory}/site</outputDirectory>
+ </reporting>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-inheritance/child3.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-inheritance/child3.xml
new file mode 100644
index 00000000..873f6f97
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-inheritance/child3.xml
@@ -0,0 +1,7 @@
+<project>
+ <groupId>gid</groupId>
+ <artifactId>child-3</artifactId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+ <modelVersion>4.0.0</modelVersion>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-inheritance/pom.xml
new file mode 100644
index 00000000..89209d79
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-inheritance/pom.xml
@@ -0,0 +1,11 @@
+<project>
+ <parent>
+ <groupId>gid</groupId>
+ <artifactId>child-3</artifactId>
+ <version>1.0</version>
+ <relativePath>child3.xml</relativePath>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>child-2</artifactId>
+ <packaging>pom</packaging>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-inheritance/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-inheritance/sub/pom.xml
new file mode 100644
index 00000000..2d4671ed
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-inheritance/sub/pom.xml
@@ -0,0 +1,9 @@
+<project>
+ <parent>
+ <groupId>gid</groupId>
+ <artifactId>child-2</artifactId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>child-1</artifactId>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-interpolation/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-interpolation/pom.xml
new file mode 100644
index 00000000..d2ae6ea2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-interpolation/pom.xml
@@ -0,0 +1,16 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>${project.version}</version>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-interpolation/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-interpolation/sub/pom.xml
new file mode 100644
index 00000000..752852b1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-interpolation/sub/pom.xml
@@ -0,0 +1,9 @@
+<project>
+ <parent>
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>a</artifactId>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-pom-packaging/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-pom-packaging/pom.xml
new file mode 100644
index 00000000..16952455
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-pom-packaging/pom.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4283</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <!-- NOTE: Any packaging other than "pom" must be rejected for a parent POM -->
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-4283</name>
+ <description>
+ Test that the model builder fails when a parent POM has not "pom" packaging.
+ </description>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-pom-packaging/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-pom-packaging/sub/pom.xml
new file mode 100644
index 00000000..eca47eb3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-pom-packaging/sub/pom.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng4283</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <groupId>org.apache.maven.its.mng4283</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-4283</name>
+ <description>
+ Test that the model builder fails when a parent POM has not "pom" packaging.
+ </description>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/platform-file-separator/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/platform-file-separator/pom.xml
new file mode 100644
index 00000000..26ba2943
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/platform-file-separator/pom.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3877</groupId>
+ <artifactId>test</artifactId>
+ <version>1.0</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-3877</name>
+ <description>
+ Verify that paths to project directories use the platform-specific file separator.
+ </description>
+
+ <build>
+ <filters>
+ <filter>src/main/filters/it.properties</filter>
+ </filters>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/no-profile/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/no-profile/pom.xml
new file mode 100644
index 00000000..60180d51
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/no-profile/pom.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng2591</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-2591</name>
+ <description>
+ Test aggregation of list configuration items for build plugins when using
+ 'combine.children=append' attribute.
+ </description>
+
+ <modules>
+ <module>subproject</module>
+ </modules>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <!-- inherit via <pluginManagement> -->
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <inherited>true</inherited>
+ <configuration>
+ <listParam>
+ <!-- NOTE: These values are deliberately not in alpha order! -->
+ <listParam>PARENT-1</listParam>
+ <listParam>PARENT-3</listParam>
+ <listParam>PARENT-2</listParam>
+ <listParam>PARENT-4</listParam>
+ </listParam>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <!-- inherit not via <pluginManagement> -->
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <inherited>true</inherited>
+ <configuration>
+ <stringParams>
+ <!-- NOTE: These values are deliberately not in alpha order! -->
+ <stringParam>PARENT-1</stringParam>
+ <stringParam>PARENT-3</stringParam>
+ <stringParam>PARENT-2</stringParam>
+ <stringParam>PARENT-4</stringParam>
+ </stringParams>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/no-profile/subproject/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/no-profile/subproject/pom.xml
new file mode 100644
index 00000000..cef53d32
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/no-profile/subproject/pom.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng2591</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0</version>
+ </parent>
+
+ <artifactId>subproject</artifactId>
+ <version>1.0</version>
+ <packaging>jar</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <propertiesFile>target/config.properties</propertiesFile>
+ <stringParams combine.children="append">
+ <!-- NOTE: These values are deliberately not in alpha order! -->
+ <stringParam>CHILD-1</stringParam>
+ <stringParam>CHILD-3</stringParam>
+ <stringParam>CHILD-2</stringParam>
+ <stringParam>CHILD-4</stringParam>
+ </stringParams>
+ <listParam combine.children="append">
+ <!-- NOTE: These values are deliberately not in alpha order! -->
+ <listParam>CHILD-1</listParam>
+ <listParam>CHILD-3</listParam>
+ <listParam>CHILD-2</listParam>
+ <listParam>CHILD-4</listParam>
+ </listParam>
+ </configuration>
+ <executions>
+ <execution>
+ <id>test</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>config</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/with-profile/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/with-profile/pom.xml
new file mode 100644
index 00000000..72ab3f45
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/with-profile/pom.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng2591</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-2591</name>
+ <description>
+ Test aggregation of list configuration items for build plugins when using
+ 'combine.children=append' attribute.
+ </description>
+
+ <modules>
+ <module>subproject</module>
+ </modules>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <!-- inherit via <pluginManagement> -->
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <inherited>true</inherited>
+ <configuration>
+ <listParam>
+ <!-- NOTE: These values are deliberately not in alpha order! -->
+ <listParam>PARENT-1</listParam>
+ <listParam>PARENT-3</listParam>
+ <listParam>PARENT-2</listParam>
+ <listParam>PARENT-4</listParam>
+ </listParam>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <!-- inherit not via <pluginManagement> -->
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <inherited>true</inherited>
+ <configuration>
+ <stringParams>
+ <!-- NOTE: These values are deliberately not in alpha order! -->
+ <stringParam>PARENT-1</stringParam>
+ <stringParam>PARENT-3</stringParam>
+ <stringParam>PARENT-2</stringParam>
+ <stringParam>PARENT-4</stringParam>
+ </stringParams>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <!-- an active but empty profile to ensure profile injection does not interfere with plugin configuration -->
+ <id>parent</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/with-profile/subproject/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/with-profile/subproject/pom.xml
new file mode 100644
index 00000000..70235030
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/with-profile/subproject/pom.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng2591</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0</version>
+ </parent>
+
+ <artifactId>subproject</artifactId>
+ <version>1.0</version>
+ <packaging>jar</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <propertiesFile>target/config.properties</propertiesFile>
+ <stringParams combine.children="append">
+ <!-- NOTE: These values are deliberately not in alpha order! -->
+ <stringParam>CHILD-1</stringParam>
+ <stringParam>CHILD-3</stringParam>
+ <stringParam>CHILD-2</stringParam>
+ <stringParam>CHILD-4</stringParam>
+ </stringParams>
+ <listParam combine.children="append">
+ <!-- NOTE: These values are deliberately not in alpha order! -->
+ <listParam>CHILD-1</listParam>
+ <listParam>CHILD-3</listParam>
+ <listParam>CHILD-2</listParam>
+ <listParam>CHILD-4</listParam>
+ </listParam>
+ </configuration>
+ <executions>
+ <execution>
+ <id>test</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>config</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <!-- an active but empty profile to ensure profile injection does not interfere with plugin configuration -->
+ <id>child</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-attributes/w-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-attributes/w-plugin-mngt/pom.xml
new file mode 100644
index 00000000..2f350715
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-attributes/w-plugin-mngt/pom.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4053</groupId>
+ <artifactId>test2</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-4053</name>
+ <description>
+ Verify that attributes in plugin configuration elements are not erroneously duplicated to other elements when
+ plugin management is used.
+ </description>
+
+ <build>
+ <!-- NOTE: This test used plugin management for the IT plugin -->
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <propertiesFile>target/config.properties</propertiesFile>
+ <domParam>
+ <copy todir="src" overwrite="true">
+ <fileset dir="target"/>
+ </copy>
+ </domParam>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-attributes/w-profile/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-attributes/w-profile/pom.xml
new file mode 100644
index 00000000..f2d8c6c0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-attributes/w-profile/pom.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4053</groupId>
+ <artifactId>test3</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-4053</name>
+ <description>
+ Verify that attributes in plugin configuration elements are not erroneously duplicated to other elements when
+ plugin management and a profile are used.
+ </description>
+
+ <build>
+ <!-- NOTE: This test used plugin management for the IT plugin -->
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <profiles>
+ <profile>
+ <!-- NOTE: This test injects the plugin configuration via a profile -->
+ <id>maven-core-it</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <propertiesFile>target/config.properties</propertiesFile>
+ <domParam>
+ <copy todir="src" overwrite="true">
+ <fileset dir="target"/>
+ </copy>
+ </domParam>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-attributes/wo-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-attributes/wo-plugin-mngt/pom.xml
new file mode 100644
index 00000000..c844b447
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-attributes/wo-plugin-mngt/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4053</groupId>
+ <artifactId>test1</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-4053</name>
+ <description>
+ Verify that attributes in plugin configuration elements are not erroneously duplicated to other elements when
+ no plugin management is used.
+ </description>
+
+ <build>
+ <!-- NOTE: This test does not use plugin management for the IT plugin -->
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <propertiesFile>target/config.properties</propertiesFile>
+ <domParam>
+ <copy todir="src" overwrite="true">
+ <fileset dir="target"/>
+ </copy>
+ </domParam>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-merging/child/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-merging/child/pom.xml
new file mode 100644
index 00000000..f8172448
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-merging/child/pom.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3836</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+
+ <groupId>org.apache.maven.its.mng3836</groupId>
+ <artifactId>child</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-3836</name>
+ <description>
+ Verify that children can *override* inherited plugin configuration.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <!--
+ All of these values should override the ones inherited from the parent. In particular, collections should not
+ be merged with the values given by the parent POM.
+ -->
+ <propertiesFile>PASSED</propertiesFile>
+ <stringParams>
+ <stringParam>PASSED-1</stringParam>
+ <stringParam>PASSED-3</stringParam>
+ <stringParam>PASSED-2</stringParam>
+ <stringParam>PASSED-4</stringParam>
+ </stringParams>
+ <listParam>
+ <listParam>PASSED-1</listParam>
+ <listParam>PASSED-3</listParam>
+ <listParam>PASSED-2</listParam>
+ <listParam>PASSED-4</listParam>
+ </listParam>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <goals>
+ <goal>config</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-merging/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-merging/pom.xml
new file mode 100644
index 00000000..12f2c2d6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-merging/pom.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3836</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3836</name>
+ <description>
+ Verify that children can *override* inherited plugin configuration.
+ </description>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <propertiesFile>FAILED</propertiesFile>
+ <stringParams>
+ <stringParam>FAILED-1</stringParam>
+ <stringParam>FAILED-3</stringParam>
+ <stringParam>FAILED-2</stringParam>
+ <stringParam>FAILED-4</stringParam>
+ </stringParams>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <propertiesFile>FAILED</propertiesFile>
+ <listParam>
+ <listParam>FAILED-1</listParam>
+ <listParam>FAILED-3</listParam>
+ <listParam>FAILED-2</listParam>
+ <listParam>FAILED-4</listParam>
+ </listParam>
+ <parent>PASSED</parent>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-order/w-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-order/w-plugin-mngt/pom.xml
new file mode 100644
index 00000000..7d7dfd81
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-order/w-plugin-mngt/pom.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3827</groupId>
+ <artifactId>test2</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-3827</name>
+ <description>
+ Verify that plain plugin configuration works correctly.
+ </description>
+
+ <build>
+ <!-- This project uses plugin management for the test plugin -->
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <configuration>
+ <stringParams>
+ <stringParam>one</stringParam>
+ <stringParam>two</stringParam>
+ <stringParam>three</stringParam>
+ <stringParam>four</stringParam>
+ </stringParams>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <goals>
+ <goal>config</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-order/wo-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-order/wo-plugin-mngt/pom.xml
new file mode 100644
index 00000000..e300fe1e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-order/wo-plugin-mngt/pom.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3827</groupId>
+ <artifactId>test1</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-3827</name>
+ <description>
+ Verify that plain plugin configuration works correctly.
+ </description>
+
+ <build>
+ <!-- This project does not use plugin management for the test plugin -->
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>1.0</version>
+ <configuration>
+ <stringParams>
+ <stringParam>one</stringParam>
+ <stringParam>two</stringParam>
+ <stringParam>three</stringParam>
+ <stringParam>four</stringParam>
+ </stringParams>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <goals>
+ <goal>config</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-properties/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-properties/pom.xml
new file mode 100644
index 00000000..e5660391
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-properties/pom.xml
@@ -0,0 +1,30 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>a</groupId>
+ <artifactId>b</artifactId>
+ <version>1.0</version>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.4</version>
+ <configuration>
+ <systemProperties>
+ <property>
+ <name>my.property</name>
+ <value>my.value</value>
+ </property>
+ </systemProperties>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-config-order/w-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-config-order/w-plugin-mngt/pom.xml
new file mode 100644
index 00000000..9f66b49e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-config-order/w-plugin-mngt/pom.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3827</groupId>
+ <artifactId>test2</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-3864</name>
+ <description>
+ Verify that plain per-execution plugin configuration works correctly.
+ </description>
+
+ <build>
+ <!-- This project uses plugin management for the test plugin -->
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <goals>
+ <goal>config</goal>
+ </goals>
+ <configuration>
+ <stringParams>
+ <stringParam>one</stringParam>
+ <stringParam>two</stringParam>
+ <stringParam>three</stringParam>
+ <stringParam>four</stringParam>
+ </stringParams>
+ <propertiesParam>
+ <property>
+ <name>key1</name>
+ <value>value1</value>
+ </property>
+ <property>
+ <name>key2</name>
+ <value>value2</value>
+ </property>
+ </propertiesParam>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-config-order/wo-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-config-order/wo-plugin-mngt/pom.xml
new file mode 100644
index 00000000..4e1eafe3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-config-order/wo-plugin-mngt/pom.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3827</groupId>
+ <artifactId>test1</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-3864</name>
+ <description>
+ Verify that plain per-execution plugin configuration works correctly.
+ </description>
+
+ <build>
+ <!-- This project does not use plugin management for the test plugin -->
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>1.0</version>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <goals>
+ <goal>config</goal>
+ </goals>
+ <configuration>
+ <stringParams>
+ <stringParam>one</stringParam>
+ <stringParam>two</stringParam>
+ <stringParam>three</stringParam>
+ <stringParam>four</stringParam>
+ </stringParams>
+ <propertiesParam>
+ <property>
+ <name>key1</name>
+ <value>value1</value>
+ </property>
+ <property>
+ <name>key2</name>
+ <value>value2</value>
+ </property>
+ </propertiesParam>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-goals-order/w-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-goals-order/w-plugin-mngt/pom.xml
new file mode 100644
index 00000000..d4ac3b0e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-goals-order/w-plugin-mngt/pom.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3886</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3886</name>
+ <description>
+ Test that the goals from a plugin execution are executed in the order given by the POM, regardless whether
+ plugin management is present or not.
+ </description>
+
+ <build>
+ <!-- This project uses plugin management for the test plugin -->
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>b</goal>
+ <goal>a</goal>
+ <goal>d</goal>
+ <goal>c</goal>
+ <goal>e</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-goals-order/wo-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-goals-order/wo-plugin-mngt/pom.xml
new file mode 100644
index 00000000..438d9d1a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-goals-order/wo-plugin-mngt/pom.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3886</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3886</name>
+ <description>
+ Test that the goals from a plugin execution are executed in the order given by the POM, regardless whether
+ plugin management is present or not.
+ </description>
+
+ <build>
+ <!-- This project does not use plugin management for the test plugin -->
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>b</goal>
+ <goal>a</goal>
+ <goal>d</goal>
+ <goal>c</goal>
+ <goal>e</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-inheritance/pom.xml
new file mode 100644
index 00000000..2b534d76
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-inheritance/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4129</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-4129</name>
+ <description>
+ Verify that plugin executions defined in the parent with inherited=false are not executed in child modules.
+ </description>
+
+ <modules>
+ <module>child-1</module>
+ <module>child-2</module>
+ </modules>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-log-file</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>inherited-execution</id>
+ <inherited>true</inherited>
+ <phase>validate</phase>
+ <goals>
+ <goal>log-string</goal>
+ </goals>
+ <configuration>
+ <logFile>target/executions.txt</logFile>
+ <string>inherited-execution</string>
+ </configuration>
+ </execution>
+ <execution>
+ <id>non-inherited-execution</id>
+ <inherited>false</inherited>
+ <phase>validate</phase>
+ <goals>
+ <goal>log-string</goal>
+ </goals>
+ <configuration>
+ <logFile>target/executions.txt</logFile>
+ <string>non-inherited-execution</string>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-inheritance/w-merge/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-inheritance/w-merge/pom.xml
new file mode 100644
index 00000000..f60cfd5c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-inheritance/w-merge/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng4129</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child-1</artifactId>
+
+ <name>Maven Integration Test :: MNG-4129 :: Child-1</name>
+ <description>
+ Verify that plugin executions defined in the parent with inherited=false are not executed in child modules.
+ </description>
+
+ <build>
+ <plugins>
+ <!-- NOTE: It's essential part of this test variant to redefine the test plugin again, i.e. trigger plugin merging -->
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-log-file</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-inheritance/wo-merge/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-inheritance/wo-merge/pom.xml
new file mode 100644
index 00000000..23cfc0c2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-inheritance/wo-merge/pom.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng4129</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child-2</artifactId>
+
+ <name>Maven Integration Test :: MNG-4129 :: Child-2</name>
+ <description>
+ Verify that plugin executions defined in the parent with inherited=false are not executed in child modules.
+ </description>
+
+ <build>
+ <plugins>
+ <!-- NOTE: It's essential part of this test variant to *not* define the test plugin again, i.e. bypass plugin merging -->
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-version-insensitive/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-version-insensitive/pom.xml
new file mode 100644
index 00000000..b64af3ae
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-version-insensitive/pom.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3916</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3943</name>
+ <description>
+ Test that plugin executions are properly merged during inheritance, even if the child uses a different
+ plugin version than the parent.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <!-- NOTE: Use different version than child -->
+ <version>1.0</version>
+ <executions>
+ <execution>
+ <id>parent-1</id>
+ <phase>parent-1</phase>
+ </execution>
+ <execution>
+ <id>parent-2</id>
+ <phase>parent-2</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-version-insensitive/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-version-insensitive/sub/pom.xml
new file mode 100644
index 00000000..f96116ad
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-version-insensitive/sub/pom.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3916</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child</artifactId>
+
+ <name>Maven Integration Test :: MNG-3943</name>
+ <description>
+ Test that plugin executions are properly merged during inheritance, even if the child uses a different
+ plugin version than the parent.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <!-- NOTE: Use different version than parent -->
+ <version>2.0</version>
+ <executions>
+ <execution>
+ <id>child-1</id>
+ <phase>child-1</phase>
+ </execution>
+ <execution>
+ <id>child-2</id>
+ <phase>child-2</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-wo-version/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-wo-version/pom.xml
new file mode 100644
index 00000000..127fa259
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-wo-version/pom.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3916</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3916</name>
+ <description>
+ Test that plugin executions are properly merged during inheritance, even if the child plugin section has no
+ version.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0</version>
+ <executions>
+ <execution>
+ <id>parent-1</id>
+ <phase>parent-1</phase>
+ </execution>
+ <execution>
+ <id>parent-2</id>
+ <phase>parent-2</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-wo-version/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-wo-version/sub/pom.xml
new file mode 100644
index 00000000..61841aec
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-wo-version/sub/pom.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3916</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child</artifactId>
+
+ <name>Maven Integration Test :: MNG-3916</name>
+ <description>
+ Test that plugin executions are properly merged during inheritance, even if the child plugin section has no
+ version.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <!-- NOTE: <version> element deliberately omitted here -->
+ <executions>
+ <execution>
+ <id>child-1</id>
+ <phase>child-1</phase>
+ </execution>
+ <execution>
+ <id>child-2</id>
+ <phase>child-2</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mngt/pom.xml
new file mode 100644
index 00000000..6bcfee56
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mngt/pom.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3938</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3938</name>
+ <description>
+ Test that plugin executions with the same id are merged during inheritance, especially executions using the
+ default id, regardless whether the id is given explicitly by the user or implicitly assumed from defaults.
+ </description>
+
+ <build>
+ <!-- This project uses plugin management for the test plugin -->
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <!-- NOTE: Implicitly reference "default" id here, i.e. omit the <id> element -->
+ <phase>parent-default</phase>
+ </execution>
+ <execution>
+ <id>non-default</id>
+ <phase>parent-non-default</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mngt/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mngt/sub/pom.xml
new file mode 100644
index 00000000..3129ad02
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mngt/sub/pom.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3938</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child</artifactId>
+
+ <name>Maven Integration Test :: MNG-3938</name>
+ <description>
+ Test that plugin executions with the same id are merged during inheritance, especially executions using the
+ default id, regardless whether the id is given explicitly by the user or implicitly assumed from defaults.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <!-- NOTE: Explicitly reference "default" id here -->
+ <id>default</id>
+ <phase>child-default</phase>
+ </execution>
+ <execution>
+ <id>non-default</id>
+ <phase>child-non-default</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mngt/pom.xml
new file mode 100644
index 00000000..63db85f6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mngt/pom.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3938</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3938</name>
+ <description>
+ Test that plugin executions with the same id are merged during inheritance, especially executions using the
+ default id, regardless whether the id is given explicitly by the user or implicitly assumed from defaults.
+ </description>
+
+ <build>
+ <!-- This project does not use plugin management for the test plugin -->
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <!-- NOTE: Implicitly reference "default" id here, i.e. omit the <id> element -->
+ <phase>parent-default</phase>
+ </execution>
+ <execution>
+ <id>non-default</id>
+ <phase>parent-non-default</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mngt/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mngt/sub/pom.xml
new file mode 100644
index 00000000..3129ad02
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mngt/sub/pom.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3938</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child</artifactId>
+
+ <name>Maven Integration Test :: MNG-3938</name>
+ <description>
+ Test that plugin executions with the same id are merged during inheritance, especially executions using the
+ default id, regardless whether the id is given explicitly by the user or implicitly assumed from defaults.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <!-- NOTE: Explicitly reference "default" id here -->
+ <id>default</id>
+ <phase>child-default</phase>
+ </execution>
+ <execution>
+ <id>non-default</id>
+ <phase>child-non-default</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/pom.xml
new file mode 100644
index 00000000..864fedb9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/pom.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4332</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <!-- NOTE: The upper-case packaging name is intentional and triggers a special mode in the EmptyLifecycleExecutor -->
+ <packaging>JAR</packaging>
+
+ <name>Maven Integration Test :: MNG-4332</name>
+ <description>
+ Verify that default plugin executions contributed by the packaging are executed before user-defined
+ executions from the POM's build section, regardless whether the executions are defined in the regular
+ plugins section or the plugin management section.
+ </description>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ <executions>
+ <execution>
+ <id>test-1</id>
+ <goals>
+ <goal>resources</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ <executions>
+ <execution>
+ <id>test-2</id>
+ <goals>
+ <goal>resources</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order-with-lifecycle/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order-with-lifecycle/pom.xml
new file mode 100644
index 00000000..6035e816
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order-with-lifecycle/pom.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4341</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <!-- NOTE: The upper-case packaging name is intentional and triggers a special mode in the EmptyLifecycleExecutor -->
+ <packaging>JAR</packaging>
+
+ <name>Maven Integration Test :: MNG-4341</name>
+ <description>
+ Test that plugins bound to the same phase get executed in POM order even if one of the plugins participates
+ in the default lifecycle bindings for the project's packaging.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-log-file</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <!-- NOTE: It's essential that this plugin is also referenced by the default lifecycle bindings -->
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>0.1-stub-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order/w-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order/w-plugin-mngt/pom.xml
new file mode 100644
index 00000000..2c552d4c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order/w-plugin-mngt/pom.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3887</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3887</name>
+ <description>
+ Test that multiple plugin executions bound to the same phase are executed in the order given by the POM.
+ </description>
+
+ <build>
+ <!-- This project uses plugin management for the test plugin -->
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>b</id>
+ <phase>validate</phase>
+ </execution>
+ <execution>
+ <id>a</id>
+ <phase>validate</phase>
+ </execution>
+ <execution>
+ <id>d</id>
+ <phase>validate</phase>
+ </execution>
+ <execution>
+ <id>c</id>
+ <phase>validate</phase>
+ </execution>
+ <execution>
+ <id>e</id>
+ <phase>validate</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order/wo-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order/wo-plugin-mngt/pom.xml
new file mode 100644
index 00000000..c4ceaae3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order/wo-plugin-mngt/pom.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3887</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3887</name>
+ <description>
+ Test that multiple plugin executions bound to the same phase are executed in the order given by the POM.
+ </description>
+
+ <build>
+ <!-- This project does not use plugin management for the test plugin -->
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>b</id>
+ <phase>validate</phase>
+ </execution>
+ <execution>
+ <id>a</id>
+ <phase>validate</phase>
+ </execution>
+ <execution>
+ <id>d</id>
+ <phase>validate</phase>
+ </execution>
+ <execution>
+ <id>c</id>
+ <phase>validate</phase>
+ </execution>
+ <execution>
+ <id>e</id>
+ <phase>validate</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/w-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/w-plugin-mngt/pom.xml
new file mode 100644
index 00000000..fbae181f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/w-plugin-mngt/pom.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4000</groupId>
+ <artifactId>test2</artifactId>
+ <version>0.1</version>
+
+ <name>Maven Integration Test :: MNG-4000</name>
+ <description>
+ Test that plugin executions without id are not lost among other plugin executions.
+ </description>
+
+ <build>
+ <!-- NOTE: This test uses plugin management for the IT plugin. -->
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-log-file</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-log-file</artifactId>
+ <configuration>
+ <logFile>target/exec.log</logFile>
+ <string>exec</string>
+ </configuration>
+ <executions>
+ <execution>
+ <id>exec-1</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>log-string</goal>
+ </goals>
+ </execution>
+ <execution>
+ <!-- NOTE: <id> deliberately omitted here! -->
+ <phase>validate</phase>
+ <goals>
+ <goal>log-string</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/wo-plugin-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/wo-plugin-mngt/pom.xml
new file mode 100644
index 00000000..7910084f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/wo-plugin-mngt/pom.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4000</groupId>
+ <artifactId>test1</artifactId>
+ <version>0.1</version>
+
+ <name>Maven Integration Test :: MNG-4000</name>
+ <description>
+ Test that plugin executions without id are not lost among other plugin executions.
+ </description>
+
+ <build>
+ <!-- NOTE: This test does not use plugin management for the IT plugin. -->
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-log-file</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <logFile>target/exec.log</logFile>
+ <string>exec</string>
+ </configuration>
+ <executions>
+ <execution>
+ <id>exec-1</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>log-string</goal>
+ </goals>
+ </execution>
+ <execution>
+ <!-- NOTE: <id> deliberately omitted here! -->
+ <phase>validate</phase>
+ <goals>
+ <goal>log-string</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/pom.xml
new file mode 100644
index 00000000..e42b0306
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/pom.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4415</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-4415</name>
+ <description>
+ Test that merging of plugins during inheritance follows these rules regarding ordering:
+ parent: X -> A -> B -> D -> E
+ child: Y -> A -> C -> D -> F
+ result: X -> Y -> A -> B -> C -> D -> E -> F
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-error</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-dependency-resolution</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-packaging</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-expression</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-fork</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/pom.xml
new file mode 100644
index 00000000..8d44b8cc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/pom.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng4415</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <groupId>org.apache.maven.its.mng4415</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+
+ <name>Maven Integration Test :: MNG-4415</name>
+ <description>
+ Test that merging of plugins during inheritance follows these rules regarding ordering:
+ parent: X -> A -> B -> D -> E
+ child: Y -> A -> C -> D -> F
+ result: X -> Y -> A -> B -> C -> D -> E -> F
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-dependency-resolution</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-log-file</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-expression</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-touch</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/pom.xml
new file mode 100644
index 00000000..5350fa87
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3808</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ </parent>
+ <artifactId>child</artifactId>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </reporting>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-order/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-order/pom.xml
new file mode 100644
index 00000000..f66ae25c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-order/pom.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3808</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3808</name>
+ <description>
+ Test the reports are executeed in the order given in the POM.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-log-file</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-expression</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-log-file</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-expression</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </reporting>
+
+ <modules>
+ <module>child</module>
+ </modules>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-simple/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-simple/pom.xml
new file mode 100644
index 00000000..b73bfce5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-simple/pom.xml
@@ -0,0 +1,17 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>gid</groupId>
+ <artifactId>aid</artifactId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>1.0-alpha-21</version>
+ </plugin>
+ </plugins>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-simple/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-simple/sub/pom.xml
new file mode 100644
index 00000000..f6ed4dd4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-simple/sub/pom.xml
@@ -0,0 +1,20 @@
+<project>
+ <parent>
+ <groupId>gid</groupId>
+ <artifactId>aid</artifactId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin2</artifactId>
+ <version>1.0-alpha-21</version>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-injection-merge-order/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-injection-merge-order/pom.xml
new file mode 100644
index 00000000..76459e2d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-injection-merge-order/pom.xml
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4416</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+
+ <name>Maven Integration Test :: MNG-4416</name>
+ <description>
+ Test that merging of plugins during profile injection follows these rules regarding ordering:
+ model: X -> A -> B -> D -> E
+ profile: Y -> A -> C -> D -> F
+ result: X -> Y -> A -> B -> C -> D -> E -> F
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-error</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-dependency-resolution</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-packaging</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-expression</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-fork</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>test</id>
+ <activation>
+ <property>
+ <name>!skip-mng4416</name>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-dependency-resolution</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-log-file</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <logFile>target/it.properties</logFile>
+ </configuration>
+ <executions>
+ <execution>
+ <id>first</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>reset</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-expression</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <outputFile>target/it.properties</outputFile>
+ <expressions>
+ <expression>project/build/plugins</expression>
+ </expressions>
+ </configuration>
+ <executions>
+ <execution>
+ <id>second</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>eval</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-touch</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-dependencies/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-dependencies/pom.xml
new file mode 100644
index 00000000..bcdb05aa
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-dependencies/pom.xml
@@ -0,0 +1,25 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>gid</groupId>
+ <artifactId>aid</artifactId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>1.0-alpha-21</version>
+ <dependencies>
+ <dependency>
+ <groupId>a</groupId>
+ <artifactId>b</artifactId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-dependencies/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-dependencies/sub/pom.xml
new file mode 100644
index 00000000..7f73423e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-dependencies/sub/pom.xml
@@ -0,0 +1,25 @@
+<project>
+ <parent>
+ <groupId>gid</groupId>
+ <artifactId>aid</artifactId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ <profiles>
+ <profile>
+ <id>test</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>1.0-alpha-21</version>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-duplicate/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-duplicate/pom.xml
new file mode 100644
index 00000000..37e7278a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-duplicate/pom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version
+ 2.0 (the "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ CONDITIONS OF ANY KIND, either express or implied. See the License for
+ the specific language governing permissions and limitations under the
+ License.
+ -->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>gid</groupId>
+ <artifactId>aid</artifactId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins
+ </groupId>
+ <artifactId>maven-it-plugin-configuration
+ </artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-duplicate/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-duplicate/sub/pom.xml
new file mode 100644
index 00000000..5e844b79
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-duplicate/sub/pom.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <parent>
+ <groupId>gid</groupId>
+ <artifactId>aid</artifactId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4053</groupId>
+ <artifactId>test2</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>0.1-stub-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>0.1-stub-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>0.1-stub-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>0.1-stub-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>0.1-stub-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>0.1-stub-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-for-implicit-plugin/child/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-for-implicit-plugin/child/pom.xml
new file mode 100644
index 00000000..fce35882
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-for-implicit-plugin/child/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng0522</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>child-project</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <!-- NOTE: The upper-case packaging name is intentional and triggers a special mode in the EmptyLifecycleExecutor -->
+ <packaging>JAR</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-log-file</artifactId>
+ <executions>
+ <execution>
+ <id>test</id>
+ <phase>initialize</phase>
+ <goals>
+ <goal>reset</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-for-implicit-plugin/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-for-implicit-plugin/pom.xml
new file mode 100644
index 00000000..d9412769
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-for-implicit-plugin/pom.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng0522</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-522</name>
+ <description>Test for pluginManagement injection of plugin configuration.</description>
+
+ <modules>
+ <module>child</module>
+ </modules>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <!-- this checks handling of a plugin which is implicitly bound to the lifecycle -->
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>0.1-stub-SNAPSHOT</version>
+ <configuration>
+ <pathname>passed.txt</pathname>
+ </configuration>
+ </plugin>
+ <plugin>
+ <!-- this checks handling of a plugin which is explicitly bound to the lifecycle -->
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-log-file</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <logFile>passed.txt</logFile>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-inheritance/pom.xml
new file mode 100644
index 00000000..85b7bd94
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-inheritance/pom.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.it0052</groupId>
+ <artifactId>maven-it-it0052</artifactId>
+ <version>1.0</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: it0052</name>
+ <description>Test that source attachment doesn't take place when -DperformRelease=true is missing.</description>
+
+ <!-- NOTE: Use stub versions of the core plugins referenced by the build -->
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>0.1-stub-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>0.1-stub-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>0.1-stub-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>0.1-stub-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>0.1-stub-SNAPSHOT</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>0.1-stub-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-merge-simple/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-merge-simple/pom.xml
new file mode 100644
index 00000000..10eac25f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-merge-simple/pom.xml
@@ -0,0 +1,17 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus-indexer</artifactId>
+ <version>1.1.3-SNAPSHOT</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-order/nexus-parent.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-order/nexus-parent.xml
new file mode 100644
index 00000000..607da777
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-order/nexus-parent.xml
@@ -0,0 +1,19 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus-parent</artifactId>
+ <version>8-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-metadata</artifactId>
+ <version>1.4.0</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-order/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-order/pom.xml
new file mode 100644
index 00000000..408d17f0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-order/pom.xml
@@ -0,0 +1,28 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus-parent</artifactId>
+ <version>8-SNAPSHOT</version>
+ <relativePath>nexus-parent.xml</relativePath>
+ </parent>
+
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus-indexer</artifactId>
+ <version>1.1.3-SNAPSHOT</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-metadata</artifactId>
+ </plugin>
+
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.4.3</version>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pluginmanagement-inherited/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pluginmanagement-inherited/pom.xml
new file mode 100644
index 00000000..477451df
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pluginmanagement-inherited/pom.xml
@@ -0,0 +1,18 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>1.0-alpha-21</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pluginmanagement-inherited/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pluginmanagement-inherited/sub/pom.xml
new file mode 100644
index 00000000..319e6adb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pluginmanagement-inherited/sub/pom.xml
@@ -0,0 +1,17 @@
+<project>
+ <parent>
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>a</artifactId>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-encoding/latin-1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-encoding/latin-1/pom.xml
new file mode 100644
index 00000000..b338399f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-encoding/latin-1/pom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!--
+NOTE: This POM's XML declaration intentionally declares Latin-1 encoding.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng2254</groupId>
+ <artifactId>latin-1</artifactId>
+ <version>0.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-2254 :: Latin-1</name>
+ <description>TEST-CHARS: ÄÖÜäöüß</description>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-encoding/utf-8/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-encoding/utf-8/pom.xml
new file mode 100644
index 00000000..4400aa70
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-encoding/utf-8/pom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!--
+NOTE: This POM's XML declaration specified no encoding which should therefore default to UTF-8.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng2254</groupId>
+ <artifactId>utf-8</artifactId>
+ <version>0.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-2254 :: UTF-8</name>
+ <description>TEST-CHARS: ßıΣЯ×€</description>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-inheritance/pom.xml
new file mode 100644
index 00000000..f96a9400
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-inheritance/pom.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <!--
+ This parent POM overrides most super POM defaults to test inheritance in child modules.
+ -->
+
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>parent-1</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>parent-name</name>
+ <description>parent-description</description>
+ <url>http://parent.url/</url>
+ <inceptionYear>2008</inceptionYear>
+ <organization>
+ <name>parent-org</name>
+ <url>http://parent-org.url/</url>
+ </organization>
+ <licenses>
+ <license>
+ <name>parent-license</name>
+ <url>http://parent.url/license</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+
+ <developers>
+ <developer>
+ <name>parent-developer</name>
+ </developer>
+ </developers>
+ <contributors>
+ <contributor>
+ <name>parent-contributor</name>
+ </contributor>
+ </contributors>
+
+ <mailingLists>
+ <mailingList>
+ <name>parent-mailing-list</name>
+ </mailingList>
+ </mailingLists>
+
+ <prerequisites>
+ <maven>2.0</maven>
+ </prerequisites>
+
+ <modules>
+ <module>child-1</module>
+ <module>child-2</module>
+ </modules>
+
+ <scm>
+ <url>http://parent.url/trunk</url>
+ <connection>http://parent.url/scm</connection>
+ <developerConnection>https://parent.url/scm</developerConnection>
+ </scm>
+ <issueManagement>
+ <url>http://parent.url/issues</url>
+ </issueManagement>
+ <ciManagement>
+ <url>http://parent.url/ci</url>
+ </ciManagement>
+ <distributionManagement>
+ <repository>
+ <url>http://parent.url/dist</url>
+ <id>parent.distros</id>
+ </repository>
+ <snapshotRepository>
+ <url>http://parent.url/snaps</url>
+ <id>parent.snaps</id>
+ </snapshotRepository>
+ <site>
+ <url>http://parent.url/site</url>
+ <id>parent.site</id>
+ </site>
+ <downloadUrl>http://parent.url/download</downloadUrl>
+ <relocation>
+ <message>parent-reloc-msg</message>
+ </relocation>
+ </distributionManagement>
+
+ <properties>
+ <parentProperty>parent-property</parentProperty>
+ <overriddenProperty>parent-property</overriddenProperty>
+ </properties>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>parent-dep-a</artifactId>
+ <version>1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>parent-dep-b</artifactId>
+ <version>1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <repositories>
+ <repository>
+ <id>parent-remote-repo</id>
+ <url>http://parent.url/remote</url>
+ </repository>
+ </repositories>
+
+ <build>
+ <defaultGoal>initialize</defaultGoal>
+ <directory>out</directory>
+ <sourceDirectory>src/main</sourceDirectory>
+ <scriptSourceDirectory>src/scripts</scriptSourceDirectory>
+ <testSourceDirectory>src/test</testSourceDirectory>
+ <outputDirectory>out/main</outputDirectory>
+ <testOutputDirectory>out/test</testOutputDirectory>
+ <resources>
+ <resource>
+ <directory>res/main</directory>
+ </resource>
+ </resources>
+ <testResources>
+ <testResource>
+ <directory>res/test</directory>
+ </testResource>
+ </testResources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-expression</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <goals>
+ <goal>eval</goal>
+ </goals>
+ <configuration>
+ <outputFile>target/pom.properties</outputFile>
+ <expressions>
+ <expression>project</expression>
+ </expressions>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <excludeDefaults>true</excludeDefaults>
+ <outputDirectory>site</outputDirectory>
+ </reporting>
+
+ <profiles>
+ <profile>
+ <id>parent-profile</id>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-inheritance/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-inheritance/sub/pom.xml
new file mode 100644
index 00000000..ae749028
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-inheritance/sub/pom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <!--
+ This minimalistic POM tests mere inheritance from its parent.
+ -->
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>parent-1</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child-1</artifactId>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/prerequisites-inheritance/child/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/prerequisites-inheritance/child/pom.xml
new file mode 100644
index 00000000..349a0c38
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/prerequisites-inheritance/child/pom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <!--
+ This minimalistic POM tests mere inheritance from its parent. The <prerequisites> should not be inherited.
+ -->
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>parent-1</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child-1</artifactId>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/prerequisites-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/prerequisites-inheritance/pom.xml
new file mode 100644
index 00000000..3e4d8a45
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/prerequisites-inheritance/pom.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>parent-1</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <prerequisites>
+ <maven>2.0</maven>
+ </prerequisites>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-default-deactivation/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-default-deactivation/pom.xml
new file mode 100644
index 00000000..dfe19253
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-default-deactivation/pom.xml
@@ -0,0 +1,35 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.its.mng3545</groupId>
+ <artifactId>test-artifact</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <profiles>
+ <profile>
+ <id>profile1</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-touch</artifactId>
+ <version>2.2</version>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>profile4</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-touch</artifactId>
+ <version>2.1</version>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-dependencies-multiple-profiles/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-dependencies-multiple-profiles/pom.xml
new file mode 100644
index 00000000..d7af4e27
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-dependencies-multiple-profiles/pom.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.it0021</groupId>
+ <artifactId>test</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: it0021</name>
+ <description>
+ Test pom-level profile inclusion (this one is activated by system property).
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-dependency-resolution</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>test</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>profile-1</id>
+ <activation>
+ <property>
+ <name>includeProfile</name>
+ </property>
+ </activation>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.it0021</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ </dependencies>
+ </profile>
+ <profile>
+ <id>profile-2</id>
+ <!-- to be activated explicitly on the CLI by its id -->
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.it0021</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ </dependency>
+ </dependencies>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-injected-dependencies/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-injected-dependencies/pom.xml
new file mode 100644
index 00000000..3fe02fbd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-injected-dependencies/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng1412</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-1412</name>
+ <description>
+ Check that dependencies are available in classpath in same order as declared in POM.
+ </description>
+
+ <dependencies>
+ <!-- model dependencies first, in the order given -->
+ <dependency>
+ <groupId>org.apache.maven.its.mng1412</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng1412</groupId>
+ <artifactId>c</artifactId>
+ <version>0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng1412</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ </dependency>
+ </dependencies>
+
+ <profiles>
+ <profile>
+ <id>mng-1412</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <!-- profile dependencies last, in the order given -->
+ <dependencies>
+ <dependency>
+ <!-- deliberately respecifying this dep to check merging behavior -->
+ <groupId>org.apache.maven.its.mng1412</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng1412</groupId>
+ <artifactId>d</artifactId>
+ <version>0.1</version>
+ </dependency>
+ </dependencies>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-injection-order/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-injection-order/pom.xml
new file mode 100644
index 00000000..daf4607f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-injection-order/pom.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng2309</groupId>
+ <artifactId>test</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-2309</name>
+ <description>
+ Test that profiles are injected in declaration order, with the last profile being the most dominant.
+ </description>
+
+ <profiles>
+ <!-- NOTE: Using intentionally more than two profiles to prevent random test success -->
+ <profile>
+ <id>pom-a</id>
+ <properties>
+ <pomProperty>a</pomProperty>
+ </properties>
+ </profile>
+ <profile>
+ <id>pom-b</id>
+ <properties>
+ <pomProperty>b</pomProperty>
+ </properties>
+ </profile>
+ <profile>
+ <id>pom-c</id>
+ <properties>
+ <pomProperty>c</pomProperty>
+ </properties>
+ </profile>
+ <profile>
+ <id>pom-d</id>
+ <properties>
+ <pomProperty>d</pomProperty>
+ </properties>
+ </profile>
+ <profile>
+ <id>pom-e</id>
+ <properties>
+ <pomProperty>e</pomProperty>
+ </properties>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-module-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-module-inheritance/pom.xml
new file mode 100644
index 00000000..4e4c40b2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-module-inheritance/pom.xml
@@ -0,0 +1,18 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.ops4j.pax</groupId>
+ <artifactId>construct</artifactId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+
+ <profiles>
+ <profile>
+ <id>dist</id>
+ <modules>
+ <module>maven-inherit-plugin</module>
+ <module>maven-pax-plugin</module>
+ </modules>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-module-inheritance/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-module-inheritance/sub/pom.xml
new file mode 100644
index 00000000..60f057cc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-module-inheritance/sub/pom.xml
@@ -0,0 +1,12 @@
+<project>
+ <parent>
+ <groupId>org.ops4j.pax</groupId>
+ <artifactId>construct</artifactId>
+ <version>1.0</version>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.ops4j</groupId>
+ <artifactId>maven-inherit-plugin</artifactId>
+ <version>1.1</version>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-module/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-module/pom.xml
new file mode 100644
index 00000000..b6336fd4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-module/pom.xml
@@ -0,0 +1,24 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>gid</groupId>
+ <artifactId>aid</artifactId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+ <modules>
+ <module>module-2</module>
+ <module>module-1</module>
+ <module>module-3</module>
+ </modules>
+ <profiles>
+ <profile>
+ <id>a</id>
+ <properties>
+ <b>test-prop</b>
+ </properties>
+ <modules>
+ <module>module-1</module>
+ <module>module-4</module>
+ </modules>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-plugin-mng-dependencies/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-plugin-mng-dependencies/pom.xml
new file mode 100644
index 00000000..e283bb09
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-plugin-mng-dependencies/pom.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng2174</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-2174</name>
+ <description>
+ Verify that plugin dependencies defined by plugin management of a parent profile are not lost when the
+ parent's main plugin management section is also present.
+ </description>
+
+ <modules>
+ <module>sub</module>
+ </modules>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-class-loader</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>maven-core-it</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-class-loader</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng2174</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-plugin-mng-dependencies/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-plugin-mng-dependencies/sub/pom.xml
new file mode 100644
index 00000000..3614e305
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-plugin-mng-dependencies/sub/pom.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng2174</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+
+ <groupId>org.apache.maven.its.mng2174</groupId>
+ <artifactId>child</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: MNG-2174</name>
+ <description>
+ Verify that plugin dependencies defined by plugin management of a parent profile are not lost when the
+ parent's main plugin management section is also present.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-class-loader</artifactId>
+ <executions>
+ <execution>
+ <id>test</id>
+ <phase>validate</phase>
+ <configuration>
+ <resourcePaths>mng-2174.properties</resourcePaths>
+ <pluginClassLoaderOutput>target/pcl.properties</pluginClassLoaderOutput>
+ </configuration>
+ <goals>
+ <goal>load</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-plugins/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-plugins/pom.xml
new file mode 100644
index 00000000..32e94d73
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-plugins/pom.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version
+ 2.0 (the "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
+ OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.0-SNAPSHOT</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.4.3</version>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>standard</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly2-plugin</artifactId>
+ <version>2.0</version>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-properties-interpolation/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-properties-interpolation/pom.xml
new file mode 100644
index 00000000..a95e253b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-properties-interpolation/pom.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version
+ 2.0 (the "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ CONDITIONS OF ANY KIND, either express or implied. See the License for
+ the specific language governing permissions and limitations under the
+ License.
+ -->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3900 </groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-3900</name>
+ <description>
+ Test that build properties defined via active profiles are used for
+ interpolation.
+ </description>
+
+ <!--
+ These are some POM elements we would like to interpolate with
+ properties from the profile.
+ -->
+ <url>http://maven.apache.org/${test}
+ </url>
+ <properties>
+ <test>FAILED</test>
+ <property>${test}</property>
+ </properties>
+
+ <profiles>
+ <profile>
+ <id>interpolation-profile</id>
+ <!-- This profile defines the properties to use for interpolation. -->
+ <properties>
+ <test>PASSED</test>
+ <test1>PASSED</test1>
+ </properties>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-inheritance/pom.xml
new file mode 100644
index 00000000..6d17dd3a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-inheritance/pom.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>parent-1</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <properties>
+ <parentProperty>parent-property</parentProperty>
+ <overriddenProperty>parent-property</overriddenProperty>
+ </properties>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-inheritance/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-inheritance/sub/pom.xml
new file mode 100644
index 00000000..c5394df5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-inheritance/sub/pom.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3843</groupId>
+ <artifactId>parent-1</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <groupId>org.apache.maven.its.mng3843.child</groupId>
+ <artifactId>child-2</artifactId>
+ <version>0.2</version>
+ <packaging>jar</packaging>
+
+ <properties>
+ <childProperty>child-property</childProperty>
+ <overriddenProperty>child-override</overriddenProperty>
+ </properties>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-no-duplication/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-no-duplication/pom.xml
new file mode 100644
index 00000000..c74f4465
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-no-duplication/pom.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>test-parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <properties>
+ <pomProfile>parent</pomProfile>
+ </properties>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-no-duplication/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-no-duplication/sub/pom.xml
new file mode 100644
index 00000000..9241b8bb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-no-duplication/sub/pom.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>test-parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>test</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <properties>
+ <pomProfile>child</pomProfile>
+ </properties>
+</project>
+
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/repo-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/repo-inheritance/pom.xml
new file mode 100644
index 00000000..5c1dacab
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/repo-inheritance/pom.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.it0043</groupId>
+ <artifactId>maven-it-it0043</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <name>Maven Integration Test :: it0043</name>
+ <description>Test for repository inheritence - ensure using the same id overrides the defaults</description>
+
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>it0043</name>
+ <url>file:///${basedir}/target/maven-core-it0043-repo</url>
+ </repository>
+ </repositories>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>central</id>
+ <name>it0043</name>
+ <url>file:///${basedir}/target/maven-core-it0043-repo</url>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-expression</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <outputFile>target/expression.properties</outputFile>
+ <expressions>
+ <expression>project/repositories</expression>
+ <expression>project/pluginRepositories</expression>
+ </expressions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/reporting-interpolation/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/reporting-interpolation/pom.xml
new file mode 100644
index 00000000..49df00a8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/reporting-interpolation/pom.xml
@@ -0,0 +1,6 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>gid</groupId>
+ <artifactId>aid</artifactId>
+ <version>1.0</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/reporting-plugin-config/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/reporting-plugin-config/pom.xml
new file mode 100644
index 00000000..fdb455a0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/reporting-plugin-config/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version
+ 2.0 (the "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
+ OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3811</groupId>
+ <artifactId>test-parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <name>MNG-3811 :: Parent</name>
+ <description>Test inheritance of reporting plugin configuration</description>
+
+ <modules>
+ <module>child</module>
+ </modules>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <booleanParam>true</booleanParam>
+ <stringParams>
+ <stringParam>parentParam</stringParam>
+ </stringParams>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+</project>
+
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/reporting-plugin-config/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/reporting-plugin-config/sub/pom.xml
new file mode 100644
index 00000000..b0768271
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/reporting-plugin-config/sub/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version
+ 2.0 (the "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
+ OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+<parent>
+ <groupId>org.apache.maven.its.mng3811</groupId>
+ <artifactId>test-parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>test-child</artifactId>
+
+ <name>MNG-3811 :: Child</name>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <stringParams combine.children="append">
+ <stringParam> childParam </stringParam>
+ <stringParam xml:space="preserve"> preserve space </stringParam>
+ </stringParams>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+</project>
+
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/single-configuration-inheritance/jetty-parent.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/single-configuration-inheritance/jetty-parent.xml
new file mode 100644
index 00000000..40031e36
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/single-configuration-inheritance/jetty-parent.xml
@@ -0,0 +1,37 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-parent</artifactId>
+ <packaging>pom</packaging>
+ <name>Jetty :: Administrative Parent</name>
+ <version>7</version>
+
+ <build>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-enforcer-plugin</artifactId>
+ <version>1.0-alpha-3</version>
+ <executions>
+ <execution>
+ <id>enforce-java</id>
+ <goals>
+ <goal>enforce</goal>
+ </goals>
+ <configuration>
+ <rules>
+ <requireMavenVersion>
+ <version>[2.0.6,)</version>
+ </requireMavenVersion>
+ <requireJavaVersion>
+ <version>[1.5,)</version>
+ </requireJavaVersion>
+ </rules>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/single-configuration-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/single-configuration-inheritance/pom.xml
new file mode 100644
index 00000000..695ffaff
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/single-configuration-inheritance/pom.xml
@@ -0,0 +1,41 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-parent</artifactId>
+ <version>7</version>
+ <relativePath>jetty-parent.xml</relativePath>
+ </parent>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>project</artifactId>
+ <packaging>pom</packaging>
+ <name>Jetty Server Project</name>
+ <version>6.1.12</version>
+ <build>
+ <defaultGoal>install</defaultGoal>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-enforcer-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>enforce-java</id>
+ <goals>
+ <goal>enforce</goal>
+ </goals>
+ <configuration>
+ <rules>
+ <requireMavenVersion>
+ <version>2.0.6</version>
+ </requireMavenVersion>
+ <requireJavaVersion>
+ <version>[1.4,)</version>
+ </requireJavaVersion>
+ </rules>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/sytem-property-interpolation/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/sytem-property-interpolation/pom.xml
new file mode 100644
index 00000000..7d48d903
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/sytem-property-interpolation/pom.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>gid</groupId>
+ <artifactId>aid</artifactId>
+ <version>1.0</version>
+
+ <name>${system.property}</name>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unc-path/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unc-path/pom.xml
new file mode 100644
index 00000000..be2a825a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unc-path/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version
+ 2.0 (the "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
+ OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3621</groupId>
+ <artifactId>test-parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <name>MNG-3621 :: Parent</name>
+ <description>Test inheritance of UNC paths</description>
+
+ <modules>
+ <module>child</module>
+ </modules>
+
+ <distributionManagement>
+ <site>
+ <id>site</id>
+ <url>file:////host/site</url>
+ </site>
+ </distributionManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unc-path/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unc-path/sub/pom.xml
new file mode 100644
index 00000000..fddd8723
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unc-path/sub/pom.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version
+ 2.0 (the "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
+ OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+<parent>
+ <groupId>org.apache.maven.its.mng3621</groupId>
+ <artifactId>test-parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>test-child</artifactId>
+
+ <name>MNG-3621 :: Child</name>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-expression</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <outputFile>target/pom.properties</outputFile>
+ <expressions>
+ <expression>project/distributionManagement/site/url</expression>
+ </expressions>
+ </configuration>
+ <executions>
+ <execution>
+ <id>test</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>eval</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
+
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/pom.xml
new file mode 100644
index 00000000..38ad7f71
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/pom.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <profiles>
+ <profile>
+ <id>test</id>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>a</artifactId>
+ <version>0.2</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/pom.xml
new file mode 100644
index 00000000..de69bb4b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/pom.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>a</artifactId>
+ <version>0.2</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/pom.xml
new file mode 100644
index 00000000..8d4ae56d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/pom.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <profiles>
+ <profile>
+ <id>test</id>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>a</artifactId>
+ <version>0.2</version>
+ </dependency>
+ </dependencies>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/pom.xml
new file mode 100644
index 00000000..a629c9f5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/pom.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its.mng4005</groupId>
+ <artifactId>a</artifactId>
+ <version>0.2</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/artifact-repo-in-profile/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/artifact-repo-in-profile/pom.xml
new file mode 100644
index 00000000..eb73c4e2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/artifact-repo-in-profile/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4193</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-4193</name>
+ <description>
+ Test that multiple artifact repository declarations with the same id cause a validation error even if the
+ repositories are defined within a (non-active) profile.
+ </description>
+
+ <profiles>
+ <profile>
+ <id>test</id>
+ <repositories>
+ <repository>
+ <id>one</id>
+ <url>http://repo1.maven.org/maven2</url>
+ </repository>
+ <repository>
+ <id>one</id>
+ <url>http://repository.codehaus.org/</url>
+ </repository>
+ </repositories>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/artifact-repo/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/artifact-repo/pom.xml
new file mode 100644
index 00000000..76d4f74a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/artifact-repo/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4193</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-4193</name>
+ <description>
+ Test that multiple artifact repository declarations with the same id cause a validation error.
+ </description>
+
+ <repositories>
+ <repository>
+ <id>one</id>
+ <url>http://repo1.maven.org/maven2</url>
+ </repository>
+ <repository>
+ <id>one</id>
+ <url>http://repository.codehaus.org/</url>
+ </repository>
+ </repositories>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/plugin-repo-in-profile/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/plugin-repo-in-profile/pom.xml
new file mode 100644
index 00000000..ac1fada5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/plugin-repo-in-profile/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4193</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-4193</name>
+ <description>
+ Test that multiple plugin repository declarations with the same id cause a validation error even if the
+ repositories are defined within a (non-active) profile.
+ </description>
+
+ <profiles>
+ <profile>
+ <id>test</id>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>one</id>
+ <url>http://repo1.maven.org/maven2</url>
+ </pluginRepository>
+ <pluginRepository>
+ <id>one</id>
+ <url>http://repository.codehaus.org/</url>
+ </pluginRepository>
+ </pluginRepositories>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/plugin-repo/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/plugin-repo/pom.xml
new file mode 100644
index 00000000..92fd1264
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/plugin-repo/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4193</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-4193</name>
+ <description>
+ Test that multiple plugin repository declarations with the same id cause a validation error.
+ </description>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>one</id>
+ <url>http://repo1.maven.org/maven2</url>
+ </pluginRepository>
+ <pluginRepository>
+ <id>one</id>
+ <url>http://repository.codehaus.org/</url>
+ </pluginRepository>
+ </pluginRepositories>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unprefixed-expression-interpolation/child/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unprefixed-expression-interpolation/child/pom.xml
new file mode 100644
index 00000000..9304f5d0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unprefixed-expression-interpolation/child/pom.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3831</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0</version>
+ </parent>
+
+ <groupId>org.apache.maven.its.mng3831.child</groupId>
+ <artifactId>child</artifactId>
+ <version>2.0-alpha-1</version>
+ <packaging>jar</packaging>
+
+ <name>child-name</name>
+ <description>child-desc</description>
+ <url>http://child.org/</url>
+ <inceptionYear>2008</inceptionYear>
+ <organization>
+ <name>child-org-name</name>
+ </organization>
+
+ <prerequisites>
+ <maven>2.0.0</maven>
+ </prerequisites>
+
+ <scm>
+ <url>http://scm.org/</url>
+ </scm>
+ <issueManagement>
+ <url>http://issue.org/</url>
+ </issueManagement>
+ <ciManagement>
+ <url>http://ci.org/</url>
+ </ciManagement>
+ <distributionManagement>
+ <repository>
+ <id>maven-core-it</id>
+ <name>child-dist-repo</name>
+ <url>http://dist.org/</url>
+ </repository>
+ <site>
+ <id>maven-core-it</id>
+ <name>child-site</name>
+ <url>http://site.org/</url>
+ </site>
+ </distributionManagement>
+
+ <properties>
+ <!-- this is where we collect all the interpolated values for the POM dump -->
+ <projectDir>${basedir}</projectDir>
+ <projectGroupId>${groupId}</projectGroupId>
+ <projectArtifactId>${artifactId}</projectArtifactId>
+ <projectVersion>${version}</projectVersion>
+ <projectPackaging>${packaging}</projectPackaging>
+ <projectName>${name}</projectName>
+ <projectDesc>${description}</projectDesc>
+ <projectUrl>${url}</projectUrl>
+ <projectYear>${inceptionYear}</projectYear>
+ <projectOrgName>${organization.name}</projectOrgName>
+ <projectPrereqMvn>${prerequisites.maven}</projectPrereqMvn>
+ <projectScmUrl>${scm.url}</projectScmUrl>
+ <projectIssueUrl>${issueManagement.url}</projectIssueUrl>
+ <projectCiUrl>${ciManagement.url}</projectCiUrl>
+ <projectDistRepoName>${distributionManagement.repository.name}</projectDistRepoName>
+ <projectDistRepoUrl>${distributionManagement.repository.url}</projectDistRepoUrl>
+ <projectDistSiteUrl>${distributionManagement.site.url}</projectDistSiteUrl>
+ <projectBuildOut>${build.outputDirectory}</projectBuildOut>
+ <projectSiteOut>${reporting.outputDirectory}</projectSiteOut>
+ <parentGroupId>${parent.groupId}</parentGroupId>
+ <parentArtifactId>${parent.artifactId}</parentArtifactId>
+ <parentVersion>${parent.version}</parentVersion>
+ </properties>
+
+ <build>
+ <outputDirectory>target/bin</outputDirectory>
+ </build>
+
+ <reporting>
+ <outputDirectory>target/doc</outputDirectory>
+ </reporting>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unprefixed-expression-interpolation/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unprefixed-expression-interpolation/pom.xml
new file mode 100644
index 00000000..768a5e98
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unprefixed-expression-interpolation/pom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3831</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3831</name>
+ <description>Test POM interpolation with expressions of the form $ { * } (ugly but real)</description>
+
+ <modules>
+ <module>parent/child</module>
+ </modules>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-append/child/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-append/child/pom.xml
new file mode 100644
index 00000000..1f377df1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-append/child/pom.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.its.mng2006</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <artifactId>child</artifactId>
+ <name>Child Project</name>
+ <description>
+ Test that inheritance of those URLs which automatically append the child's artifact id take the child's
+ relative location to the parent into account.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-expression</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <goals>
+ <goal>eval</goal>
+ </goals>
+ <configuration>
+ <outputFile>target/pom.properties</outputFile>
+ <expressions>
+ <expression>project/url</expression>
+ <expression>project/scm</expression>
+ <expression>project/distributionManagement/site</expression>
+ </expressions>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-append/parent/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-append/parent/pom.xml
new file mode 100644
index 00000000..f8b069f8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-append/parent/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng2006</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-2006</name>
+ <description>
+ Test that inheritance of those URLs which automatically append the child's artifact id take the child's
+ relative location to the parent into account.
+ </description>
+
+ <modules>
+ <module>../child</module>
+ </modules>
+
+ <url>http://project.url/parent</url>
+
+ <scm>
+ <url>http://viewvc.project.url/parent</url>
+ <connection>http://scm.project.url/parent</connection>
+ <developerConnection>https://scm.project.url/parent</developerConnection>
+ </scm>
+ <distributionManagement>
+ <site>
+ <url>http://site.project.url/parent</url>
+ <id>parent.site</id>
+ </site>
+ </distributionManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/another-parent/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/another-parent/pom.xml
new file mode 100644
index 00000000..463772fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/another-parent/pom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <!-- NOTE: The base directory name of this project deliberately does not match its artifact id! -->
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3846</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>ap</artifactId>
+ <packaging>pom</packaging>
+ <name>Another Parent to test multi-level URL adjustment</name>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/another-parent/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/another-parent/sub/pom.xml
new file mode 100644
index 00000000..128e63d1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/another-parent/sub/pom.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <!-- NOTE: The base directory name of this project deliberately does not match its artifact id! -->
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3846</groupId>
+ <artifactId>ap</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child</artifactId>
+ <name>Child Project</name>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/pom.xml
new file mode 100644
index 00000000..ed4cdf08
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/pom.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3846</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <name>Maven Integration Test :: MNG-3846</name>
+ <description>
+ Test that inheritance of certain URLs automatically appends the child's artifact id.
+ </description>
+
+ <url>http://parent.url</url>
+ <organization>
+ <name>parent-org</name>
+ <url>http://parent.url/org</url>
+ </organization>
+ <licenses>
+ <license>
+ <name>parent-license</name>
+ <url>http://parent.url/license.txt</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+
+ <scm>
+ <url>http://parent.url/viewvc</url>
+ <connection>http://parent.url/scm</connection>
+ <developerConnection>https://parent.url/scm</developerConnection>
+ </scm>
+ <issueManagement>
+ <url>http://parent.url/issues</url>
+ </issueManagement>
+ <ciManagement>
+ <url>http://parent.url/ci</url>
+ </ciManagement>
+ <distributionManagement>
+ <repository>
+ <url>http://parent.url/dist</url>
+ <id>parent.distros</id>
+ </repository>
+ <snapshotRepository>
+ <url>http://parent.url/snaps</url>
+ <id>parent.snaps</id>
+ </snapshotRepository>
+ <site>
+ <url>http://parent.url/site</url>
+ <id>parent.site</id>
+ </site>
+ <downloadUrl>http://parent.url/download</downloadUrl>
+ </distributionManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/sub/pom.xml
new file mode 100644
index 00000000..c8e9c108
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/sub/pom.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <!-- NOTE: The base directory name of this project deliberately does not match its artifact id! -->
+
+ <parent>
+ <groupId>org.apache.maven.its.mng3846</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.1</version>
+ </parent>
+
+ <artifactId>child</artifactId>
+ <name>Child Project</name>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-no-decoding/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-no-decoding/pom.xml
new file mode 100644
index 00000000..2dcceb93
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-no-decoding/pom.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4116</groupId>
+ <artifactId>test</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-4116</name>
+ <description>
+ Test that the project builder does not decode URLs (which must be done by the transport layer instead).
+ </description>
+
+ <!-- some URLs using percent-encoded characters -->
+ <url>http://maven.apache.org/spacy%20path</url>
+ <scm>
+ <connection>scm:svn:svn+ssh://svn.apache.org/spacy%20path</connection>
+ <developerConnection>scm:svn:svn+ssh://svn.apache.org/spacy%20path</developerConnection>
+ <url>http://svn.apache.org/viewvc/spacy%20path</url>
+ </scm>
+ <issueManagement>
+ <system>none</system>
+ <url>http://issues.apache.org/spacy%20path</url>
+ </issueManagement>
+ <ciManagement>
+ <system>none</system>
+ <url>http://ci.apache.org/spacy%20path</url>
+ </ciManagement>
+ <distributionManagement>
+ <repository>
+ <id>dist</id>
+ <url>scm:svn:svn+ssh://dist.apache.org/spacy%20path</url>
+ </repository>
+ <snapshotRepository>
+ <id>snap</id>
+ <url>scm:svn:svn+ssh://snap.apache.org/spacy%20path</url>
+ </snapshotRepository>
+ <site>
+ <id>site</id>
+ <url>scm:svn:svn+ssh://site.apache.org/spacy%20path</url>
+ </site>
+ </distributionManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-coalesce-text/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-coalesce-text/pom.xml
new file mode 100644
index 00000000..5822d8d3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-coalesce-text/pom.xml
@@ -0,0 +1,567 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3839</groupId>
+ <artifactId>coreit</artifactId>
+ <version>0.1</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-3839</name>
+ <description>
+ Test that POM parsing properly coalesces text data.
+ </description>
+
+ <properties>
+ <!--
+ This checks the coalescing of CHARACTERS and CDATA events. Note that inner whitespace must be retained.
+ -->
+ <prop0>A <![CDATA[ Test ]]> Project<![CDATA[ ]]>Property</prop0>
+
+ <!--
+ This checks the coalescing of CHARACTERS events that are interleaved with comments. Note that inner whitespace
+ formed by whitespace-only events must be retained.
+ -->
+ <prop1><!-- X -->That's<!-- X --> <!-- X -->a<!-- X --> <!-- X -->test!<!-- X --></prop1>
+
+ <!--
+ This checks the coalescing of CHARACTERS events which would otherwise be reported in chunks of the internal parser
+ buffer size (usually 4 or 8 KB). The text block is designed such that its length is exactly 32 KB after leading
+ and traling whitespace has been removed and all line terminators have been removed.
+ -->
+ <prop2>
+00 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+01 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+02 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+03 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+04 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+05 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+06 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+07 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+08 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+09 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+10 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+11 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+12 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+13 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+14 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+15 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+16 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+17 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+18 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+19 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+20 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+21 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+22 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+23 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+24 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+25 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+26 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+27 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+28 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+29 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+30 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+31 KB 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+0 1 2 3 4 5 6 X
+ </prop2>
+ </properties>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-markup-interpolation/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-markup-interpolation/pom.xml
new file mode 100644
index 00000000..584712fd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-markup-interpolation/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3924</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1-SNAPSHOT</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-3924</name>
+ <description>
+ Test that interpolation of properties that resolve to XML markup doesn't crash the project builder.
+ </description>
+
+ <properties>
+ <!-- That's the property containing escaped XML markup -->
+ <xmlMarkup>&lt;?xml version='1.0'?&gt;Tom&amp;Jerry</xmlMarkup>
+ <!-- That's a property where the above property will be resolved -->
+ <xmlTest>${xmlMarkup}</xmlTest>
+ </properties>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-whitespace/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-whitespace/pom.xml
new file mode 100644
index 00000000..433dd522
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-whitespace/pom.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <!-- NOTE: The ugly formatting is essential part of this test! -->
+ <groupId>
+ org.apache.maven.its.mng4070
+ </groupId>
+ <artifactId>
+ parent
+ </artifactId>
+ <version>
+ 1.0
+ </version>
+ <packaging>
+ pom
+ </packaging>
+
+ <name>Maven Integration Test :: MNG-4070</name>
+ <description>
+ Test that whitespace around artifact coordinates does not change artifact identity.
+ </description>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-whitespace/sub/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-whitespace/sub/pom.xml
new file mode 100644
index 00000000..f5ea684d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-whitespace/sub/pom.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <!-- NOTE: The ugly formatting is essential part of this test! -->
+ <parent>
+ <groupId> org.apache.maven.its.mng4070 </groupId>
+ <artifactId> parent </artifactId>
+ <version> 1.0 </version>
+ </parent>
+
+ <artifactId>subproject</artifactId>
+ <version>1.0</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-4070 :: Child</name>
+ <description>
+ Test that whitespace around artifact coordinates does not change artifact identity.
+ </description>
+
+ <dependencies>
+ <dependency>
+ <!-- NOTE: The ugly formatting is essential part of this test! -->
+ <groupId> org.apache.maven.its.mng4070 </groupId>
+ <artifactId> a </artifactId>
+ <version> 0.1 </version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/repositories/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/repositories/pom.xml
new file mode 100644
index 00000000..97023414
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/repositories/pom.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4107</groupId>
+ <artifactId>test</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>jar</packaging>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/repositories/settings.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/repositories/settings.xml
new file mode 100644
index 00000000..6f96f0b6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/repositories/settings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<settings>
+ <profiles>
+ <profile>
+ <id>maven-core-it-repo</id>
+ <repositories>
+ <repository>
+ <id>maven-core-it-0</id>
+ <url>@baseurl@/repo-0</url>
+ <releases>
+ <checksumPolicy>ignore</checksumPolicy>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>maven-core-it-1</id>
+ <url>@baseurl@/repo-1</url>
+ <releases>
+ <checksumPolicy>ignore</checksumPolicy>
+ </releases>
+ <snapshots>
+ <checksumPolicy>ignore</checksumPolicy>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+ </profile>
+ </profiles>
+ <activeProfiles>
+ <activeProfile>maven-core-it-repo</activeProfile>
+ </activeProfiles>
+</settings>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/settings-no-pom/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/settings-no-pom/pom.xml
new file mode 100644
index 00000000..ee627826
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/settings-no-pom/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng3099</groupId>
+ <artifactId>maven-mng3099-plugin</artifactId>
+ <version>1</version>
+ <packaging>maven-plugin</packaging>
+
+ <name>maven-mng3099-plugin</name>
+ <description>Tests properties injected as a result of active profiles in the user settings file.</description>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/settings-no-pom/settings.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/settings-no-pom/settings.xml
new file mode 100644
index 00000000..964e0512
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/settings-no-pom/settings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<settings
+ xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
+
+ <profiles>
+ <profile>
+ <id>local-profile</id>
+ <properties>
+ <local-profile-prop>local-profile-prop-value</local-profile-prop>
+ </properties>
+ </profile>
+ </profiles>
+
+ <activeProfiles>
+ <activeProfile>local-profile</activeProfile>
+ </activeProfiles>
+
+</settings>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/test-pom-and-settings-interpolation/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/test-pom-and-settings-interpolation/pom.xml
new file mode 100644
index 00000000..245349a6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/test-pom-and-settings-interpolation/pom.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng4107</groupId>
+ <artifactId>test</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>jar</packaging>
+
+ <name>Maven Integration Test :: MNG-4107</name>
+ <description>
+ Test that POM interpolation uses the property values from the dominant profile source (POM vs. profiles.xml
+ vs. settings.xml). This boils down to the proper order of profile injection and interpolation, i.e.
+ interpolate after profiles from all sources are injected.
+ </description>
+
+ <properties>
+ <!-- collect the effective property values as derived by interpolation -->
+ <pomVsSettingsInterpolated>${pomVsSettings}</pomVsSettingsInterpolated>
+ </properties>
+
+ <profiles>
+ <profile>
+ <id>pom</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <properties>
+ <pomProfile>applied</pomProfile>
+ <pomVsSettings>pom</pomVsSettings>
+ </properties>
+ </profile>
+ </profiles>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-expression</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <goals>
+ <goal>eval</goal>
+ </goals>
+ <configuration>
+ <outputFile>target/pom.properties</outputFile>
+ <expressions>
+ <expression>project/properties</expression>
+ </expressions>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/test-pom-and-settings-interpolation/settings.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/test-pom-and-settings-interpolation/settings.xml
new file mode 100644
index 00000000..2d42d495
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/test-pom-and-settings-interpolation/settings.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<settings>
+ <profiles>
+ <profile>
+ <id>settings</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <properties>
+ <settingsProfile>applied</settingsProfile>
+ <pomVsSettings>settings</pomVsSettings>
+ </properties>
+ </profile>
+ </profiles>
+</settings>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/META-INF/maven/org.apache.maven/maven-core/pom.properties b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/META-INF/maven/org.apache.maven/maven-core/pom.properties
new file mode 100644
index 00000000..ef45373a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/META-INF/maven/org.apache.maven/maven-core/pom.properties
@@ -0,0 +1 @@
+version=2.1-SNAPSHOT \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/META-INF/plexus/components.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/META-INF/plexus/components.xml
new file mode 100644
index 00000000..714cb36b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/META-INF/plexus/components.xml
@@ -0,0 +1,113 @@
+<component-set>
+ <components>
+ <component>
+ <role>org.apache.maven.lifecycle.binding.LegacyLifecycleParsingTestComponent</role>
+ <role-hint>default</role-hint>
+ <implementation>org.apache.maven.lifecycle.binding.LegacyLifecycleParsingTestComponent</implementation>
+ <configuration>
+ <lifecycles>
+ <lifecycle>
+ <id>default</id>
+ <phases>
+ <phase>validate</phase>
+ <phase>initialize</phase>
+ <phase>generate-sources</phase>
+ <phase>process-sources</phase>
+ <phase>generate-resources</phase>
+ <phase>process-resources</phase>
+ <phase>compile</phase>
+ <phase>process-classes</phase>
+ <phase>generate-test-sources</phase>
+ <phase>process-test-sources</phase>
+ <phase>generate-test-resources</phase>
+ <phase>process-test-resources</phase>
+ <phase>test-compile</phase>
+ <phase>process-test-classes</phase>
+ <phase>test</phase>
+ <phase>prepare-package</phase>
+ <phase>package</phase>
+ <phase>pre-integration-test</phase>
+ <phase>integration-test</phase>
+ <phase>post-integration-test</phase>
+ <phase>verify</phase>
+ <phase>install</phase>
+ <phase>deploy</phase>
+ </phases>
+ </lifecycle>
+ <lifecycle>
+ <id>clean</id>
+ <phases>
+ <phase>pre-clean</phase>
+ <phase>clean</phase>
+ <phase>post-clean</phase>
+ </phases>
+ <default-phases>
+ <clean>org.apache.maven.plugins:maven-clean-plugin:clean</clean>
+ </default-phases>
+ </lifecycle>
+ <lifecycle>
+ <id>site</id>
+ <phases>
+ <phase>pre-site</phase>
+ <phase>site</phase>
+ <phase>post-site</phase>
+ <phase>site-deploy</phase>
+ </phases>
+ <default-phases>
+ <site>org.apache.maven.plugins:maven-site-plugin:site</site>
+ <site-deploy>org.apache.maven.plugins:maven-site-plugin:deploy</site-deploy>
+ </default-phases>
+ </lifecycle>
+ </lifecycles>
+ </configuration>
+ </component>
+ <component>
+ <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
+ <role-hint>test-mapping</role-hint>
+ <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
+ <configuration>
+ <lifecycles>
+ <lifecycle>
+ <id>default</id>
+ <!-- START SNIPPET: pom-lifecycle -->
+
+ <phases>
+ <package>org.apache.maven.plugins:maven-site-plugin:attach-descriptor</package>
+ <install>org.apache.maven.plugins:maven-install-plugin:install</install>
+ <deploy>org.apache.maven.plugins:maven-deploy-plugin:deploy</deploy>
+ </phases>
+ <optional-mojos>
+ <optional-mojo>org.apache.maven.plugins:maven-site-plugin:attach-descriptor</optional-mojo>
+ </optional-mojos>
+ <!-- END SNIPPET: pom-lifecycle -->
+ </lifecycle>
+ </lifecycles>
+ </configuration>
+ </component>
+ <component>
+ <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
+ <role-hint>test-mapping2</role-hint>
+ <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
+ <configuration>
+ <lifecycles>
+ <lifecycle>
+ <id>default</id>
+ <!-- START SNIPPET: pom-lifecycle -->
+ <phases>
+ <package>
+ org.apache.maven.plugins:maven-site-plugin:attach-descriptor,
+ org.apache.maven.plugins:maven-clean-plugin:clean
+ </package>
+ <install>org.apache.maven.plugins:maven-install-plugin:install</install>
+ <deploy>org.apache.maven.plugins:maven-deploy-plugin:deploy</deploy>
+ </phases>
+ <optional-mojos>
+ <optional-mojo>org.apache.maven.plugins:maven-site-plugin:attach-descriptor</optional-mojo>
+ </optional-mojos>
+ <!-- END SNIPPET: pom-lifecycle -->
+ </lifecycle>
+ </lifecycles>
+ </configuration>
+ </component>
+ </components>
+</component-set> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/canonical-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/canonical-pom.xml
new file mode 100644
index 00000000..82bf8725
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/canonical-pom.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>2.0-SNAPSHOT</version>
+
+ <name>Maven</name>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-plexus-plugin</artifactId>
+ <version>1.0</version>
+ <configuration>
+ <plexusConfiguration>src/conf/plexus.conf</plexusConfiguration>
+ <plexusConfigurationPropertiesFile>src/conf/plexus.properties</plexusConfigurationPropertiesFile>
+ <plexusApplicationName>Continuum</plexusApplicationName>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>plexus:runtime</goal>
+ </goals>
+ <configuration>
+ <plexusApplicationName>ContinuumPro</plexusApplicationName>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/dependencyManagement-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/dependencyManagement-pom.xml
new file mode 100644
index 00000000..2accaca8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/dependencyManagement-pom.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>2.0-SNAPSHOT</version>
+
+ <name>Maven</name>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-b</artifactId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-plexus-plugin</artifactId>
+ <version>1.0</version>
+ <configuration>
+ <plexusConfiguration>src/conf/plexus.conf</plexusConfiguration>
+ <plexusConfigurationPropertiesFile>src/conf/plexus.properties</plexusConfigurationPropertiesFile>
+ <plexusApplicationName>Continuum</plexusApplicationName>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>plexus:runtime</goal>
+ </goals>
+ <configuration>
+ <plexusApplicationName>ContinuumPro</plexusApplicationName>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/distributionManagement-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/distributionManagement-pom.xml
new file mode 100644
index 00000000..1a8ee7ff
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/distributionManagement-pom.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>2.0-SNAPSHOT</version>
+
+ <name>Maven</name>
+
+ <distributionManagement>
+ <snapshotRepository>
+ <id>repo-id</id>
+ <name>my snapshot repository</name>
+ <url>file:///path/to/snapshot/repo</url>
+ </snapshotRepository>
+ <repository>
+ <id>repo-id2</id>
+ <name>my repository</name>
+ <url>file:///path/to/repo</url>
+ </repository>
+ </distributionManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-a-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-a-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-a-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-a-1.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-a-1.1.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-a-1.1.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-b-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-b-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-b-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-b-1.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-b-1.1.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-b-1.1.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-c-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-c-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-c-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-c-1.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-c-1.1.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-c-1.1.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-d-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-d-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-d-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-d-1.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-d-1.1.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-d-1.1.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-d-1.2.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-d-1.2.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-d-1.2.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-a-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-a-1.0.pom
new file mode 100644
index 00000000..93fc0d0b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-a-1.0.pom
@@ -0,0 +1,14 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-a</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Fake Maven Central Repository</name>
+ <url>file://dummy</url>
+ </repository>
+ </repositories>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-a-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-a-1.1.pom
new file mode 100644
index 00000000..a0830861
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-a-1.1.pom
@@ -0,0 +1,14 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-a</artifactId>
+ <packaging>jar</packaging>
+ <version>1.1</version>
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Fake Maven Central Repository</name>
+ <url>file://dummy</url>
+ </repository>
+ </repositories>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-b-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-b-1.0.pom
new file mode 100644
index 00000000..c173c663
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-b-1.0.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-b</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-b-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-b-1.1.pom
new file mode 100644
index 00000000..fff241a1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-b-1.1.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-b</artifactId>
+ <packaging>jar</packaging>
+ <version>1.1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-c-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-c-1.0.pom
new file mode 100644
index 00000000..1f049786
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-c-1.0.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-c</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-c-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-c-1.1.pom
new file mode 100644
index 00000000..8bd52514
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-c-1.1.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-c</artifactId>
+ <packaging>jar</packaging>
+ <version>1.1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-d-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-d-1.0.pom
new file mode 100644
index 00000000..ac6ef12e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-d-1.0.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-d-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-d-1.1.pom
new file mode 100644
index 00000000..6e22f608
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-d-1.1.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-d-1.2.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-d-1.2.pom
new file mode 100644
index 00000000..16f8d905
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-d-1.2.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.2</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p1/pom.xml
new file mode 100644
index 00000000..7bfca342
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p1/pom.xml
@@ -0,0 +1,45 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>p1</artifactId>
+ <packaging>pom</packaging>
+ <name>p1</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-b</artifactId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-a</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-b</artifactId>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <configuration>
+ <tasks><echo>${project.parent.basedir}</echo></tasks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p2/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p2/pom.xml
new file mode 100644
index 00000000..b45ce9c6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p2/pom.xml
@@ -0,0 +1,56 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>p2</artifactId>
+ <packaging>pom</packaging>
+ <name>p2</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven</groupId>
+ <artifactId>p1</artifactId>
+ <version>1.0</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-c</artifactId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-a</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-b</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-c</artifactId>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <configuration>
+ <tasks><echo>${project.parent.basedir}</echo></tasks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p3/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p3/pom.xml
new file mode 100644
index 00000000..e9648e39
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p3/pom.xml
@@ -0,0 +1,59 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>p3</artifactId>
+ <packaging>pom</packaging>
+ <name>p3</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-a</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-c</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-d</artifactId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-a</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-c</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-d</artifactId>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <configuration>
+ <tasks><echo>${project.parent.basedir}</echo></tasks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p4/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p4/pom.xml
new file mode 100644
index 00000000..7ffef9d7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p4/pom.xml
@@ -0,0 +1,67 @@
+<project>
+ <parent>
+ <artifactId>p0</artifactId>
+ <groupId>maven</groupId>
+ <version>1.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>p4</artifactId>
+ <packaging>pom</packaging>
+ <name>p4</name>
+ <version>1.0</version>
+ <scm>
+ <url>scm-url</url>
+ </scm>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven</groupId>
+ <artifactId>p2</artifactId>
+ <version>1.0</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven</groupId>
+ <artifactId>p3</artifactId>
+ <version>1.0</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-b</artifactId>
+ <version>1.1</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-a</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-b</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-c</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-d</artifactId>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <configuration>
+ <tasks><echo>${project.parent.basedir}</echo></tasks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/pom.xml
new file mode 100644
index 00000000..3ccf7e63
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/pom.xml
@@ -0,0 +1,26 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>p0</artifactId>
+ <packaging>pom</packaging>
+ <name>p0</name>
+ <version>1.0</version>
+ <organization>
+ <name>Codehaus</name>
+ </organization>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-a</artifactId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <modules>
+ <module>p1</module>
+ <module>p2</module>
+ <module>p3</module>
+ <module>p4</module>
+ </modules>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/marker.txt b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/marker.txt
new file mode 100644
index 00000000..d9bab060
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/marker.txt
@@ -0,0 +1 @@
+this is just a marker file. \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-a-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-a-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-a-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-b-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-b-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-b-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-c-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-c-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-c-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-d-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-d-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-d-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-a-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-a-1.0.pom
new file mode 100644
index 00000000..6905f6c8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-a-1.0.pom
@@ -0,0 +1,23 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-a</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Fake Maven Central Repository</name>
+ <url>file://dummy</url>
+ </repository>
+ </repositories>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-b</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-b-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-b-1.0.pom
new file mode 100644
index 00000000..e814951a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-b-1.0.pom
@@ -0,0 +1,23 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-b</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-c</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-d</artifactId>
+ <version>1.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-c-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-c-1.0.pom
new file mode 100644
index 00000000..4631b88f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-c-1.0.pom
@@ -0,0 +1,16 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-c</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-d</artifactId>
+ <version>1.2</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.1.pom
new file mode 100644
index 00000000..6e22f608
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.1.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.2.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.2.pom
new file mode 100644
index 00000000..6e22f608
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.2.pom
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-d</artifactId>
+ <packaging>jar</packaging>
+ <version>1.1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar
new file mode 100644
index 00000000..c2c027fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar
@@ -0,0 +1 @@
+local \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version
new file mode 100644
index 00000000..09f9180f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version
@@ -0,0 +1 @@
+20040101.101010 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar
new file mode 100644
index 00000000..c2c027fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar
@@ -0,0 +1 @@
+local \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version
new file mode 100644
index 00000000..09f9180f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version
@@ -0,0 +1 @@
+20040101.101010 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar
new file mode 100644
index 00000000..c2c027fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar
@@ -0,0 +1 @@
+local \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version
new file mode 100644
index 00000000..09f9180f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version
@@ -0,0 +1 @@
+20040101.101010 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/poms/maven-test-snapshot-resolving-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/poms/maven-test-snapshot-resolving-1.0.pom
new file mode 100644
index 00000000..64a075f4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/poms/maven-test-snapshot-resolving-1.0.pom
@@ -0,0 +1,49 @@
+<project>
+ <groupId>snapshot-test</groupId>
+ <artifactId>maven-test-snapshot-resolving</artifactId>
+ <packaging>jar</packaging>
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Fake Maven Central Repository</name>
+ <url>file://dummy</url>
+ </repository>
+ </repositories>
+ <dependencies>
+ <dependency>
+ <groupId>snapshot-test</groupId>
+ <artifactId>maven-snapshot-a</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>snapshot-test</groupId>
+ <artifactId>maven-snapshot-b</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>snapshot-test</groupId>
+ <artifactId>maven-snapshot-c</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>snapshot-test</groupId>
+ <artifactId>maven-snapshot-d</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>snapshot-test</groupId>
+ <artifactId>maven-snapshot-e</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/MavenLifecycleParticipantTest.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/MavenLifecycleParticipantTest.xml
new file mode 100644
index 00000000..ebbbf791
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/MavenLifecycleParticipantTest.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plexus>
+ <components>
+ <component>
+ <role>org.apache.maven.project.ProjectBuildingHelper</role>
+ <implementation>org.apache.maven.project.EmptyProjectBuildingHelper</implementation>
+ </component>
+ </components>
+</plexus>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/execution/test-extension-1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/execution/test-extension-1.jar
new file mode 100644
index 00000000..0272ee3c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/execution/test-extension-1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.jar
new file mode 100644
index 00000000..674d71e8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.jar.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.jar.md5
new file mode 100644
index 00000000..92c6c765
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.jar.md5
@@ -0,0 +1 @@
+1f40fb782a4f2cf78f161d32670f7a3a \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.jar.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.jar.sha1
new file mode 100644
index 00000000..ed10f030
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.jar.sha1
@@ -0,0 +1 @@
+99129f16442844f6a4a11ae22fbbee40b14d774f \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.pom
new file mode 100644
index 00000000..2169a65d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.pom
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd ">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <name>JUnit</name>
+ <url>http://junit.org</url>
+ <description>
+ JUnit is a regression testing framework written by Erich Gamma and Kent Beck. It is used by the developer who implements unit tests in Java.
+ </description>
+ <organization>
+ <name>JUnit</name>
+ <url>http://www.junit.org</url>
+ </organization>
+ <licenses>
+ <license>
+ <name>Common Public License Version 1.0</name>
+ <url>http://www.opensource.org/licenses/cpl1.0.txt</url>
+ </license>
+ </licenses>
+ <scm>
+ <url>http://junit.cvs.sourceforge.net/junit/</url>
+ </scm>
+ <dependencies>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.pom.md5
new file mode 100644
index 00000000..51e102f6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.pom.md5
@@ -0,0 +1 @@
+50b40cb7342f52b702e6337d5debf1ae \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.pom.sha1
new file mode 100644
index 00000000..82ac6705
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.pom.sha1
@@ -0,0 +1 @@
+16d74791c801c89b0071b1680ea0bc85c93417bb \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/apache/3/apache-3.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/apache/3/apache-3.pom
new file mode 100644
index 00000000..1fc7e406
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/apache/3/apache-3.pom
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Copyright 2005-2006 The Apache Software Foundation.
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <!-- Shared parent. Doesn't define a lot of things about Apache like general mailing lists, but does
+ define the settings common to all projects at Apache -->
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>3</version>
+ <packaging>pom</packaging>
+ <name>The Apache Software Foundation</name>
+ <description>
+ The Apache Software Foundation provides support for the Apache community of open-source software projects.
+ The Apache projects are characterized by a collaborative, consensus based development process, an open and
+ pragmatic software license, and a desire to create high quality software that leads the way in its field.
+ We consider ourselves not simply a group of projects sharing a server, but rather a community of developers
+ and users.
+ </description>
+ <licenses>
+ <license>
+ <name>The Apache Software License, Version 2.0</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+ <organization>
+ <name>Apache Software Foundation</name>
+ <url>http://www.apache.org/</url>
+ </organization>
+ <url>http://www.apache.org/</url>
+ <repositories>
+ <repository>
+ <id>apache.snapshots</id>
+ <name>Apache Snapshot Repository</name>
+ <url>http://people.apache.org/repo/m2-snapshot-repository</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </repository>
+ </repositories>
+ <distributionManagement>
+ <!-- Site omitted - each project must provide their own -->
+ <repository>
+ <id>apache.releases</id>
+ <name>Apache Release Distribution Repository</name>
+ <url>scp://people.apache.org/www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
+ </repository>
+ <snapshotRepository>
+ <id>apache.snapshots</id>
+ <name>Apache Development Snapshot Repository</name>
+ <url>scp://people.apache.org/www/people.apache.org/repo/m2-snapshot-repository</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <mailingLists>
+ <mailingList>
+ <name>Apache Announce List</name>
+ <subscribe>announce-subscribe@apache.org</subscribe>
+ <unsubscribe>announce-unsubscribe@apache.org</unsubscribe>
+ <post>announce@apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/www-announce/</archive>
+ </mailingList>
+ </mailingLists>
+</project>
+
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/apache/3/apache-3.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/apache/3/apache-3.pom.md5
new file mode 100644
index 00000000..b9d0ea16
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/apache/3/apache-3.pom.md5
@@ -0,0 +1 @@
+c857ebbb5f303f435495e40e6c9e45a2 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/apache/3/apache-3.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/apache/3/apache-3.pom.sha1
new file mode 100644
index 00000000..ffb57bbc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/apache/3/apache-3.pom.sha1
@@ -0,0 +1 @@
+1bc0010136a890e2fd38d901a0b7ecdf0e3f9871 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jar
new file mode 100644
index 00000000..5bc9c06c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jar.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jar.md5
new file mode 100644
index 00000000..5ff89e83
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jar.md5
@@ -0,0 +1 @@
+430da483dcfb2964a9dcd619c29a6c78 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jar.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jar.sha1
new file mode 100644
index 00000000..a3418804
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jar.sha1
@@ -0,0 +1 @@
+ea9e3f3fdc25f386d5f9ac861a55b6c3bb773d91 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom
new file mode 100644
index 00000000..8de3ce6d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <artifactId>maven-parent</artifactId>
+ <groupId>org.apache.maven</groupId>
+ <version>5</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.artifact</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>3.0-SNAPSHOT</version>
+ <name>Maven Artifact</name>
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/maven/artifact/trunk</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/artifact/trunk</developerConnection>
+ <url>http://svn.apache.org/viewcvs.cgi/maven/artifact/trunk</url>
+ </scm>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.4.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>1.0-alpha-32</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-active-collections</artifactId>
+ <version>1.0-beta-1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ <version>1.0-beta-2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <version>1.0-beta-2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <version>1.2_Java1.3</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>1.0-alpha-17</version>
+ <configuration>
+ <version>1.0.0</version>
+ <model>src/main/mdo/metadata.mdo</model>
+ </configuration>
+ <executions>
+ <execution>
+ <id>site-docs</id>
+ <phase>pre-site</phase>
+ <goals>
+ <goal>xdoc</goal>
+ <goal>xsd</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>standard</id>
+ <goals>
+ <goal>java</goal>
+ <goal>xpp3-reader</goal>
+ <goal>xpp3-writer</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>**/testutils/**</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom.md5
new file mode 100644
index 00000000..11e35363
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom.md5
@@ -0,0 +1 @@
+794377b5385c68c660ee9ca26e6b5cf1 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom.sha1
new file mode 100644
index 00000000..4beb688d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom.sha1
@@ -0,0 +1 @@
+358254e73f075bcfb9d587d0da553083abd0cc45 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.jar
new file mode 100644
index 00000000..0272ee3c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.pom
new file mode 100644
index 00000000..70114e72
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.pom
@@ -0,0 +1,73 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.core.test</groupId>
+ <artifactId>test-extension</artifactId>
+ <packaging>jar</packaging>
+ <version>1</version>
+ <name>test-extension</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.artifact</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>3.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus</artifactId>
+ <version>1.0.11</version>
+ <type>pom</type>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ <version>1.0-alpha-16</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>1.0-alpha-16</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.2-beta-2-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>repo-assembly</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>repo.xml</descriptor>
+ </descriptors>
+ <finalName>test-extension</finalName>
+ <appendAssemblyId>true</appendAssemblyId>
+ <outputDirectory>${pom.basedir}/../../resources/org/apache/maven/extension</outputDirectory>
+ <ignoreDirFormatExtensions>true</ignoreDirFormatExtensions>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <distributionManagement>
+ <repository>
+ <id>dummy</id>
+ <url>file:///tmp/dummy-repo</url>
+ </repository>
+ </distributionManagement>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.pom.md5
new file mode 100644
index 00000000..ad06718c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.pom.md5
@@ -0,0 +1 @@
+e8f6e0f4ef9c2ed3fb185ef44165fb40 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.pom.sha1
new file mode 100644
index 00000000..6065ee04
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.pom.sha1
@@ -0,0 +1 @@
+88ace5d78ee32fa0ce59714a4a42a73af3b52bd3 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.jar
new file mode 100644
index 00000000..04fe3846
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.pom
new file mode 100644
index 00000000..d9e4cde9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.pom
@@ -0,0 +1,44 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.core.test</groupId>
+ <artifactId>test-lifecycle-and-artifactHandler</artifactId>
+ <packaging>jar</packaging>
+ <version>1</version>
+ <name>test-lifecycle-and-artifactHandler</name>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.2-beta-2-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>repo-assembly</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>repo.xml</descriptor>
+ </descriptors>
+ <finalName>test-extension</finalName>
+ <appendAssemblyId>true</appendAssemblyId>
+ <outputDirectory>${pom.basedir}/../../resources/org/apache/maven/extension</outputDirectory>
+ <ignoreDirFormatExtensions>true</ignoreDirFormatExtensions>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <distributionManagement>
+ <repository>
+ <id>dummy</id>
+ <url>file:///tmp/dummy-repo</url>
+ </repository>
+ </distributionManagement>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.pom.md5
new file mode 100644
index 00000000..01d51942
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.pom.md5
@@ -0,0 +1 @@
+7f10427af029d20cbea57c21d1aec65e \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.pom.sha1
new file mode 100644
index 00000000..dac1e45a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.pom.sha1
@@ -0,0 +1 @@
+ed98c808239aefb0ec51a8b9e96f191da7fd92e6 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/4/maven-parent-4.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/4/maven-parent-4.pom
new file mode 100644
index 00000000..132d9d73
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/4/maven-parent-4.pom
@@ -0,0 +1,304 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Copyright 2005-2006 The Apache Software Foundation.
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>3</version>
+ <relativePath>../asf/pom.xml</relativePath>
+ </parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-parent</artifactId>
+ <version>4</version>
+ <packaging>pom</packaging>
+ <name>Apache Maven</name>
+ <description>
+ Maven is a software project management and comprehension tool. Based on the concept of a project object model
+ (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.
+ </description>
+ <url>http://maven.apache.org/</url>
+ <issueManagement>
+ <system>jira</system>
+ <url>http://jira.codehaus.org/browse/MPA</url>
+ </issueManagement>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://maven.zones.apache.org:8080/continuum</url>
+ <notifiers>
+ <notifier>
+ <type>mail</type>
+ <configuration>
+ <address>notifications@maven.apache.org</address>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <inceptionYear>2002</inceptionYear>
+ <mailingLists>
+ <mailingList>
+ <name>Maven Announcements List</name>
+ <post>announce@maven.apache.org</post>
+ <subscribe>announce-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>announce-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-announce/</archive>
+ </mailingList>
+ <mailingList>
+ <name>Maven Issues List</name>
+ <post>issues@maven.apache.org</post>
+ <subscribe>issues-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>issues-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-issues/</archive>
+ </mailingList>
+ <mailingList>
+ <name>Maven Notifications List</name>
+ <post>notifications@maven.apache.org</post>
+ <subscribe>notifications-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>notifications-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-notifications/</archive>
+ </mailingList>
+ </mailingLists>
+
+ <developers>
+ <developer>
+ <id>jvanzyl</id>
+ <name>Jason van Zyl</name>
+ <email>jason@maven.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Chair</role>
+ </roles>
+ <timezone>-5</timezone>
+ </developer>
+ <developer>
+ <id>brett</id>
+ <name>Brett Porter</name>
+ <email>brett@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+10</timezone>
+ </developer>
+ <developer>
+ <id>evenisse</id>
+ <name>Emmanuel Venisse</name>
+ <email>evenisse@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>kenney</id>
+ <name>Kenney Westerhof</name>
+ <email>kenney@apache.org</email>
+ <organization>Neonics</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>snicoll</id>
+ <name>Stephane Nicoll</name>
+ <email>snicoll@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>vmassol</id>
+ <name>Vincent Massol</name>
+ <email>vmassol@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>fgiust</id>
+ <name>Fabrizio Giustina</name>
+ <email>fgiust@apache.org</email>
+ <organization>openmind</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>epunzalan</id>
+ <name>Edwin Punzalan</name>
+ <email>epunzalan@mergere.com</email>
+ <organization>Mergere</organization>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>+8</timezone>
+ </developer>
+ <developer>
+ <id>mperham</id>
+ <name>Mike Perham</name>
+ <email>mperham@gmail.com</email>
+ <organization>IBM</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>-6</timezone>
+ </developer>
+ <developer>
+ <id>jdcasey</id>
+ <name>John Casey</name>
+ <email>jdcasey@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>-5</timezone>
+ </developer>
+ <developer>
+ <id>trygvis</id>
+ <name>Trygve Laugstol</name>
+ <email>trygvis@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>vsiveton</id>
+ <name>Vincent Siveton</name>
+ <email>vsiveton@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>-5</timezone>
+ </developer>
+ <developer>
+ <id>carlos</id>
+ <name>Carlos Sanchez</name>
+ <email>carlos@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>dennisl</id>
+ <name>Dennis Lundberg</name>
+ <email>dennisl@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ </developers>
+
+ <distributionManagement>
+ <site>
+ <id>apache.website</id>
+ <url>scp://people.apache.org/www/maven.apache.org</url>
+ </site>
+ </distributionManagement>
+
+<!-- Disabled until projects have been made to comply
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-pmd-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>cpd-check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+-->
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <configuration>
+ <configLocation>http://svn.apache.org/repos/asf/maven/plugins/trunk/maven-checkstyle-plugin/src/main/resources/config/maven_checks.xml</configLocation>
+ <headerLocation>http://svn.apache.org/repos/asf/maven/plugins/trunk/maven-checkstyle-plugin/src/main/resources/config/maven-header.txt</headerLocation>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-pmd-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>taglist-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jxr-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <links>
+ <link>http://java.sun.com/j2ee/1.4/docs/api</link>
+ <link>http://java.sun.com/j2se/1.5.0/docs/api</link>
+ <link>http://jakarta.apache.org/commons/collections/apidocs-COLLECTIONS_3_0/</link>
+ <link>http://jakarta.apache.org/commons/dbcp/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/fileupload/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/httpclient/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/logging/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/pool/apidocs/</link>
+ <link>http://www.junit.org/junit/javadoc/</link>
+ <link>http://logging.apache.org/log4j/docs/api/</link>
+ <link>http://jakarta.apache.org/regexp/apidocs/</link>
+ <link>http://jakarta.apache.org/velocity/api/</link>
+ </links>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/maven/pom/maven/tags/maven-parent-4</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/pom/maven/tags/maven-parent-4</developerConnection>
+ <url>http://svn.apache.org/viewvc/maven/pom/maven/tags/maven-parent-4</url>
+ </scm>
+</project>
+
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/4/maven-parent-4.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/4/maven-parent-4.pom.md5
new file mode 100644
index 00000000..9c417645
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/4/maven-parent-4.pom.md5
@@ -0,0 +1 @@
+2a4e926f3a76c6e74b0b126f513ad4e7 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/4/maven-parent-4.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/4/maven-parent-4.pom.sha1
new file mode 100644
index 00000000..b6caacf5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/4/maven-parent-4.pom.sha1
@@ -0,0 +1 @@
+0fc039b0bd4d17d7c147a30e1d83994629c5297c \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom
new file mode 100644
index 00000000..b3350401
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom
@@ -0,0 +1,466 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>3</version>
+ <relativePath>../asf/pom.xml</relativePath>
+ </parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-parent</artifactId>
+ <version>5</version>
+ <packaging>pom</packaging>
+ <name>Apache Maven</name>
+ <description>
+ Maven is a software project management and comprehension tool. Based on the concept of a project object model
+ (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.
+ </description>
+ <url>http://maven.apache.org/</url>
+ <issueManagement>
+ <system>jira</system>
+ <url>http://jira.codehaus.org/browse/MPA</url>
+ </issueManagement>
+ <ciManagement>
+ <system>continuum</system>
+ <url>http://maven.zones.apache.org/continuum</url>
+ <notifiers>
+ <notifier>
+ <type>mail</type>
+ <configuration>
+ <address>notifications@maven.apache.org</address>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <inceptionYear>2002</inceptionYear>
+ <mailingLists>
+ <mailingList>
+ <name>Maven Announcements List</name>
+ <post>announce@maven.apache.org</post>
+ <subscribe>announce-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>announce-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-announce/</archive>
+ </mailingList>
+ <mailingList>
+ <name>Maven Issues List</name>
+ <post>issues@maven.apache.org</post>
+ <subscribe>issues-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>issues-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-issues/</archive>
+ </mailingList>
+ <mailingList>
+ <name>Maven Notifications List</name>
+ <post>notifications@maven.apache.org</post>
+ <subscribe>notifications-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>notifications-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-notifications/</archive>
+ </mailingList>
+ </mailingLists>
+
+ <developers>
+ <developer>
+ <id>jvanzyl</id>
+ <name>Jason van Zyl</name>
+ <email>jason@maven.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Chair</role>
+ </roles>
+ <timezone>-5</timezone>
+ </developer>
+ <developer>
+ <id>brett</id>
+ <name>Brett Porter</name>
+ <email>brett@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+10</timezone>
+ </developer>
+ <developer>
+ <id>evenisse</id>
+ <name>Emmanuel Venisse</name>
+ <email>evenisse@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>kenney</id>
+ <name>Kenney Westerhof</name>
+ <email>kenney@apache.org</email>
+ <organization>Neonics</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>snicoll</id>
+ <name>Stephane Nicoll</name>
+ <email>snicoll@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>vmassol</id>
+ <name>Vincent Massol</name>
+ <email>vmassol@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>fgiust</id>
+ <name>Fabrizio Giustina</name>
+ <email>fgiust@apache.org</email>
+ <organization>openmind</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>epunzalan</id>
+ <name>Edwin Punzalan</name>
+ <email>epunzalan@mergere.com</email>
+ <organization>Mergere</organization>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>+8</timezone>
+ </developer>
+ <developer>
+ <id>mperham</id>
+ <name>Mike Perham</name>
+ <email>mperham@gmail.com</email>
+ <organization>IBM</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>-6</timezone>
+ </developer>
+ <developer>
+ <id>jdcasey</id>
+ <name>John Casey</name>
+ <email>jdcasey@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>-5</timezone>
+ </developer>
+ <developer>
+ <id>trygvis</id>
+ <name>Trygve Laugstol</name>
+ <email>trygvis@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>vsiveton</id>
+ <name>Vincent Siveton</name>
+ <email>vsiveton@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>-5</timezone>
+ </developer>
+ <developer>
+ <id>carlos</id>
+ <name>Carlos Sanchez</name>
+ <email>carlos@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>dennisl</id>
+ <name>Dennis Lundberg</name>
+ <email>dennisl@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>aheritier</id>
+ <name>Arnaud Heritier</name>
+ <email>aheritier@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+1</timezone>
+ </developer>
+ <developer>
+ <id>handyande</id>
+ <name>Andrew Williams</name>
+ <email>handyande@apache.org</email>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>0</timezone>
+ </developer>
+ <developer>
+ <id>jtolentino</id>
+ <name>Ernesto Tolentino Jr.</name>
+ <email>jtolentino@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>+8</timezone>
+ </developer>
+ <developer>
+ <id>joakime</id>
+ <name>Joakim Erdfelt</name>
+ <email>joakime@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>-5</timezone>
+ </developer>
+ <developer>
+ <id>jmcconnell</id>
+ <name>Jesse McConnell</name>
+ <email>jmcconnell@apache.org</email>
+ <organization>ASF</organization>
+ <roles>
+ <role>PMC Member</role>
+ </roles>
+ <timezone>-6</timezone>
+ </developer>
+ <developer>
+ <id>wsmoak</id>
+ <name>Wendy Smoak</name>
+ <email>wsmoak@apache.org</email>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <timezone>-7</timezone>
+ </developer>
+
+ </developers>
+
+ <distributionManagement>
+ <site>
+ <id>apache.website</id>
+ <url>scp://people.apache.org/www/maven.apache.org</url>
+ </site>
+ </distributionManagement>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-release-plugin</artifactId>
+ <version>2.0-beta-4</version>
+ <configuration>
+ <!-- This element will be overriden by children -->
+ <tagBase>https://svn.apache.org/repos/asf/maven/pom/tags</tagBase>
+ <useReleaseProfile>false</useReleaseProfile>
+ <goals>deploy</goals>
+ <arguments>-Prelease</arguments>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>ci</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-pmd-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>cpd-check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>reporting</id>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <configuration>
+ <configLocation>http://svn.apache.org/repos/asf/maven/plugins/trunk/maven-checkstyle-plugin/src/main/resources/config/maven_checks.xml</configLocation>
+ <headerLocation>http://svn.apache.org/repos/asf/maven/plugins/trunk/maven-checkstyle-plugin/src/main/resources/config/maven-header.txt</headerLocation>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-pmd-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>taglist-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jxr-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <links>
+ <link>http://java.sun.com/j2ee/1.4/docs/api</link>
+ <link>http://java.sun.com/j2se/1.5.0/docs/api</link>
+ <link>http://jakarta.apache.org/commons/collections/apidocs-COLLECTIONS_3_0/</link>
+ <link>http://jakarta.apache.org/commons/dbcp/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/fileupload/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/httpclient/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/logging/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/pool/apidocs/</link>
+ <link>http://www.junit.org/junit/javadoc/</link>
+ <link>http://logging.apache.org/log4j/docs/api/</link>
+ <link>http://jakarta.apache.org/regexp/apidocs/</link>
+ <link>http://jakarta.apache.org/velocity/api/</link>
+ </links>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+ </profile>
+ <profile>
+ <id>release</id>
+ <build>
+ <plugins>
+ <!-- We want to sign the artifact, the POM, and all attached artifacts -->
+ <plugin>
+ <artifactId>maven-gpg-plugin</artifactId>
+ <version>1.0-alpha-1</version>
+ <configuration>
+ <passphrase>${gpg.passphrase}</passphrase>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>sign</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <!-- We want to deploy the artifact to a staging location for perusal -->
+ <plugin>
+ <inherited>true</inherited>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ <configuration>
+ <altDeploymentRepository>${deploy.altRepository}</altDeploymentRepository>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </configuration>
+ </plugin>
+ <!-- We want to package up license resources in the JARs produced -->
+ <plugin>
+ <artifactId>maven-remote-resources-plugin</artifactId>
+ <version>1.0-alpha-1</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>process</goal>
+ </goals>
+ <configuration>
+ <resourceBundles>
+ <resourceBundle>org.apache:apache-jar-resource-bundle:1.0</resourceBundle>
+ </resourceBundles>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>2.0.2</version>
+ <executions>
+ <execution>
+ <id>attach-sources</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>2.2</version>
+ <executions>
+ <execution>
+ <id>attach-javadocs</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+ <scm>
+ <connection>scm:svn:https://svn.apache.org/repos/asf/maven/pom/tags/maven-parent-5</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/pom/tags/maven-parent-5</developerConnection>
+ <url>https://svn.apache.org/repos/asf/maven/pom/tags/maven-parent-5</url>
+ </scm>
+</project>
+
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom.md5
new file mode 100644
index 00000000..27ba3aaf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom.md5
@@ -0,0 +1 @@
+4da85635ce64dbec5b00232d5bb26453 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom.sha1
new file mode 100644
index 00000000..5d7a3eba
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom.sha1
@@ -0,0 +1 @@
+5c1ab38decaca1ccd08294aeab135047ebbae00d \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar
new file mode 100644
index 00000000..79fcf226
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar.md5
new file mode 100644
index 00000000..60aecbcd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar.md5
@@ -0,0 +1 @@
+f41eb4e07a725eea3332743a29057855 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar.sha1
new file mode 100644
index 00000000..e3f05109
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar.sha1
@@ -0,0 +1 @@
+abd1c9ace6e87c94a4b91f5176aeb09d954b23a3 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom
new file mode 100644
index 00000000..dca027b2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom
@@ -0,0 +1,21 @@
+<?xml version="1.0"?><project>
+ <parent>
+ <artifactId>wagon</artifactId>
+ <groupId>org.apache.maven.wagon</groupId>
+ <version>1.0-beta-2</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>wagon-provider-api</artifactId>
+ <name>Maven Wagon API</name>
+ <version>1.0-beta-2</version>
+ <description>Maven Wagon API that defines the contract between different Wagon implementations</description>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ </dependencies>
+ <distributionManagement>
+ <status>deployed</status>
+ </distributionManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom.md5
new file mode 100644
index 00000000..0f10b3fd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom.md5
@@ -0,0 +1 @@
+97f0a0bd0b81520ccccf8736b1fe380c \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom.sha1
new file mode 100644
index 00000000..56b9559d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom.sha1
@@ -0,0 +1 @@
+8b3013d0754edbeb694831ddf1c5d1a0019ee042 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom
new file mode 100644
index 00000000..27faa8ef
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>maven-parent</artifactId>
+ <groupId>org.apache.maven</groupId>
+ <version>4</version>
+ <relativePath>../pom/maven/pom.xml</relativePath>
+ </parent>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon</artifactId>
+ <packaging>pom</packaging>
+ <name>Maven Wagon</name>
+ <version>1.0-beta-2</version>
+ <description>Tools to manage artifacts and deployment</description>
+ <url>http://maven.apache.org/wagon</url>
+
+ <issueManagement>
+ <system>jira</system>
+ <url>http://jira.codehaus.org/browse/WAGON</url>
+ </issueManagement>
+ <inceptionYear>2003</inceptionYear>
+ <mailingLists>
+ <mailingList>
+ <name>Maven Wagon User List</name>
+ <subscribe>wagon-users-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>wagon-users-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-wagon-users/</archive>
+ </mailingList>
+ <mailingList>
+ <name>Maven Wagon Developer List</name>
+ <subscribe>wagon-dev-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>wagon-dev-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-wagon-dev/</archive>
+ </mailingList>
+ <mailingList>
+ <name>Maven Commits List</name>
+ <subscribe>wagon-commits-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>wagon-commits-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-wagon-commits/</archive>
+ </mailingList>
+ </mailingLists>
+ <developers>
+ <developer>
+ <id>michal</id>
+ <name>Michal Maczka</name>
+ <email>michal@codehaus.org</email>
+ <organization>Codehaus</organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ </developers>
+ <scm>
+ <connection>scm:svn:https://svn.apache.org/repos/asf/maven/wagon/tags/wagon-1.0-beta-2</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/wagon/tags/wagon-1.0-beta-2</developerConnection>
+ <url>https://svn.apache.org/repos/asf/maven/wagon/tags/wagon-1.0-beta-2</url>
+ </scm>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <tagBase>https://svn.apache.org/repos/asf/maven/wagon/tags</tagBase>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ <modules>
+ <module>wagon-provider-api</module>
+ <module>wagon-provider-test</module>
+ <module>wagon-providers</module>
+ </modules>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ <version>1.0-beta-2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-test</artifactId>
+ <version>1.0-beta-2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh-common-test</artifactId>
+ <version>1.0-beta-2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh-common</artifactId>
+ <version>1.0-beta-2</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interactivity-api</artifactId>
+ <version>1.0-alpha-4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>1.0-alpha-8</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.0.4</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <!-- TODO: point to ref location
+ <distributionManagement>
+ <site>
+ <id>apache.website</id>
+ <url>scp://people.apache.org/www/maven.apache.org/wagon/</url>
+ </site>
+ </distributionManagement>
+ -->
+ <profiles>
+ <profile>
+ <id>sharedResources</id>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>people.apache.org</id>
+ <url>http://people.apache.org/repo/m2-snapshot-repository</url>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-remote-resources-plugin</artifactId>
+ <version>1.0-alpha-1</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>process</goal>
+ </goals>
+ <configuration>
+ <resourceBundles>
+ <resourceBundle>org.apache:apache-jar-resource-bundle:1.0</resourceBundle>
+ </resourceBundles>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom.md5
new file mode 100644
index 00000000..45e066d7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom.md5
@@ -0,0 +1 @@
+e739bffedc84a18c6e10a0958e2006ad \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom.sha1
new file mode 100644
index 00000000..5f82f766
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom.sha1
@@ -0,0 +1 @@
+6cf8a47018be792d2b1774d2bacd7541c888ae50 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.jar
new file mode 100644
index 00000000..d3232758
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.jar.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.jar.md5
new file mode 100644
index 00000000..1a9a2b6f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.jar.md5
@@ -0,0 +1 @@
+1078ac2103fe666952a3cbcbff19ec71 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.jar.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.jar.sha1
new file mode 100644
index 00000000..17dbef2e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.jar.sha1
@@ -0,0 +1 @@
+c76ce4f9f1a3d04ef849c1d067519b77f07e01f3 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.pom
new file mode 100644
index 00000000..80ac6d90
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.pom
@@ -0,0 +1,51 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>plexus-components</artifactId>
+ <groupId>org.codehaus.plexus</groupId>
+ <version>1.1.6</version>
+ </parent>
+
+ <artifactId>plexus-active-collections</artifactId>
+ <version>1.0-beta-1</version>
+ <name>Plexus Container-Backed Active Collections</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ <version>1.0-alpha-16</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>1.0-alpha-16</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>**/TestComponent.java</exclude>
+ <exclude>**/TestBadComponent.java</exclude>
+ <exclude>**/*TCK.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <scm>
+ <connection>scm:svn:https://svn.codehaus.org/plexus/tags/plexus-active-collections-1.0-beta-1</connection>
+ <developerConnection>scm:svn:https://svn.codehaus.org/plexus/tags/plexus-active-collections-1.0-beta-1</developerConnection>
+ </scm>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.pom.md5
new file mode 100644
index 00000000..14519126
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.pom.md5
@@ -0,0 +1 @@
+d844f3e1934a76cefc25342bf02f3bff \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.pom.sha1
new file mode 100644
index 00000000..5442cbcd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.pom.sha1
@@ -0,0 +1 @@
+cf6a9d40df4ca79c210b2b8a90ce28fffb202769 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.jar
new file mode 100644
index 00000000..e2143250
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.jar.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.jar.md5
new file mode 100644
index 00000000..c7dfa1ea
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.jar.md5
@@ -0,0 +1 @@
+f55402879506f435a386f2c002ed5001 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.jar.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.jar.sha1
new file mode 100644
index 00000000..a333efb8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.jar.sha1
@@ -0,0 +1 @@
+fc41205635dab152bf794785be80a0a70fda686e \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.pom
new file mode 100644
index 00000000..be71f49f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.pom
@@ -0,0 +1,94 @@
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~
+ ~ Copyright 2001-2006 The Codehaus Foundation.
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <artifactId>plexus</artifactId>
+ <groupId>org.codehaus.plexus</groupId>
+ <version>1.0.10</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-classworlds</artifactId>
+ <packaging>jar</packaging>
+ <name>Plexus Classworlds</name>
+ <version>1.2-alpha-10</version>
+ <description />
+ <inceptionYear>2002</inceptionYear>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <forkMode>once</forkMode>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>org/codehaus/plexus/classworlds/event/*</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <profiles>
+ <profile>
+ <id>debug</id>
+ <dependencies>
+ <dependency>
+ <groupId>aspectj</groupId>
+ <artifactId>aspectjrt</artifactId>
+ <version>1.5.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>aspectj-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <complianceLevel>1.4</complianceLevel>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <scm>
+ <connection>scm:svn:http://svn.codehaus.org/plexus/plexus-classworlds/tags/plexus-classworlds-1.2-alpha-10</connection>
+ <developerConnection>scm:svn:https://svn.codehaus.org/plexus/plexus-classworlds/tags/plexus-classworlds-1.2-alpha-10</developerConnection>
+ <url>http://fisheye.codehaus.org/browse/plexus/plexus-classworlds/tags/plexus-classworlds-1.2-alpha-10</url>
+ </scm>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.pom.md5
new file mode 100644
index 00000000..47dbce55
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.pom.md5
@@ -0,0 +1 @@
+1a7177f5992983aeb393089af67e51dc \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.pom.sha1
new file mode 100644
index 00000000..eafd9a79
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.pom.sha1
@@ -0,0 +1 @@
+11215912b045533ec9aaba9f63ea27acf6da850e \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jar
new file mode 100644
index 00000000..a8f6a7d3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jar.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jar.md5
new file mode 100644
index 00000000..09c3bbad
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jar.md5
@@ -0,0 +1 @@
+b00a4521e82cd7cdf502039dd59a1ffb \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jar.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jar.sha1
new file mode 100644
index 00000000..9a43138c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jar.sha1
@@ -0,0 +1 @@
+ed03d1eeb9b2576747df0d2883d9006fa5e1febe \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom
new file mode 100644
index 00000000..6e29cd26
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom
@@ -0,0 +1,78 @@
+<?xml version="1.0"?><project>
+ <parent>
+ <artifactId>plexus</artifactId>
+ <groupId>org.codehaus.plexus</groupId>
+ <version>1.0.9</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-classworlds</artifactId>
+ <name>Plexus Classworlds</name>
+ <version>1.2-alpha-7</version>
+ <description></description>
+ <inceptionYear>2002</inceptionYear>
+ <scm>
+ <connection>scm:svn:http://svn.codehaus.org/plexus/plexus-classworlds/tags/plexus-classworlds-1.2-alpha-7</connection>
+ <developerConnection>scm:svn:https://svn.codehaus.org/plexus/plexus-classworlds/tags/plexus-classworlds-1.2-alpha-7</developerConnection>
+ <url>http://fisheye.codehaus.org/browse/plexus/plexus-classworlds/tags/plexus-classworlds-1.2-alpha-7</url>
+ </scm>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <forkMode>once</forkMode>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>org/codehaus/plexus/classworlds/event/*</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <profiles>
+ <profile>
+ <id>debug</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>aspectj-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <complianceLevel>1.4</complianceLevel>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>aspectj</groupId>
+ <artifactId>aspectjrt</artifactId>
+ <version>1.5.0</version>
+ </dependency>
+ </dependencies>
+ </profile>
+ </profiles>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+ <distributionManagement>
+ <status>deployed</status>
+ </distributionManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom.md5
new file mode 100644
index 00000000..e9083e79
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom.md5
@@ -0,0 +1 @@
+80962d09b250824806ca66b0bd0ad4c1 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom.sha1
new file mode 100644
index 00000000..4b9e8a40
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom.sha1
@@ -0,0 +1 @@
+6944ec0d0cab19adf167332f7197e045d64a577c \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.jar
new file mode 100644
index 00000000..85669fdd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.jar.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.jar.md5
new file mode 100644
index 00000000..1830fc9e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.jar.md5
@@ -0,0 +1 @@
+4fe3c03b97ff12905d0fb10fc5b36766 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.jar.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.jar.sha1
new file mode 100644
index 00000000..7456120d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.jar.sha1
@@ -0,0 +1 @@
+5a2100a1c6a37804b1abfc70000b0ea33b83b7f9 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom
new file mode 100644
index 00000000..b1511640
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom
@@ -0,0 +1,63 @@
+<?xml version="1.0"?><project>
+ <parent>
+ <artifactId>plexus-containers</artifactId>
+ <groupId>org.codehaus.plexus</groupId>
+ <version>1.0-alpha-16</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>plexus-component-api</artifactId>
+ <name>Plexus Component API</name>
+ <version>1.0-alpha-16</version>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ <configuration>
+ <excludes>
+ <exclude>**/Test*.java</exclude>
+ <exclude>**/Abstract*.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-classworlds</artifactId>
+ </dependency>
+ </dependencies>
+ <reporting>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-pmd-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <links>
+ <link>http://java.sun.com/j2ee/1.4/docs/api</link>
+ <link>http://java.sun.com/j2se/1.5.0/docs/api</link>
+ <link>http://jakarta.apache.org/commons/collections/apidocs-COLLECTIONS_3_0/</link>
+ <link>http://jakarta.apache.org/commons/dbcp/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/fileupload/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/httpclient/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/logging/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/pool/apidocs/</link>
+ <link>http://www.junit.org/junit/javadoc/</link>
+ <link>http://logging.apache.org/log4j/docs/api/</link>
+ <link>http://jakarta.apache.org/regexp/apidocs/</link>
+ <link>http://jakarta.apache.org/velocity/api/</link>
+ </links>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+ <distributionManagement>
+ <status>deployed</status>
+ </distributionManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom.md5
new file mode 100644
index 00000000..78fc8ace
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom.md5
@@ -0,0 +1 @@
+751ea77f1e617aea90f36d7156762bf5 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom.sha1
new file mode 100644
index 00000000..dea60884
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom.sha1
@@ -0,0 +1 @@
+53ad54acd9589c497ba54740f0455fec55db64d7 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.jar
new file mode 100644
index 00000000..5e3a919c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.jar.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.jar.md5
new file mode 100644
index 00000000..beb51a4f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.jar.md5
@@ -0,0 +1 @@
+7146edcc3412c2b54df27edaf66b00a6 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.jar.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.jar.sha1
new file mode 100644
index 00000000..4a7df6b7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.jar.sha1
@@ -0,0 +1 @@
+b226de4eb8db939dff4e14eb5aa1be045c39f6f4 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.pom
new file mode 100644
index 00000000..6369d8ec
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.pom
@@ -0,0 +1,61 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-containers</artifactId>
+ <version>1.0-alpha-32</version>
+ </parent>
+ <artifactId>plexus-component-api</artifactId>
+ <name>Plexus Component API</name>
+ <version>1.0-alpha-32</version>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ <configuration>
+ <excludes>
+ <exclude>**/Test*.java</exclude>
+ <exclude>**/Abstract*.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-classworlds</artifactId>
+ </dependency>
+ </dependencies>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-pmd-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <links>
+ <link>http://java.sun.com/j2ee/1.4/docs/api</link>
+ <link>http://java.sun.com/j2se/1.5.0/docs/api</link>
+ <link>http://jakarta.apache.org/commons/collections/apidocs-COLLECTIONS_3_0/</link>
+ <link>http://jakarta.apache.org/commons/dbcp/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/fileupload/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/httpclient/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/logging/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/pool/apidocs/</link>
+ <link>http://www.junit.org/junit/javadoc/</link>
+ <link>http://logging.apache.org/log4j/docs/api/</link>
+ <link>http://jakarta.apache.org/regexp/apidocs/</link>
+ <link>http://jakarta.apache.org/velocity/api/</link>
+ </links>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.pom.md5
new file mode 100644
index 00000000..40890b2c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.pom.md5
@@ -0,0 +1 @@
+a181ee89516009cff7658eec175ccb23 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.pom.sha1
new file mode 100644
index 00000000..f854c7a1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.pom.sha1
@@ -0,0 +1 @@
+e214782e714b87b38d5605cb8da53b7d98efde06 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom
new file mode 100644
index 00000000..0afa8021
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom
@@ -0,0 +1,60 @@
+<!--
+
+ !!!
+
+ NOTE: If you change this file, you MUST bump the version up from 1.0. That is the version of the POM, and was
+ used for releases of plexus-compiler and plexus-archiver in the past.
+
+ !!!
+
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>plexus</artifactId>
+ <groupId>org.codehaus.plexus</groupId>
+ <version>1.0.8</version>
+ </parent>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-components</artifactId>
+ <packaging>pom</packaging>
+ <version>1.1.6</version>
+ <name>Plexus Components Parent Project</name>
+ <!--
+ TODO: should this be pushed down to all the dependencies?
+ - a more stable API JAR may be useful, for the interfaces and classes such as AbstractLogEnabled
+ -->
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>1.0-alpha-8</version>
+ </dependency>
+ </dependencies>
+ <modules>
+ <module>plexus-action</module>
+ <module>plexus-archiver</module>
+ <module>plexus-bayesian</module>
+ <module>plexus-command</module>
+ <module>plexus-compiler</module>
+ <module>plexus-drools</module>
+ <module>plexus-formica</module>
+ <module>plexus-formica-web</module>
+ <module>plexus-hibernate</module>
+ <module>plexus-i18n</module>
+ <module>plexus-interactivity</module>
+ <module>plexus-ircbot</module>
+ <module>plexus-jdo</module>
+ <module>plexus-jetty-httpd</module>
+ <module>plexus-jetty</module>
+ <module>plexus-mimetyper</module>
+ <module>plexus-notification</module>
+ <module>plexus-resource</module>
+ <module>plexus-security</module>
+ <module>plexus-summit</module>
+ <module>plexus-taskqueue</module>
+ <module>plexus-velocity</module>
+ <module>plexus-xmlrpc</module>
+ </modules>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom.md5
new file mode 100644
index 00000000..cf57067b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom.md5
@@ -0,0 +1 @@
+b76cb94eb4ade475f4743d3656c40899 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom.sha1
new file mode 100644
index 00000000..b9f0aa79
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom.sha1
@@ -0,0 +1 @@
+682713aa402653d0ea5e224870dc899803734519 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.jar
new file mode 100644
index 00000000..ef2bd907
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.jar.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.jar.md5
new file mode 100644
index 00000000..fc1ee0b6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.jar.md5
@@ -0,0 +1 @@
+00b4ce443fa584a1998cd6f991ea6514 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.jar.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.jar.sha1
new file mode 100644
index 00000000..879c8890
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.jar.sha1
@@ -0,0 +1 @@
+dcad8d44306c5ecc109b9449f292fb28b75d37ef \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.pom
new file mode 100644
index 00000000..f5ae5489
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.pom
@@ -0,0 +1,56 @@
+<?xml version="1.0"?><project>
+ <parent>
+ <artifactId>plexus-containers</artifactId>
+ <groupId>org.codehaus.plexus</groupId>
+ <version>1.0-alpha-16</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>plexus-container-default</artifactId>
+ <name>Default Plexus Container</name>
+ <version>1.0-alpha-16</version>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <forkMode>once</forkMode>
+ <excludes>
+ <exclude>**/Test*.java</exclude>
+ <exclude>**/Abstract*.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <descriptorRefs>
+ <descriptorRef>jar-with-dependencies</descriptorRef>
+ </descriptorRefs>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-classworlds</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>jmock</groupId>
+ <artifactId>jmock</artifactId>
+ <version>1.0.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <distributionManagement>
+ <status>deployed</status>
+ </distributionManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.pom.md5
new file mode 100644
index 00000000..611807a8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.pom.md5
@@ -0,0 +1 @@
+883b6e1e40cccb06c1d1ce93728b0a9d \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.pom.sha1
new file mode 100644
index 00000000..ea4d6dc0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.pom.sha1
@@ -0,0 +1 @@
+435f5d09ea241e93acaecd4b6680ddb13a36837d \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.jar
new file mode 100644
index 00000000..308893f6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.jar.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.jar.md5
new file mode 100644
index 00000000..291ffea0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.jar.md5
@@ -0,0 +1 @@
+556231599b5413a7c1f16a5fd15be574 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.jar.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.jar.sha1
new file mode 100644
index 00000000..b8ef047d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.jar.sha1
@@ -0,0 +1 @@
+91410b971f9659f76b0ff26a97b9fbac5de2f69e \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.pom
new file mode 100644
index 00000000..fbfdb2ba
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.pom
@@ -0,0 +1,98 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-containers</artifactId>
+ <version>1.0-alpha-32</version>
+ </parent>
+ <artifactId>plexus-container-default</artifactId>
+ <name>Default Plexus Container</name>
+ <version>1.0-alpha-32</version>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <forkMode>once</forkMode>
+ <excludes>
+ <exclude>**/Test*.java</exclude>
+ <exclude>**/Abstract*.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>shade-maven-plugin</artifactId>
+ <groupId>org.codehaus.mojo</groupId>
+ <version>1.0-alpha-9</version>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ <configuration>
+ <artifactSet>
+ <excludes>
+ <exclude>classworlds:classworlds</exclude>
+ <exclude>junit:junit</exclude>
+ <exclude>jmock:jmock</exclude>
+ <exclude>org.codehaus.plexus:plexus-classworlds</exclude>
+ <exclude>org.codehaus.plexus:plexus-utils</exclude>
+ </excludes>
+ </artifactSet>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-classworlds</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>jmock</groupId>
+ <artifactId>jmock</artifactId>
+ <version>1.0.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <reporting>
+ <plugins>
+ <!--plugin>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ </plugin-->
+ <plugin>
+ <artifactId>maven-pmd-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <links>
+ <link>http://java.sun.com/j2ee/1.4/docs/api</link>
+ <link>http://java.sun.com/j2se/1.5.0/docs/api</link>
+ <link>http://jakarta.apache.org/commons/collections/apidocs-COLLECTIONS_3_0/</link>
+ <link>http://jakarta.apache.org/commons/dbcp/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/fileupload/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/httpclient/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/logging/apidocs/</link>
+ <link>http://jakarta.apache.org/commons/pool/apidocs/</link>
+ <link>http://www.junit.org/junit/javadoc/</link>
+ <link>http://logging.apache.org/log4j/docs/api/</link>
+ <link>http://jakarta.apache.org/regexp/apidocs/</link>
+ <link>http://jakarta.apache.org/velocity/api/</link>
+ </links>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.pom.md5
new file mode 100644
index 00000000..3b237719
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.pom.md5
@@ -0,0 +1 @@
+af4ca0022b674405556b3f397e375adc \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.pom.sha1
new file mode 100644
index 00000000..00b60872
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.pom.sha1
@@ -0,0 +1 @@
+8f4d09d36a2345a39301dbd77ef9906c795887f7 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom
new file mode 100644
index 00000000..5800d75b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom
@@ -0,0 +1,49 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus</artifactId>
+ <version>1.0.9</version>
+ </parent>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-containers</artifactId>
+ <packaging>pom</packaging>
+ <name>Parent Plexus Container POM</name>
+ <version>1.0-alpha-16</version>
+ <modules>
+ <module>plexus-component-api</module>
+ <module>plexus-container-default</module>
+ </modules>
+ <scm>
+ <connection>scm:svn:http://svn.codehaus.org/plexus/plexus-containers/tags/plexus-containers-1.0-alpha-16</connection>
+ <developerConnection>scm:svn:https://svn.codehaus.org/plexus/plexus-containers/tags/plexus-containers-1.0-alpha-16</developerConnection>
+ <url>http://fisheye.codehaus.org/browse/plexus/plexus-containers/tags/plexus-containers-1.0-alpha-16</url>
+ </scm>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-classworlds</artifactId>
+ <version>1.2-alpha-7</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ <version>1.0-alpha-16</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.3</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom.md5
new file mode 100644
index 00000000..3db22e20
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom.md5
@@ -0,0 +1 @@
+3eee2016e3e307618048e30f088b546e \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom.sha1
new file mode 100644
index 00000000..3eb36271
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom.sha1
@@ -0,0 +1 @@
+46b79dd7d6a8130d2fa81c80b16b695d491548fe \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-32/plexus-containers-1.0-alpha-32.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-32/plexus-containers-1.0-alpha-32.pom
new file mode 100644
index 00000000..4678bd87
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-32/plexus-containers-1.0-alpha-32.pom
@@ -0,0 +1,49 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus</artifactId>
+ <version>1.0.11</version>
+ </parent>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-containers</artifactId>
+ <packaging>pom</packaging>
+ <name>Parent Plexus Container POM</name>
+ <version>1.0-alpha-32</version>
+ <modules>
+ <module>plexus-component-api</module>
+ <module>plexus-container-default</module>
+ </modules>
+ <scm>
+ <connection>scm:svn:http://svn.codehaus.org/plexus/plexus-containers/tags/plexus-containers-1.0-alpha-32</connection>
+ <developerConnection>scm:svn:https://svn.codehaus.org/plexus/plexus-containers/tags/plexus-containers-1.0-alpha-32</developerConnection>
+ <url>http://fisheye.codehaus.org/browse/plexus/plexus-containers/tags/plexus-containers-1.0-alpha-32</url>
+ </scm>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-classworlds</artifactId>
+ <version>1.2-alpha-10</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.4.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ <version>1.0-alpha-32</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-32/plexus-containers-1.0-alpha-32.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-32/plexus-containers-1.0-alpha-32.pom.md5
new file mode 100644
index 00000000..41815f08
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-32/plexus-containers-1.0-alpha-32.pom.md5
@@ -0,0 +1 @@
+8ac33e07134648d37e2b1253286889a7 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-32/plexus-containers-1.0-alpha-32.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-32/plexus-containers-1.0-alpha-32.pom.sha1
new file mode 100644
index 00000000..41260716
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-32/plexus-containers-1.0-alpha-32.pom.sha1
@@ -0,0 +1 @@
+8486ff9b37d1ade2a4524c6fee72d394f88fbe08 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar
new file mode 100644
index 00000000..5c50e177
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar.md5
new file mode 100644
index 00000000..a7ca769a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar.md5
@@ -0,0 +1 @@
+49e112a6c1ad24962643ef9494f9cbe1 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar.sha1
new file mode 100644
index 00000000..28f6dbb5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar.sha1
@@ -0,0 +1 @@
+fa632b7f1cb7c50963d0fb7d818ca93c75c10127 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom
new file mode 100644
index 00000000..6cf90799
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <parent>
+ <artifactId>plexus</artifactId>
+ <groupId>org.codehaus.plexus</groupId>
+ <version>1.0.4</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>plexus-utils</artifactId>
+ <name>Plexus Common Utilities</name>
+ <version>1.1</version>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>org/codehaus/plexus/util/FileBasedTestCase.java</exclude>
+ <exclude>**/Test*.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <distributionManagement>
+ <status>deployed</status>
+ </distributionManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.md5
new file mode 100644
index 00000000..6de9bf47
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.md5
@@ -0,0 +1 @@
+6e902bab552ae52fef5875d27c4cf0a0 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.sha1
new file mode 100644
index 00000000..4dc64d4a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.sha1
@@ -0,0 +1 @@
+15492ecd00920daca9ec15f6acd695b626621e5b \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.jar
new file mode 100644
index 00000000..449afb9c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.jar.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.jar.md5
new file mode 100644
index 00000000..eff56f28
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.jar.md5
@@ -0,0 +1 @@
+e158df8d1a539cc6482567f9689cc36f \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.jar.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.jar.sha1
new file mode 100644
index 00000000..953f76d8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.jar.sha1
@@ -0,0 +1 @@
+56559396674aacd498c298964b691db0177027c0 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom
new file mode 100644
index 00000000..bc634a6f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <artifactId>plexus</artifactId>
+ <groupId>org.codehaus.plexus</groupId>
+ <version>1.0.11</version>
+ <relativePath>../pom/pom.xml</relativePath>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>plexus-utils</artifactId>
+ <name>Plexus Common Utilities</name>
+ <version>1.4.5</version>
+ <url>http://plexus.codehaus.org/plexus-utils</url>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <!-- surefire requires plexus-utils to be jdk 1.3 compatible -->
+ <source>1.3</source>
+ <target>1.3</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <!-- required to ensure the test classes are used, not surefire's plexus-utils -->
+ <childDelegation>true</childDelegation>
+ <excludes>
+ <exclude>org/codehaus/plexus/util/FileBasedTestCase.java</exclude>
+ <exclude>**/Test*.java</exclude>
+ </excludes>
+ <systemProperties>
+ <property>
+ <name>JAVA_HOME</name>
+ <value>${JAVA_HOME}</value>
+ </property>
+ <property>
+ <name>M2_HOME</name>
+ <value>${M2_HOME}</value>
+ </property>
+ </systemProperties>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <scm>
+ <connection>scm:svn:http://svn.codehaus.org/plexus/plexus-utils/tags/plexus-utils-1.4.5</connection>
+ <developerConnection>scm:svn:https://svn.codehaus.org/plexus/plexus-utils/tags/plexus-utils-1.4.5</developerConnection>
+ <url>http://fisheye.codehaus.org/browse/plexus/plexus-utils/tags/plexus-utils-1.4.5</url>
+ </scm>
+ <reporting>
+ <plugins>
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jxr-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </reporting>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom.md5
new file mode 100644
index 00000000..905f70a9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom.md5
@@ -0,0 +1 @@
+fccab705018ed5559df9f8e815b79aaa \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom.sha1
new file mode 100644
index 00000000..247cd943
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom.sha1
@@ -0,0 +1 @@
+0bdc8a7fbce7d9007a93d289a029b43e1196d85c \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom
new file mode 100644
index 00000000..bc94e24b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom
@@ -0,0 +1,273 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus</artifactId>
+ <packaging>pom</packaging>
+ <name>Plexus</name>
+ <version>1.0.10</version>
+ <ciManagement>
+ <notifiers>
+ <notifier>
+ <type>mail</type>
+ <configuration>
+ <address>dev@plexus.codehaus.org</address>
+ </configuration>
+ </notifier>
+ <notifier>
+ <type>irc</type>
+ <configuration>
+ <host>irc.codehaus.org</host>
+ <port>6667</port>
+ <channel>#plexus</channel>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <inceptionYear>2001</inceptionYear>
+ <mailingLists>
+ <mailingList>
+ <name>Plexus User List</name>
+ <subscribe>http://xircles.codehaus.org/manage_email/user%40plexus.codehaus.org</subscribe>
+ <unsubscribe>http://xircles.codehaus.org/manage_email/user%40plexus.codehaus.org</unsubscribe>
+ <archive>http://archive.plexus.codehaus.org/user</archive>
+ </mailingList>
+ <mailingList>
+ <name>Plexus Developer List</name>
+ <subscribe>http://xircles.codehaus.org/manage_email/dev%40plexus.codehaus.org</subscribe>
+ <unsubscribe>http://xircles.codehaus.org/manage_email/dev%40plexus.codehaus.org</unsubscribe>
+ <archive>http://archive.plexus.codehaus.org/dev</archive>
+ </mailingList>
+ <mailingList>
+ <name>Plexus Announce List</name>
+ <subscribe>http://xircles.codehaus.org/manage_email/announce%40plexus.codehaus.org</subscribe>
+ <unsubscribe>http://xircles.codehaus.org/manage_email/announce%40plexus.codehaus.org</unsubscribe>
+ <archive>http://archive.plexus.codehaus.org/announce</archive>
+ </mailingList>
+ <mailingList>
+ <name>Plexus Commit List</name>
+ <subscribe>http://xircles.codehaus.org/manage_email/scm%40plexus.codehaus.org</subscribe>
+ <unsubscribe>http://xircles.codehaus.org/manage_email/scm%40plexus.codehaus.org</unsubscribe>
+ <archive>http://archive.plexus.codehaus.org/scm</archive>
+ </mailingList>
+ </mailingLists>
+ <issueManagement>
+ <system>JIRA</system>
+ <url>http://jira.codehaus.org/browse/PLX</url>
+ </issueManagement>
+
+ <distributionManagement>
+ <repository>
+ <id>codehaus.org</id>
+ <name>Plexus Central Repository</name>
+ <url>dav:https://dav.codehaus.org/repository/plexus</url>
+ </repository>
+ <snapshotRepository>
+ <id>codehaus.org</id>
+ <name>Plexus Central Development Repository</name>
+ <url>dav:https://dav.codehaus.org/snapshots.repository/plexus</url>
+ </snapshotRepository>
+ <site>
+ <id>codehaus.org</id>
+ <url>dav:https://dav.codehaus.org/plexus</url>
+ </site>
+ </distributionManagement>
+ <repositories>
+ <repository>
+ <id>codehaus.snapshots</id>
+ <name>Codehaus Snapshot Development Repository</name>
+ <url>http://snapshots.repository.codehaus.org</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </repository>
+ </repositories>
+
+ <developers>
+ <developer>
+ <id>jvanzyl</id>
+ <name>Jason van Zyl</name>
+ <email>jason@maven.org</email>
+ <roles>
+ <role>Developer</role>
+ <role>Release Manager</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>kaz</id>
+ <name>Pete Kazmier</name>
+ <email />
+ <organization />
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>jtaylor</id>
+ <name>James Taylor</name>
+ <email>james@jamestaylor.org</email>
+ <organization />
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>dandiep</id>
+ <name>Dan Diephouse</name>
+ <email>dan@envoisolutions.com</email>
+ <organization>Envoi solutions</organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>kasper</id>
+ <name>Kasper Nielsen</name>
+ <email>apache@kav.dk</email>
+ <organization />
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>bwalding</id>
+ <name>Ben Walding</name>
+ <email>bwalding@codehaus.org</email>
+ <organization>Walding Consulting Services</organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>mhw</id>
+ <name>Mark Wilkinson</name>
+ <email>mhw@kremvax.net</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>michal</id>
+ <name>Michal Maczka</name>
+ <email>mmaczka@interia.pl</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>evenisse</id>
+ <name>Emmanuel Venisse</name>
+ <email>evenisse@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Trygve Laugstol</name>
+ <id>trygvis</id>
+ <email>trygvis@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Kenney Westerhof</name>
+ <id>kenney</id>
+ <email>kenney@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Carlos Sanchez</name>
+ <id>carlos</id>
+ <email>carlos@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Brett Porter</name>
+ <id>brett</id>
+ <email>brett@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>John Casey</name>
+ <id>jdcasey</id>
+ <email>jdcasey@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Andrew Williams</name>
+ <id>handyande</id>
+ <email>andy@handyande.co.uk</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Rahul Thakur</name>
+ <id>rahul</id>
+ <email>rahul.thakur.xdev@gmail.com</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Joakim Erdfelt</name>
+ <id>joakime</id>
+ <email>joakim@erdfelt.com</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Olivier Lamy</name>
+ <id>olamy</id>
+ <email>olamy@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ </developers>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <scm>
+ <connection>scm:svn:http://svn.codehaus.org/plexus/pom/tags/plexus-1.0.10</connection>
+ <developerConnection>scm:svn:https://svn.codehaus.org/plexus/pom/tags/plexus-1.0.10</developerConnection>
+ <url>http://fisheye.codehaus.org/browse/plexus/pom/tags/plexus-1.0.10</url>
+ </scm>
+ <organization>
+ <name>Codehaus</name>
+ <url>http://www.codehaus.org/</url>
+ </organization>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.4</source>
+ <target>1.4</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-webdav</artifactId>
+ <version>1.0-beta-2</version>
+ </extension>
+ </extensions>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom.md5
new file mode 100644
index 00000000..7ae43d7e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom.md5
@@ -0,0 +1 @@
+6ab958c91424c0d7c3a2cc861867905e \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom.sha1
new file mode 100644
index 00000000..8ed366f9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom.sha1
@@ -0,0 +1 @@
+039c3f6a3cbe1f9e7b4a3309d9d7062b6e390fa7 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom
new file mode 100644
index 00000000..28ee5744
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom
@@ -0,0 +1,308 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus</artifactId>
+ <packaging>pom</packaging>
+ <name>Plexus</name>
+ <version>1.0.11</version>
+ <ciManagement>
+ <notifiers>
+ <notifier>
+ <type>mail</type>
+ <configuration>
+ <address>dev@plexus.codehaus.org</address>
+ </configuration>
+ </notifier>
+ <notifier>
+ <type>irc</type>
+ <configuration>
+ <host>irc.codehaus.org</host>
+ <port>6667</port>
+ <channel>#plexus</channel>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <inceptionYear>2001</inceptionYear>
+ <licenses>
+ <license>
+ <name>The Apache Software License, Version 2.0</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+ <mailingLists>
+ <mailingList>
+ <name>Plexus User List</name>
+ <subscribe>http://xircles.codehaus.org/manage_email/user%40plexus.codehaus.org</subscribe>
+ <unsubscribe>http://xircles.codehaus.org/manage_email/user%40plexus.codehaus.org</unsubscribe>
+ <archive>http://archive.plexus.codehaus.org/user</archive>
+ </mailingList>
+ <mailingList>
+ <name>Plexus Developer List</name>
+ <subscribe>http://xircles.codehaus.org/manage_email/dev%40plexus.codehaus.org</subscribe>
+ <unsubscribe>http://xircles.codehaus.org/manage_email/dev%40plexus.codehaus.org</unsubscribe>
+ <archive>http://archive.plexus.codehaus.org/dev</archive>
+ </mailingList>
+ <mailingList>
+ <name>Plexus Announce List</name>
+ <subscribe>http://xircles.codehaus.org/manage_email/announce%40plexus.codehaus.org</subscribe>
+ <unsubscribe>http://xircles.codehaus.org/manage_email/announce%40plexus.codehaus.org</unsubscribe>
+ <archive>http://archive.plexus.codehaus.org/announce</archive>
+ </mailingList>
+ <mailingList>
+ <name>Plexus Commit List</name>
+ <subscribe>http://xircles.codehaus.org/manage_email/scm%40plexus.codehaus.org</subscribe>
+ <unsubscribe>http://xircles.codehaus.org/manage_email/scm%40plexus.codehaus.org</unsubscribe>
+ <archive>http://archive.plexus.codehaus.org/scm</archive>
+ </mailingList>
+ </mailingLists>
+ <issueManagement>
+ <system>JIRA</system>
+ <url>http://jira.codehaus.org/browse/PLX</url>
+ </issueManagement>
+
+ <distributionManagement>
+ <repository>
+ <id>codehaus.org</id>
+ <name>Plexus Central Repository</name>
+ <url>dav:https://dav.codehaus.org/repository/plexus</url>
+ </repository>
+ <snapshotRepository>
+ <id>codehaus.org</id>
+ <name>Plexus Central Development Repository</name>
+ <url>dav:https://dav.codehaus.org/snapshots.repository/plexus</url>
+ </snapshotRepository>
+ <site>
+ <id>codehaus.org</id>
+ <url>dav:https://dav.codehaus.org/plexus</url>
+ </site>
+ </distributionManagement>
+ <repositories>
+ <repository>
+ <id>codehaus.snapshots</id>
+ <name>Codehaus Snapshot Development Repository</name>
+ <url>http://snapshots.repository.codehaus.org</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </repository>
+ </repositories>
+
+ <developers>
+ <developer>
+ <id>jvanzyl</id>
+ <name>Jason van Zyl</name>
+ <email>jason@maven.org</email>
+ <roles>
+ <role>Developer</role>
+ <role>Release Manager</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>kaz</id>
+ <name>Pete Kazmier</name>
+ <email />
+ <organization />
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>jtaylor</id>
+ <name>James Taylor</name>
+ <email>james@jamestaylor.org</email>
+ <organization />
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>dandiep</id>
+ <name>Dan Diephouse</name>
+ <email>dan@envoisolutions.com</email>
+ <organization>Envoi solutions</organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>kasper</id>
+ <name>Kasper Nielsen</name>
+ <email>apache@kav.dk</email>
+ <organization />
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>bwalding</id>
+ <name>Ben Walding</name>
+ <email>bwalding@codehaus.org</email>
+ <organization>Walding Consulting Services</organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>mhw</id>
+ <name>Mark Wilkinson</name>
+ <email>mhw@kremvax.net</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>michal</id>
+ <name>Michal Maczka</name>
+ <email>mmaczka@interia.pl</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>evenisse</id>
+ <name>Emmanuel Venisse</name>
+ <email>evenisse@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Trygve Laugstol</name>
+ <id>trygvis</id>
+ <email>trygvis@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Kenney Westerhof</name>
+ <id>kenney</id>
+ <email>kenney@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Carlos Sanchez</name>
+ <id>carlos</id>
+ <email>carlos@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Brett Porter</name>
+ <id>brett</id>
+ <email>brett@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>John Casey</name>
+ <id>jdcasey</id>
+ <email>jdcasey@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Andrew Williams</name>
+ <id>handyande</id>
+ <email>andy@handyande.co.uk</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Rahul Thakur</name>
+ <id>rahul</id>
+ <email>rahul.thakur.xdev@gmail.com</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Joakim Erdfelt</name>
+ <id>joakime</id>
+ <email>joakim@erdfelt.com</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Olivier Lamy</name>
+ <id>olamy</id>
+ <email>olamy@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ </developers>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <scm>
+ <connection>scm:svn:http://svn.codehaus.org/plexus/pom/trunk/</connection>
+ <developerConnection>scm:svn:https://svn.codehaus.org/plexus/pom/trunk/</developerConnection>
+ <url>http://fisheye.codehaus.org/browse/plexus/pom/trunk/</url>
+ </scm>
+ <organization>
+ <name>Codehaus</name>
+ <url>http://www.codehaus.org/</url>
+ </organization>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.4</source>
+ <target>1.4</target>
+ </configuration>
+ </plugin>
+ <!--
+ <plugin>
+ <artifactId>maven-remote-resources-plugin</artifactId>
+ <version>1.0-alpha-2</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>process</goal>
+ </goals>
+ <configuration>
+ <resourceBundles>
+ <resourceBundle>org.apache:apache-jar-resource-bundle:1.1.1-SNAPSHOT</resourceBundle>
+ </resourceBundles>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ -->
+ </plugins>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-webdav</artifactId>
+ <version>1.0-beta-2</version>
+ </extension>
+ </extensions>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <goals>deploy</goals>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom.md5
new file mode 100644
index 00000000..2cabbba0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom.md5
@@ -0,0 +1 @@
+bdf8dcfe0877af604f7e19e9ffdf260b \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom.sha1
new file mode 100644
index 00000000..1ba2b3af
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom.sha1
@@ -0,0 +1 @@
+4693d4512d50c5159bef1c49def1d2690a327c30 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom
new file mode 100644
index 00000000..2cf5d569
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom
@@ -0,0 +1,205 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus</artifactId>
+ <packaging>pom</packaging>
+ <name>Plexus</name>
+ <version>1.0.4</version>
+ <ciManagement>
+ <notifiers>
+ <notifier>
+ <type>mail</type>
+ <configuration>
+ <address>dev@plexus.codehaus.org</address>
+ </configuration>
+ </notifier>
+ <notifier>
+ <type>irc</type>
+ <configuration>
+ <host>irc.codehaus.org</host>
+ <port>6667</port>
+ <channel>#plexus</channel>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <inceptionYear>2001</inceptionYear>
+ <mailingLists>
+ <mailingList>
+ <name>Plexus Developer List</name>
+ <subscribe>http://lists.codehaus.org/mailman/listinfo/plexus-dev</subscribe>
+ <unsubscribe>http://lists.codehaus.org/mailman/listinfo/plexus-dev</unsubscribe>
+ <archive>http://lists.codehaus.org/pipermail/plexus-dev/</archive>
+ </mailingList>
+ </mailingLists>
+
+ <distributionManagement>
+ <repository>
+ <id>repo1</id>
+ <name>Maven Central Repository</name>
+ <url>scp://repo1.maven.org/home/projects/maven/repository-staging/to-ibiblio/maven2</url>
+ </repository>
+ <snapshotRepository>
+ <id>snapshots</id>
+ <name>Maven Central Development Repository</name>
+ <url>scp://repo1.maven.org/home/projects/maven/repository-staging/snapshots/maven2</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <repositories>
+ <repository>
+ <id>snapshots</id>
+ <name>Maven Snapshot Development Repository</name>
+ <url>http://snapshots.maven.codehaus.org/maven2</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>snapshots-plugins</id>
+ <name>Maven Snapshot Plugins Development Repository</name>
+ <url>http://snapshots.maven.codehaus.org/maven2</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <developers>
+ <developer>
+ <id>jvanzyl</id>
+ <name>Jason van Zyl</name>
+ <email>jason@zenplex.com</email>
+ <organization>Zenplex</organization>
+ <roles>
+ <role>Developer</role>
+ <role>Release Manager</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>kaz</id>
+ <name>Pete Kazmier</name>
+ <email></email>
+ <organization></organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>jtaylor</id>
+ <name>James Taylor</name>
+ <email>james@jamestaylor.org</email>
+ <organization></organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>dandiep</id>
+ <name>Dan Diephouse</name>
+ <email>dan@envoisolutions.com</email>
+ <organization>Envoi solutions</organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>kasper</id>
+ <name>Kasper Nielsen</name>
+ <email>apache@kav.dk</email>
+ <organization></organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>bwalding</id>
+ <name>Ben Walding</name>
+ <email>bwalding@codehaus.org</email>
+ <organization>Walding Consulting Services</organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>mhw</id>
+ <name>Mark Wilkinson</name>
+ <email>mhw@kremvax.net</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>michal</id>
+ <name>Michal Maczka</name>
+ <email>mmaczka@interia.pl</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>evenisse</id>
+ <name>Emmanuel Venisse</name>
+ <email>evenisse@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Trygve Laugst&oslash;l</name>
+ <id>trygvis</id>
+ <email>trygvis@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Kenney Westerhof</name>
+ <id>kenney</id>
+ <email>kenney@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ </developers>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <scm>
+ <connection>scm:svn:svn://svn.codehaus.org/plexus/scm/trunk/</connection>
+ <developerConnection>scm:svn:https://svn.codehaus.org/plexus/trunk</developerConnection>
+ </scm>
+ <organization>
+ <name>Codehaus</name>
+ <url>http://www.codehaus.org/</url>
+ </organization>
+ <modules>
+ <module>plexus-appserver</module>
+ <module>plexus-archetypes</module>
+ <module>plexus-components</module>
+ <module>plexus-component-factories</module>
+ <module>plexus-containers</module>
+ <module>plexus-logging</module>
+ <module>plexus-maven-plugin</module>
+ <module>plexus-services</module>
+ <module>plexus-tools</module>
+ <module>plexus-utils</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <tagBase>https://svn.codehaus.org/plexus/tags</tagBase>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom.md5
new file mode 100644
index 00000000..ec5562d8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom.md5
@@ -0,0 +1 @@
+2e97f3a7666e337ce5d2d98b9c384cae \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom.sha1
new file mode 100644
index 00000000..456d5347
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom.sha1
@@ -0,0 +1 @@
+06f66b2f7d2eef1d805c11bca91c89984cda4137 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom
new file mode 100644
index 00000000..cba2014f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus</artifactId>
+ <packaging>pom</packaging>
+ <name>Plexus</name>
+ <version>1.0.8</version>
+ <ciManagement>
+ <notifiers>
+ <notifier>
+ <type>mail</type>
+ <configuration>
+ <address>dev@plexus.codehaus.org</address>
+ </configuration>
+ </notifier>
+ <notifier>
+ <type>irc</type>
+ <configuration>
+ <host>irc.codehaus.org</host>
+ <port>6667</port>
+ <channel>#plexus</channel>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <inceptionYear>2001</inceptionYear>
+ <mailingLists>
+ <mailingList>
+ <name>Plexus Developer List</name>
+ <subscribe>http://lists.codehaus.org/mailman/listinfo/plexus-dev</subscribe>
+ <unsubscribe>http://lists.codehaus.org/mailman/listinfo/plexus-dev</unsubscribe>
+ <archive>http://lists.codehaus.org/pipermail/plexus-dev/</archive>
+ </mailingList>
+ </mailingLists>
+ <issueManagement>
+ <system>JIRA</system>
+ <url>http://jira.codehaus.org/browse/PLX</url>
+ </issueManagement>
+
+ <distributionManagement>
+ <repository>
+ <id>codehaus.org</id>
+ <name>Plexus Central Repository</name>
+ <url>dav:https://dav.codehaus.org/repository/plexus</url>
+ </repository>
+ <snapshotRepository>
+ <id>codehaus.org</id>
+ <name>Plexus Central Development Repository</name>
+ <url>dav:https://dav.codehaus.org/snapshots.repository/plexus</url>
+ </snapshotRepository>
+ <site>
+ <id>codehaus.org</id>
+ <url>dav:https://dav.codehaus.org/plexus</url>
+ </site>
+ </distributionManagement>
+ <repositories>
+ <repository>
+ <id>apache-snapshots</id>
+ <name>Snapshot repository</name>
+ <url>http://people.apache.org/maven-snapshot-repository</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </repository>
+ <repository>
+ <id>codehaus-snapshots</id>
+ <name>Codehaus Snapshot Development Repository</name>
+ <url>http://snapshots.repository.codehaus.org</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>codehaus-snapshots</id>
+ <name>Codehaus Snapshot Development Repository</name>
+ <url>http://snapshots.repository.codehaus.org</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <developers>
+ <developer>
+ <id>jvanzyl</id>
+ <name>Jason van Zyl</name>
+ <email>jason@maven.org</email>
+ <roles>
+ <role>Developer</role>
+ <role>Release Manager</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>kaz</id>
+ <name>Pete Kazmier</name>
+ <email></email>
+ <organization></organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>jtaylor</id>
+ <name>James Taylor</name>
+ <email>james@jamestaylor.org</email>
+ <organization></organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>dandiep</id>
+ <name>Dan Diephouse</name>
+ <email>dan@envoisolutions.com</email>
+ <organization>Envoi solutions</organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>kasper</id>
+ <name>Kasper Nielsen</name>
+ <email>apache@kav.dk</email>
+ <organization></organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>bwalding</id>
+ <name>Ben Walding</name>
+ <email>bwalding@codehaus.org</email>
+ <organization>Walding Consulting Services</organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>mhw</id>
+ <name>Mark Wilkinson</name>
+ <email>mhw@kremvax.net</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>michal</id>
+ <name>Michal Maczka</name>
+ <email>mmaczka@interia.pl</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>evenisse</id>
+ <name>Emmanuel Venisse</name>
+ <email>evenisse@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Trygve Laugstol</name>
+ <id>trygvis</id>
+ <email>trygvis@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Kenney Westerhof</name>
+ <id>kenney</id>
+ <email>kenney@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Carlos Sanchez</name>
+ <id>carlos</id>
+ <email>carlos@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Brett Porter</name>
+ <id>brett</id>
+ <email>brett@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>John Casey</name>
+ <id>jdcasey</id>
+ <email>jdcasey@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ </developers>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <scm>
+ <connection>scm:svn:http://svn.codehaus.org/plexus/trunk/</connection>
+ <developerConnection>scm:svn:https://svn.codehaus.org/plexus/trunk</developerConnection>
+ </scm>
+ <organization>
+ <name>Codehaus</name>
+ <url>http://www.codehaus.org/</url>
+ </organization>
+ <modules>
+ <!--
+
+ Until the bug is fixed in Maven which is pulling in the trunk to the
+ appserver build.
+ <module>plexus-appserver</module>
+ -->
+ <module>plexus-archetypes</module>
+ <module>plexus-examples</module>
+ <module>plexus-components</module>
+ <module>plexus-component-factories</module>
+ <module>plexus-containers</module>
+ <module>plexus-logging</module>
+ <module>plexus-maven-plugin</module>
+ <module>plexus-tools</module>
+ <module>plexus-utils</module>
+ </modules>
+ <build>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-webdav</artifactId>
+ <version>1.0-beta-1</version>
+ </extension>
+ </extensions>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <tagBase>https://svn.codehaus.org/plexus/tags</tagBase>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom.md5
new file mode 100644
index 00000000..e0d40fcd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom.md5
@@ -0,0 +1 @@
+2da4039a1c4c959c75d3e6126f2029cf \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom.sha1
new file mode 100644
index 00000000..5234d563
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom.sha1
@@ -0,0 +1 @@
+9e7c8432829962afe796b32587c1bfa841a317d5 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom
new file mode 100644
index 00000000..f6fca7c8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom
@@ -0,0 +1,257 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus</artifactId>
+ <packaging>pom</packaging>
+ <name>Plexus</name>
+ <version>1.0.9</version>
+ <ciManagement>
+ <notifiers>
+ <notifier>
+ <type>mail</type>
+ <configuration>
+ <address>dev@plexus.codehaus.org</address>
+ </configuration>
+ </notifier>
+ <notifier>
+ <type>irc</type>
+ <configuration>
+ <host>irc.codehaus.org</host>
+ <port>6667</port>
+ <channel>#plexus</channel>
+ </configuration>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <inceptionYear>2001</inceptionYear>
+ <mailingLists>
+ <mailingList>
+ <name>Plexus User List</name>
+ <subscribe>http://xircles.codehaus.org/manage_email/user%40plexus.codehaus.org</subscribe>
+ <unsubscribe>http://xircles.codehaus.org/manage_email/user%40plexus.codehaus.org</unsubscribe>
+ <archive>http://archive.plexus.codehaus.org/user</archive>
+ </mailingList>
+ <mailingList>
+ <name>Plexus Developer List</name>
+ <subscribe>http://xircles.codehaus.org/manage_email/dev%40plexus.codehaus.org</subscribe>
+ <unsubscribe>http://xircles.codehaus.org/manage_email/dev%40plexus.codehaus.org</unsubscribe>
+ <archive>http://archive.plexus.codehaus.org/dev</archive>
+ </mailingList>
+ <mailingList>
+ <name>Plexus Announce List</name>
+ <subscribe>http://xircles.codehaus.org/manage_email/announce%40plexus.codehaus.org</subscribe>
+ <unsubscribe>http://xircles.codehaus.org/manage_email/announce%40plexus.codehaus.org</unsubscribe>
+ <archive>http://archive.plexus.codehaus.org/announce</archive>
+ </mailingList>
+ <mailingList>
+ <name>Plexus Commit List</name>
+ <subscribe>http://xircles.codehaus.org/manage_email/scm%40plexus.codehaus.org</subscribe>
+ <unsubscribe>http://xircles.codehaus.org/manage_email/scm%40plexus.codehaus.org</unsubscribe>
+ <archive>http://archive.plexus.codehaus.org/scm</archive>
+ </mailingList>
+ </mailingLists>
+ <issueManagement>
+ <system>JIRA</system>
+ <url>http://jira.codehaus.org/browse/PLX</url>
+ </issueManagement>
+
+ <distributionManagement>
+ <repository>
+ <id>codehaus.org</id>
+ <name>Plexus Central Repository</name>
+ <url>dav:https://dav.codehaus.org/repository/plexus</url>
+ </repository>
+ <snapshotRepository>
+ <id>codehaus.org</id>
+ <name>Plexus Central Development Repository</name>
+ <url>dav:https://dav.codehaus.org/snapshots.repository/plexus</url>
+ </snapshotRepository>
+ <site>
+ <id>codehaus.org</id>
+ <url>dav:https://dav.codehaus.org/plexus</url>
+ </site>
+ </distributionManagement>
+ <repositories>
+ <repository>
+ <id>apache-snapshots</id>
+ <name>Snapshot repository</name>
+ <url>http://people.apache.org/maven-snapshot-repository</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </repository>
+ <repository>
+ <id>codehaus-snapshots</id>
+ <name>Codehaus Snapshot Development Repository</name>
+ <url>http://snapshots.repository.codehaus.org</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>codehaus-snapshots</id>
+ <name>Codehaus Snapshot Development Repository</name>
+ <url>http://snapshots.repository.codehaus.org</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <developers>
+ <developer>
+ <id>jvanzyl</id>
+ <name>Jason van Zyl</name>
+ <email>jason@maven.org</email>
+ <roles>
+ <role>Developer</role>
+ <role>Release Manager</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>kaz</id>
+ <name>Pete Kazmier</name>
+ <email />
+ <organization />
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>jtaylor</id>
+ <name>James Taylor</name>
+ <email>james@jamestaylor.org</email>
+ <organization />
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>dandiep</id>
+ <name>Dan Diephouse</name>
+ <email>dan@envoisolutions.com</email>
+ <organization>Envoi solutions</organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>kasper</id>
+ <name>Kasper Nielsen</name>
+ <email>apache@kav.dk</email>
+ <organization />
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>bwalding</id>
+ <name>Ben Walding</name>
+ <email>bwalding@codehaus.org</email>
+ <organization>Walding Consulting Services</organization>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>mhw</id>
+ <name>Mark Wilkinson</name>
+ <email>mhw@kremvax.net</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>michal</id>
+ <name>Michal Maczka</name>
+ <email>mmaczka@interia.pl</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <id>evenisse</id>
+ <name>Emmanuel Venisse</name>
+ <email>evenisse@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Trygve Laugstol</name>
+ <id>trygvis</id>
+ <email>trygvis@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Kenney Westerhof</name>
+ <id>kenney</id>
+ <email>kenney@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Carlos Sanchez</name>
+ <id>carlos</id>
+ <email>carlos@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Brett Porter</name>
+ <id>brett</id>
+ <email>brett@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>John Casey</name>
+ <id>jdcasey</id>
+ <email>jdcasey@codehaus.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Andrew Williams</name>
+ <id>handyande</id>
+ <email>andy@handyande.co.uk</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ </developers>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <scm>
+ <connection>scm:svn:http://svn.codehaus.org/plexus/pom/tags/plexus-1.0.9</connection>
+ <developerConnection>scm:svn:https://svn.codehaus.org/plexus/pom/tags/plexus-1.0.9</developerConnection>
+ <url>http://fisheye.codehaus.org/browse/plexus/pom/tags/plexus-1.0.9</url>
+ </scm>
+ <organization>
+ <name>Codehaus</name>
+ <url>http://www.codehaus.org/</url>
+ </organization>
+ <build>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-webdav</artifactId>
+ <version>1.0-beta-1</version>
+ </extension>
+ </extensions>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom.md5
new file mode 100644
index 00000000..3910bf8b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom.md5
@@ -0,0 +1 @@
+acf338e422e5c0d9c6242e4f21e63dc9 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom.sha1
new file mode 100644
index 00000000..df40a701
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom.sha1
@@ -0,0 +1 @@
+89d241b1e5ee6a72d3dd95d9eb90f635deebcdb2 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/repo-marker.txt b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/repo-marker.txt
new file mode 100644
index 00000000..14a481e1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/repo-marker.txt
@@ -0,0 +1 @@
+This is a marker file to allow the repository to be found in the classpath. \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/lifecycle/LifecycleExecutorTest.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/lifecycle/LifecycleExecutorTest.xml
new file mode 100644
index 00000000..ebbbf791
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/lifecycle/LifecycleExecutorTest.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plexus>
+ <components>
+ <component>
+ <role>org.apache.maven.project.ProjectBuildingHelper</role>
+ <implementation>org.apache.maven.project.EmptyProjectBuildingHelper</implementation>
+ </component>
+ </components>
+</plexus>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/lifecycle/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/lifecycle/pom.xml
new file mode 100644
index 00000000..fb2f91c3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/lifecycle/pom.xml
@@ -0,0 +1,628 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-parent</artifactId>
+ <version>11</version>
+ <relativePath>../pom/maven/pom.xml</relativePath>
+ </parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Apache Maven</name>
+ <description>Maven is a project development management and
+ comprehension tool. Based on the concept of a project object model:
+ builds, dependency management, documentation creation, site
+ publication, and distribution publication are all controlled from
+ the declarative file. Maven can be extended by plugins to utilise a
+ number of other development tools for reporting or the build
+ process.
+ </description>
+ <url>http://maven.apache.org/</url>
+ <inceptionYear>2001</inceptionYear>
+ <properties>
+ <classWorldsVersion>1.3</classWorldsVersion>
+ <commonsCliVersion>1.0</commonsCliVersion>
+ <!--
+
+ Do not update this, Doxia will be decoupled completely from 3.x and someone can
+ create a rendering engine for it if they like when the release stabilizes. JVZ
+
+ -->
+ <doxiaVersion>1.0-alpha-9</doxiaVersion>
+ <easyMockVersion>1.2_Java1.3</easyMockVersion>
+ <junitVersion>3.8.1</junitVersion>
+ <plexusVersion>1.0-beta-3.0.7-SNAPSHOT</plexusVersion>
+ <plexusInteractivityVersion>1.0-alpha-6</plexusInteractivityVersion>
+ <plexusInterpolationVersion>1.1</plexusInterpolationVersion>
+ <plexusPluginManagerVersion>1.0-alpha-1</plexusPluginManagerVersion>
+ <plexusUtilsVersion>1.5.8</plexusUtilsVersion>
+ <plexusJetty6Version>1.6</plexusJetty6Version>
+ <plexusWebdavVersion>1.0</plexusWebdavVersion>
+ <wagonVersion>1.0-beta-4</wagonVersion>
+ <modelBuilderVersion>1.7-SNAPSHOT</modelBuilderVersion>
+ <mercuryVersion>1.0-alpha-6-SNAPSHOT</mercuryVersion>
+ <mercuryMp3Version>1.0-alpha-1</mercuryMp3Version>
+ <securityDispatcherVersion>1.2</securityDispatcherVersion>
+ <woodstoxVersion>3.2.6</woodstoxVersion>
+ <modelloVersion>1.0.1-SNAPSHOT</modelloVersion>
+ <jxpathVersion>1.3</jxpathVersion>
+ </properties>
+ <issueManagement>
+ <system>jira</system>
+ <url>http://jira.codehaus.org/browse/MNG</url>
+ </issueManagement>
+ <mailingLists>
+ <mailingList>
+ <name>Maven Developer List</name>
+ <subscribe>dev-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>dev-unsubscribe@maven.apache.org</unsubscribe>
+ <post>dev@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-dev</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/dev@maven.apache.org/</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven-Developers-f179.html</otherArchive>
+ <otherArchive>http://maven.dev.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Maven User List</name>
+ <subscribe>users-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>users-unsubscribe@maven.apache.org</unsubscribe>
+ <post>users@maven.apache.org</post>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-users</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/users@maven.apache.org/</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven---Users-f178.html</otherArchive>
+ <otherArchive>http://maven.users.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Maven Issues List</name>
+ <subscribe>issues-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>issues-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-issues/</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/issues@maven.apache.org</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven---Issues-f15573.html</otherArchive>
+ <otherArchive>http://maven.issues.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Maven Commits List</name>
+ <subscribe>commits-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>commits-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-commits</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/commits@maven.apache.org</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven---Commits-f15575.html</otherArchive>
+ <otherArchive>http://maven.commits.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <!--
+ duplication from parent pom - temporary until they inherit
+ properly
+ -->
+ <mailingList>
+ <name>Maven Announcements List</name>
+ <post>announce@maven.apache.org</post>
+ <subscribe>announce-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>announce-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-announce/</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/announce@maven.apache.org</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven-Announcements-f15617.html</otherArchive>
+ <otherArchive>http://maven.announce.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Maven Notifications List</name>
+ <subscribe>notifications-subscribe@maven.apache.org</subscribe>
+ <unsubscribe>notifications-unsubscribe@maven.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/maven-notifications/</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/notifications@maven.apache.org</otherArchive>
+ <otherArchive>http://www.nabble.com/Maven---Notifications-f15574.html</otherArchive>
+ <otherArchive>http://maven.notifications.markmail.org/</otherArchive>
+ </otherArchives>
+ </mailingList>
+ </mailingLists>
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/maven/components/trunk</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/components/trunk</developerConnection>
+ <url>http://svn.apache.org/viewcvs.cgi/maven/components/trunk</url>
+ </scm>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-metadata</artifactId>
+ <version>${plexusVersion}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate-metadata</goal>
+ <goal>generate-test-metadata</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <tagBase>https://svn.apache.org/repos/asf/maven/components/tags</tagBase>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>${modelloVersion}</version>
+ <configuration>
+ <useJava5>true</useJava5>
+ </configuration>
+ <executions>
+ <execution>
+ <id>site-docs</id>
+ <phase>pre-site</phase>
+ <goals>
+ <goal>xdoc</goal>
+ <goal>xsd</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>standard</id>
+ <goals>
+ <goal>java</goal>
+ <goal>xpp3-reader</goal>
+ <goal>xpp3-writer</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>1.0.0</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.4.2</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.2-beta-2</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.4-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ <modules>
+ <module>maven-core</module>
+ <module>apache-maven</module>
+ <module>maven-model</module>
+ <module>maven-plugin-api</module>
+ <module>maven-project</module>
+ <module>maven-reporting-api</module>
+ <module>maven-project-builder</module>
+ <module>maven-mercury</module>
+ <module>maven-embedder</module>
+ <module>maven-toolchain</module>
+ <module>maven-compat</module>
+ <module>maven-repository</module>
+ <module>maven-repository-mercury</module>
+ </modules>
+ <!--start-->
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junitVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <dependencyManagement>
+ <!--end-->
+ <dependencies>
+ <!-- Maven Modules -->
+ <!--start-->
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-mercury</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-lifecycle</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-reporting-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-profile</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-toolchain</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-embedder</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project-builder</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-compat</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <!--end-->
+ <!-- Plexus -->
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>${plexusUtilsVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>${plexusVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-annotations</artifactId>
+ <version>${plexusVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-classworlds</artifactId>
+ <version>${classWorldsVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interpolation</artifactId>
+ <version>${plexusInterpolationVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interactivity-api</artifactId>
+ <version>${plexusInteractivityVersion}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <!-- Plexus test dependencies -->
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-jetty6</artifactId>
+ <version>${plexusJetty6Version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.spice</groupId>
+ <artifactId>plexus-webdav</artifactId>
+ <version>${plexusWebdavVersion}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- Wagon -->
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh-external</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <!-- Doxia -->
+ <dependency>
+ <groupId>org.apache.maven.doxia</groupId>
+ <artifactId>doxia-sink-api</artifactId>
+ <version>${doxiaVersion}</version>
+ </dependency>
+ <!-- Maven Shared -->
+ <dependency>
+ <groupId>org.sonatype.spice</groupId>
+ <artifactId>model-builder</artifactId>
+ <version>${modelBuilderVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.woodstox</groupId>
+ <artifactId>wstx-asl</artifactId>
+ <version>${woodstoxVersion}</version>
+ </dependency>
+ <!-- Commons -->
+ <dependency>
+ <groupId>commons-cli</groupId>
+ <artifactId>commons-cli</artifactId>
+ <version>${commonsCliVersion}</version>
+ <exclusions>
+ <exclusion>
+ <artifactId>commons-lang</artifactId>
+ <groupId>commons-lang</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>commons-logging</artifactId>
+ <groupId>commons-logging</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>commons-jxpath</groupId>
+ <artifactId>commons-jxpath</artifactId>
+ <version>${jxpathVersion}</version>
+ </dependency>
+
+ <!-- Mercury -->
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-artifact</artifactId>
+ <version>${mercuryVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-external</artifactId>
+ <version>${mercuryVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-plexus</artifactId>
+ <version>${mercuryVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo-virtual</artifactId>
+ <version>${mercuryVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.mercury</groupId>
+ <artifactId>mercury-mp3-cli</artifactId>
+ <version>${mercuryMp3Version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-sec-dispatcher</artifactId>
+ <version>${securityDispatcherVersion}</version>
+ </dependency>
+
+
+ <!-- Mercury test dependencies -->
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo-local-m2</artifactId>
+ <version>${mercuryVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo-remote-m2</artifactId>
+ <version>${mercuryVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-md-sat</artifactId>
+ <version>${mercuryVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-util</artifactId>
+ <version>${mercuryVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-transport-http</artifactId>
+ <version>${mercuryVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-transport-http</artifactId>
+ <version>${mercuryVersion}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-plugin-manager</artifactId>
+ <version>${plexusPluginManagerVersion}</version>
+ </dependency>
+ <!--start-->
+ <dependency>
+ <groupId>easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <version>${easyMockVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <!--end-->
+ </dependencies>
+ <!--start-->
+ </dependencyManagement>
+ <!--end-->
+ <distributionManagement>
+ <site>
+ <id>apache.website</id>
+ <url>scp://people.apache.org/www/maven.apache.org/ref/${project.version}/</url>
+ </site>
+ </distributionManagement>
+ <profiles>
+ <profile>
+ <id>osgi</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>manifest</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <!-- Needed for including the manifest, see MJAR-71 -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ <configuration>
+ <archive>
+ <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+ </archive>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>release</id>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <inherited>false</inherited>
+ <configuration>
+ <descriptors>
+ <descriptor>src/main/assembly/src.xml</descriptor>
+ </descriptors>
+ <tarLongFileMode>gnu</tarLongFileMode>
+ <finalName>maven-${project.version}-src</finalName>
+ </configuration>
+ <executions>
+ <execution>
+ <id>make-assembly</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>strict</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-enforcer-plugin</artifactId>
+ <version>1.0-alpha-3</version>
+ <executions>
+ <execution>
+ <id>enforce-jdk-15</id>
+ <goals>
+ <goal>enforce</goal>
+ </goals>
+ <configuration>
+ <rules>
+ <requireJavaVersion>
+ <version>1.5</version>
+ </requireJavaVersion>
+ </rules>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/plugin/PluginManagerTest.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/plugin/PluginManagerTest.xml
new file mode 100644
index 00000000..ebbbf791
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/plugin/PluginManagerTest.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plexus>
+ <components>
+ <component>
+ <role>org.apache.maven.project.ProjectBuildingHelper</role>
+ <implementation>org.apache.maven.project.EmptyProjectBuildingHelper</implementation>
+ </component>
+ </components>
+</plexus>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/AbstractMavenProjectTestCase.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/AbstractMavenProjectTestCase.xml
new file mode 100644
index 00000000..e052489b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/AbstractMavenProjectTestCase.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plexus>
+ <components>
+ <component>
+ <role>org.apache.maven.lifecycle.LifeCyclePluginAnalyzer</role>
+ <implementation>org.apache.maven.lifecycle.EmptyLifecyclePluginAnalyzer</implementation>
+ </component>
+ </components>
+</plexus>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/PomConstructionTest.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/PomConstructionTest.xml
new file mode 100644
index 00000000..e3c3ab34
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/PomConstructionTest.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plexus>
+ <components>
+ <component>
+ <role>org.apache.maven.lifecycle.LifeCyclePluginAnalyzer</role>
+ <implementation>org.apache.maven.lifecycle.EmptyLifecyclePluginAnalyzer</implementation>
+ </component>
+ <component>
+ <role>org.apache.maven.project.ProjectBuildingHelper</role>
+ <implementation>org.apache.maven.project.EmptyProjectBuildingHelper</implementation>
+ </component>
+ </components>
+</plexus>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildFromFile/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildFromFile/pom.xml
new file mode 100644
index 00000000..c8a8b85f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildFromFile/pom.xml
@@ -0,0 +1,8 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.tests</groupId>
+ <artifactId>build-from-file</artifactId>
+ <version>1</version>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/1/project-caching-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/1/project-caching-1.pom
new file mode 100644
index 00000000..d4211765
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/1/project-caching-1.pom
@@ -0,0 +1,8 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>tests</groupId>
+ <artifactId>project-caching</artifactId>
+ <version>1</version>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/maven-metadata-local.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/maven-metadata-local.xml
new file mode 100644
index 00000000..a608b4f8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/maven-metadata-local.xml
@@ -0,0 +1,11 @@
+<metadata>
+ <groupId>tests</groupId>
+ <artifactId>project-caching</artifactId>
+ <versioning>
+ <release>1</release>
+ <latest>1</latest>
+ <versions>
+ <version>1</version>
+ </versions>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildModelLineage/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildModelLineage/pom.xml
new file mode 100644
index 00000000..8f5154fc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildModelLineage/pom.xml
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>tests</groupId>
+ <artifactId>build-model-lineage</artifactId>
+ <version>1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/child/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/child/pom.xml
new file mode 100644
index 00000000..4d1d23ee
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/child/pom.xml
@@ -0,0 +1,10 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>tests</groupId>
+ <artifactId>childAndParent-parent</artifactId>
+ <version>1</version>
+ </parent>
+
+ <artifactId>childAndParent-child</artifactId>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/pom.xml
new file mode 100644
index 00000000..164506fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/pom.xml
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>tests</groupId>
+ <artifactId>childAndParent-parent</artifactId>
+ <version>1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/pom.xml
new file mode 100644
index 00000000..9633029a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/pom.xml
@@ -0,0 +1,10 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>tests</groupId>
+ <artifactId>resolve-parent-pom-parent</artifactId>
+ <version>1</version>
+ </parent>
+
+ <artifactId>resolve-parent-pom</artifactId>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/settings/PomConstructionWithSettingsTest.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/settings/PomConstructionWithSettingsTest.xml
new file mode 100644
index 00000000..c6769290
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/settings/PomConstructionWithSettingsTest.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plexus>
+ <components>
+ <component>
+ <role>org.apache.maven.lifecycle.LifecycleExecutor</role>
+ <implementation>org.apache.maven.project.EmptyLifecycleExecutor</implementation>
+ </component>
+ </components>
+</plexus>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/global.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/global.xml
new file mode 100644
index 00000000..cd9be74c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/global.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<toolchains>
+ <toolchain>
+ <type>basic</type>
+ <configuration>
+ <global>true</global>
+ </configuration>
+ </toolchain>
+ <toolchain>
+ <type>rare</type>
+ <configuration>
+ <global>true</global>
+ </configuration>
+ </toolchain>
+</toolchains> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/model/toolchains-jdks-extend.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/model/toolchains-jdks-extend.xml
new file mode 100644
index 00000000..4fb00930
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/model/toolchains-jdks-extend.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<toolchains>
+ <toolchain>
+ <type>jdk</type>
+ <provides>
+ <version>1.5</version>
+ <vendor>sun</vendor>
+ </provides>
+ <configuration>
+ <jdkHome>${env.JAVA_HOME}</jdkHome>
+ <toolsJar>lib/tools.jar</toolsJar>
+ </configuration>
+ </toolchain>
+ <toolchain>
+ <type>jdk</type>
+ <provides>
+ <version>1.6</version>
+ <vendor>sun</vendor>
+ </provides>
+ <configuration>
+ <jdkHome>${env.JAVA_HOME}</jdkHome>
+ <toolsJar>lib/classes.jar</toolsJar>
+ </configuration>
+ </toolchain>
+</toolchains> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/model/toolchains-jdks-extra.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/model/toolchains-jdks-extra.xml
new file mode 100644
index 00000000..35c32172
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/model/toolchains-jdks-extra.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<toolchains>
+ <toolchain>
+ <type>jdk</type>
+ <provides>
+ <version>1.4</version>
+ <vendor>sun</vendor>
+ <!-- no id, so it's considered 'default' -->
+ </provides>
+ <configuration>
+ <jdkHome>${env.JAVA_HOME}</jdkHome>
+ </configuration>
+ </toolchain>
+ <toolchain>
+ <type>jdk</type>
+ <provides>
+ <version>1.7</version>
+ <vendor>ibm</vendor>
+ <id>ibm_17</id>
+ </provides>
+ <configuration>
+ <jdkHome>${env.JAVA_HOME}</jdkHome>
+ </configuration>
+ </toolchain>
+</toolchains> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/model/toolchains-jdks.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/model/toolchains-jdks.xml
new file mode 100644
index 00000000..5233a338
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/model/toolchains-jdks.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<toolchains>
+ <toolchain>
+ <type>jdk</type>
+ <provides>
+ <version>1.5</version>
+ <vendor>sun</vendor>
+ </provides>
+ <configuration>
+ <jdkHome>${env.JAVA_HOME}</jdkHome>
+ </configuration>
+ </toolchain>
+ <toolchain>
+ <type>jdk</type>
+ <provides>
+ <version>1.6</version>
+ <vendor>sun</vendor>
+ </provides>
+ <configuration>
+ <jdkHome>${env.JAVA_HOME}</jdkHome>
+ </configuration>
+ </toolchain>
+</toolchains> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/user.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/user.xml
new file mode 100644
index 00000000..d11181fc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/user.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<toolchains>
+ <toolchain>
+ <type>basic</type>
+ <configuration>
+ <user>true</user>
+ </configuration>
+ </toolchain>
+ <toolchain>
+ <type>rare</type>
+ <configuration>
+ <user>true</user>
+ </configuration>
+ </toolchain>
+</toolchains> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar
new file mode 100644
index 00000000..5c50e177
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar.sha1
new file mode 100644
index 00000000..28f6dbb5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar.sha1
@@ -0,0 +1 @@
+fa632b7f1cb7c50963d0fb7d818ca93c75c10127 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom
new file mode 100644
index 00000000..6cf90799
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <parent>
+ <artifactId>plexus</artifactId>
+ <groupId>org.codehaus.plexus</groupId>
+ <version>1.0.4</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>plexus-utils</artifactId>
+ <name>Plexus Common Utilities</name>
+ <version>1.1</version>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>org/codehaus/plexus/util/FileBasedTestCase.java</exclude>
+ <exclude>**/Test*.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <distributionManagement>
+ <status>deployed</status>
+ </distributionManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.sha1 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.sha1
new file mode 100644
index 00000000..4dc64d4a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.sha1
@@ -0,0 +1 @@
+15492ecd00920daca9ec15f6acd695b626621e5b \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/pom.xml
new file mode 100644
index 00000000..cf4c29c0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/pom.xml
@@ -0,0 +1,52 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <packaging>jar</packaging>
+
+ <name>Maven</name>
+ <inceptionYear>2001</inceptionYear>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+
+ <scm>
+ <connection>scm-connection</connection>
+ </scm>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/plugin-level-dep.pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/plugin-level-dep.pom.xml
new file mode 100644
index 00000000..98873675
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/plugin-level-dep.pom.xml
@@ -0,0 +1,24 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>testing</groupId>
+ <artifactId>plugin-level-dep</artifactId>
+ <packaging>jar</packaging>
+ <version>3.8.1</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/pom-interp.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/pom-interp.xml
new file mode 100644
index 00000000..40fdb414
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/pom-interp.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.test</groupId>
+ <artifactId>test-build-dynamism</artifactId>
+ <version>1</version>
+
+ <build>
+ <sourceDirectory>/${project.groupId}/src/main/java</sourceDirectory>
+ <testSourceDirectory>/${pom.groupId}/src/test/java</testSourceDirectory>
+ <scriptSourceDirectory>/${groupId}/src/main/scripts</scriptSourceDirectory>
+
+ <plugins>
+ <plugin>
+ <artifactId>my-plugin</artifactId>
+ <configuration>
+ <testOne>${project.groupId}</testOne>
+ <testTwo>${pom.groupId}</testTwo>
+ <testThree>${groupId}</testThree>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/pom-relative.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/pom-relative.xml
new file mode 100644
index 00000000..bb22b3d0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/pom-relative.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.test</groupId>
+ <artifactId>test-build-dynamism</artifactId>
+ <version>1</version>
+
+ <properties>
+ <myProperty>${pom.build.directory}</myProperty>
+ </properties>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>${pom.build.directory}/generated-resources/plexus</directory>
+ </resource>
+ </resources>
+
+ <filters>
+ <filter>${pom.build.directory}/generated-filters.properties</filter>
+ </filters>
+
+ <directory>target</directory>
+
+ <sourceDirectory>src/main/java</sourceDirectory>
+ <testSourceDirectory>src/test/java</testSourceDirectory>
+ <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
+
+ <outputDirectory>${pom.build.directory}/classes</outputDirectory>
+ <testOutputDirectory>${pom.build.directory}/test-classes</testOutputDirectory>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/pom.xml
new file mode 100644
index 00000000..37797f2e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/pom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.test</groupId>
+ <artifactId>test-build-dynamism</artifactId>
+ <version>1</version>
+
+ <properties>
+ <myProperty>${pom.build.directory}</myProperty>
+ </properties>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>${pom.build.directory}/generated-resources/plexus</directory>
+ </resource>
+ </resources>
+
+ <filters>
+ <filter>${pom.build.directory}/generated-filters.properties</filter>
+ </filters>
+
+ <directory>target</directory>
+
+ <sourceDirectory>${pom.basedir}/src/main/java</sourceDirectory>
+ <testSourceDirectory>${pom.basedir}/src/test/java</testSourceDirectory>
+ <scriptSourceDirectory>${pom.basedir}/src/main/scripts</scriptSourceDirectory>
+
+ <outputDirectory>${pom.build.directory}/classes</outputDirectory>
+ <testOutputDirectory>${pom.build.directory}/test-classes</testOutputDirectory>
+ </build>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/bad-dependency.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/bad-dependency.xml
new file mode 100644
index 00000000..4b5424ae
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/bad-dependency.xml
@@ -0,0 +1,27 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>test</groupId>
+ <artifactId>invalid</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+
+ <repositories>
+ <repository>
+ <id>central</id>
+ <url>file:src/test/remote-repo</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <!-- groupId deliberately missing -->
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/bad-project.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/bad-project.xml
new file mode 100644
index 00000000..e415318c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/bad-project.xml
@@ -0,0 +1,20 @@
+i want to be a <!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+POM! \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/base-directory-alignment/project-which-needs-directory-alignment-child.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/base-directory-alignment/project-which-needs-directory-alignment-child.xml
new file mode 100644
index 00000000..ee2207ee
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/base-directory-alignment/project-which-needs-directory-alignment-child.xml
@@ -0,0 +1,33 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+
+ <extend>project-which-needs-directory-alignment.xml</extend>
+
+ <parent>
+ <groupId>maven</groupId>
+ <artifactId>project-which-needs-directory-alignment.xml</artifactId>
+ <version>1.0-beta-9</version>
+ </parent>
+
+ <groupId>maven</groupId>
+ <artifactId>maven-foo</artifactId>
+ <version>1.0</version>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/base-directory-alignment/project-which-needs-directory-alignment.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/base-directory-alignment/project-which-needs-directory-alignment.xml
new file mode 100644
index 00000000..cefbcb04
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/base-directory-alignment/project-which-needs-directory-alignment.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>project-which-needs-directory-alignment</artifactId>
+ <name>Maven</name>
+ <version>1.0-beta-9</version>
+ <inceptionYear>2001</inceptionYear>
+ <description>Description</description>
+ <url>http://maven.apache.org/</url>
+
+ <organization>
+ <name>Apache Software Foundation</name>
+ <url>http://apache.org/</url>
+ </organization>
+
+ <scm>
+ <connection>anon-connection</connection>
+ <developerConnection>developer-connection</developerConnection>
+ <url>repository-url</url>
+ </scm>
+
+ <mailingLists>
+ <mailingList>
+ <name>Maven User List</name>
+ <subscribe>subscribe</subscribe>
+ <unsubscribe>unsubscribe</unsubscribe>
+ <archive>archive</archive>
+ </mailingList>
+ </mailingLists>
+
+ <developers>
+ <developer>
+ <name>Jason van Zyl</name>
+ <id>jvanzyl</id>
+ <email>jason@maven.org</email>
+ <organization>Zenplex</organization>
+ <roles>
+ <role>Founder</role>
+ <role>Release Manager</role>
+ </roles>
+ </developer>
+ </developers>
+
+ <contributors>
+ <contributor>
+ <name>Martin van dem Bemt</name>
+ <email>mvdb@mvdb.com</email>
+ </contributor>
+ </contributors>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>g1</groupId>
+ <artifactId>d1</artifactId>
+ <version>1.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>g2</groupId>
+ <artifactId>d2</artifactId>
+ <version>2.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>g3</groupId>
+ <artifactId>d3</artifactId>
+ </dependency>
+
+ </dependencies>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>g3</groupId>
+ <artifactId>d3</artifactId>
+ <version>3.0</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <build>
+ <sourceDirectory>sourceDirectory</sourceDirectory>
+ <testSourceDirectory>unitTestSourceDirectory</testSourceDirectory>
+ <resources>
+ <resource>
+ <directory>src/test</directory>
+ <includes>
+ <include>**/*.xml</include>
+ </includes>
+ </resource>
+ </resources>
+ <testResources>
+ <testResource>
+ <directory>src/conf</directory>
+ <includes>
+ <include>*.xsd</include>
+ <include>*.dtd</include>
+ <include>*.mod</include>
+ <include>log4j.properties</include>
+ <include>driver.jelly</include>
+ <include>driver.properties</include>
+ </includes>
+ </testResource>
+ <testResource>
+ <directory>src/messages</directory>
+ <targetPath>org/apache/maven/messages</targetPath>
+ <includes>
+ <include>messages*.properties</include>
+ </includes>
+ </testResource>
+ </testResources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/base-directory-alignment/subproject/project-which-needs-directory-alignment-child.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/base-directory-alignment/subproject/project-which-needs-directory-alignment-child.xml
new file mode 100644
index 00000000..68775efc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/base-directory-alignment/subproject/project-which-needs-directory-alignment-child.xml
@@ -0,0 +1,29 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+
+ <extend>../project-which-needs-directory-alignment.xml</extend>
+
+ <parent>
+ <groupId>maven</groupId>
+ <artifactId>project-which-needs-directory-alignment</artifactId>
+ <version>1.0-beta-9</version>
+ </parent>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/build-path-expression-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/build-path-expression-pom.xml
new file mode 100644
index 00000000..d7e296f4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/build-path-expression-pom.xml
@@ -0,0 +1,14 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.project.tests</groupId>
+ <artifactId>build-path-expression</artifactId>
+ <version>1</version>
+ <build>
+ <sourceDirectory>sources</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>${project.build.sourceDirectory}</directory>
+ </resource>
+ </resources>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/build.properties b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/build.properties
new file mode 100644
index 00000000..01626c39
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/build.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+name = sarel
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/child-which-inherits-from-super-model.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/child-which-inherits-from-super-model.xml
new file mode 100644
index 00000000..58cae23e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/child-which-inherits-from-super-model.xml
@@ -0,0 +1,28 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<model>
+ <groupId>foo</groupId>
+ <artifactId>bar</artifactId>
+ <name>Babar</name>
+ <version>4.5</version>
+
+ <!-- Build element should be inherited from the super model -->
+
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/child-with-bogus-parent.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/child-with-bogus-parent.xml
new file mode 100644
index 00000000..a072fc74
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/child-with-bogus-parent.xml
@@ -0,0 +1,29 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<model>
+
+ <extend>${basedir}/bogus.xml</extend>
+
+ <parent>
+ <groupId>maven</groupId>
+ <artifactId>bogus</artifactId>
+ <version>1.0-beta-9</version>
+ </parent>
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/child.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/child.xml
new file mode 100644
index 00000000..a6d702ce
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/child.xml
@@ -0,0 +1,33 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<model>
+
+ <extend>project.xml</extend>
+
+ <parent>
+ <groupId>maven</groupId>
+ <artifactId>maven-project-test</artifactId>
+ <version>1.0-beta-9</version>
+ </parent>
+
+ <artifactId>child-artifact</artifactId>
+ <groupId>maven</groupId>
+ <version>1.0-beta-9</version>
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/duplicate-plugins-merged-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/duplicate-plugins-merged-pom.xml
new file mode 100644
index 00000000..7383109f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/duplicate-plugins-merged-pom.xml
@@ -0,0 +1,48 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>tests.project</groupId>
+ <artifactId>duplicate-plugin-defs-merged</artifactId>
+ <version>1</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>group</groupId>
+ <artifactId>first</artifactId>
+ <version>1</version>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <id>first</id>
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>group</groupId>
+ <artifactId>second</artifactId>
+ <version>1</version>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <id>second</id>
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/fully-populated-child.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/fully-populated-child.xml
new file mode 100644
index 00000000..61d6b672
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/fully-populated-child.xml
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<model>
+ <extend>project.xml</extend>
+ <parent>
+ <groupId>maven</groupId>
+ <artifactId>maven-project-test</artifactId>
+ <version>1.0-beta-9</version>
+ </parent>
+ <modelVersion>3</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>maven</artifactId>
+ <name>Maven</name>
+ <version>1.0-beta-9</version>
+ <inceptionYear>2001</inceptionYear>
+ <package>org.apache.maven</package>
+ <description>Description</description>
+ <shortDescription>shortDescription</shortDescription>
+ <url>http://maven.apache.org/</url>
+ <issueTrackingUrl>issueTrackingUrl</issueTrackingUrl>
+ <distributionManagement>
+ <repository>
+ <id>childDistributionRepositoryId</id>
+ <name>childDistributionRepositoryName</name>
+ <url>childDistributionRepository</url>
+ </repository>
+ <site>
+ <id>childSiteDistributionId</id>
+ <name>childSiteDistributionName</name>
+ <url>childSiteDistributionUrl</url>
+ </site>
+ </distributionManagement>
+
+ <organization>
+ <name>Apache Software Foundation</name>
+ <url>http://apache.org/</url>
+ <logo>/images/jakarta-logo-blue.gif</logo>
+ </organization>
+
+ <scm>
+ <connection>anon-connection</connection>
+ <developerConnection>developer-connection</developerConnection>
+ <url>repository-url</url>
+ </scm>
+
+ <mailingLists>
+ <mailingList>
+ <name>Maven User List</name>
+ <subscribe>subscribe</subscribe>
+ <unsubscribe>unsubscribe</unsubscribe>
+ <archive>archive</archive>
+ </mailingList>
+ </mailingLists>
+
+ <developers>
+ <developer>
+ <name>Jason van Zyl</name>
+ <id>jvanzyl</id>
+ <email>jason@maven.org</email>
+ <organization>Zenplex</organization>
+ <roles>
+ <role>Founder</role>
+ <role>Release Manager</role>
+ </roles>
+ </developer>
+ </developers>
+
+ <contributors>
+ <contributor>
+ <name>Martin van dem Bemt</name>
+ <email>mvdb@mvdb.com</email>
+ </contributor>
+ </contributors>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>g1</groupId>
+ <artifactId>d1</artifactId>
+ <version>1.0</version>
+ <url>d1-url</url>
+ </dependency>
+
+ <dependency>
+ <groupId>g2</groupId>
+ <artifactId>d2</artifactId>
+ <version>2.0</version>
+ <url>d2-url</url>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <nagEmailAddress>jason@maven.org</nagEmailAddress>
+ <sourceDirectory>/sourceDirectory</sourceDirectory>
+ <unitTestSourceDirectory>/unitTestSourceDirectory</unitTestSourceDirectory>
+ <unitTest>
+ <includes>
+ <include>**/*Test.java</include>
+ </includes>
+ <excludes>
+ <exclude>**/RepositoryTest.java</exclude>
+ <exclude>**/JAXPTest.java</exclude>
+ </excludes>
+ <resources>
+ <resource>
+ <directory>${basedir}/src/test</directory>
+ <includes>
+ <include>**/*.xml</include>
+ </includes>
+ </resource>
+ </resources>
+ </unitTest>
+ <resources>
+ <resource>
+ <directory>/src/conf</directory>
+ <includes>
+ <include>*.xsd</include>
+ <include>*.dtd</include>
+ <include>*.mod</include>
+ <include>log4j.properties</include>
+ <include>driver.jelly</include>
+ <include>driver.properties</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>/src/messages</directory>
+ <targetPath>org/apache/maven/messages</targetPath>
+ <includes>
+ <include>messages*.properties</include>
+ </includes>
+ </resource>
+ </resources>
+ </build>
+
+ <reports>
+ <report>maven-jdepend-plugin</report>
+ <report>maven-checkstyle-plugin</report>
+ <report>maven-changelog-plugin</report>
+ <report>maven-file-activity-plugin</report>
+ <report>maven-developer-activity-plugin</report>
+ <report>maven-javadoc-plugin</report>
+ <report>maven-jxr-plugin</report>
+ <report>maven-junit-report-plugin</report>
+ <report>maven-tasklist-plugin</report>
+ <report>maven-jellydoc-plugin</report>
+ </reports>
+
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/grandchild-check/child/grandchild/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/grandchild-check/child/grandchild/pom.xml
new file mode 100644
index 00000000..56bed2c9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/grandchild-check/child/grandchild/pom.xml
@@ -0,0 +1,10 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>grandchildtest</groupId>
+ <artifactId>child</artifactId>
+ <version>1</version>
+ </parent>
+ <artifactId>grandchild</artifactId>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/grandchild-check/child/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/grandchild-check/child/pom.xml
new file mode 100644
index 00000000..0858c6d1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/grandchild-check/child/pom.xml
@@ -0,0 +1,13 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>grandchildtest</groupId>
+ <artifactId>root-pom</artifactId>
+ <version>1</version>
+ </parent>
+ <artifactId>child</artifactId>
+ <packaging>pom</packaging>
+ <modules>
+ <module>grandchild</module>
+ </modules>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/grandchild-check/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/grandchild-check/pom.xml
new file mode 100644
index 00000000..3b1ebd0e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/grandchild-check/pom.xml
@@ -0,0 +1,7 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>grandchildtest</groupId>
+ <artifactId>root-pom</artifactId>
+ <version>1</version>
+ <packaging>pom</packaging>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/import-scope-pom-resolves-from-property-based-repository.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/import-scope-pom-resolves-from-property-based-repository.xml
new file mode 100644
index 00000000..4c29a3b9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/import-scope-pom-resolves-from-property-based-repository.xml
@@ -0,0 +1,31 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>test</groupId>
+ <artifactId>imported-pom-found</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+
+ <properties>
+ <repo.url>file:src/test/remote-repo</repo.url>
+ </properties>
+
+ <repositories>
+ <repository>
+ <id>central</id>
+ <url>${repo.url}</url>
+ </repository>
+ </repositories>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/modelsource/module01/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/modelsource/module01/pom.xml
new file mode 100644
index 00000000..cfaf9e8f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/modelsource/module01/pom.xml
@@ -0,0 +1,12 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>test.readparent</groupId>
+ <artifactId>local-parent</artifactId>
+ <version>1.0</version>
+ </parent>
+
+ <artifactId>module01</artifactId>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/modelsource/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/modelsource/pom.xml
new file mode 100644
index 00000000..0fe29370
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/modelsource/pom.xml
@@ -0,0 +1,13 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>test.readparent</groupId>
+ <artifactId>local-parent</artifactId>
+ <packaging>pom</packaging>
+ <version>1.0</version>
+
+ <modules>
+ <module>module</module>
+ </modules>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/project.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/project.xml
new file mode 100644
index 00000000..a9119714
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/project.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<model>
+ <modelVersion>3</modelVersion>
+ <groupId>maven</groupId>
+ <artifactId>maven-project-test</artifactId>
+ <name>Maven</name>
+ <version>1.0-beta-9</version>
+ <inceptionYear>2001</inceptionYear>
+ <package>org.apache.maven</package>
+ <description>Description</description>
+ <shortDescription>shortDescription</shortDescription>
+ <url>http://maven.apache.org/</url>
+ <issueTrackingUrl>issueTrackingUrl</issueTrackingUrl>
+ <distributionManagement>
+ <repository>
+ <id>distributionRepositoryId</id>
+ <name>distributionRepositoryName</name>
+ <url>distributionRepository</url>
+ </repository>
+ <site>
+ <id>siteDistributionId</id>
+ <name>siteDistributionName</name>
+ <url>siteDistributionUrl</url>
+ </site>
+ </distributionManagement>
+
+ <organization>
+ <name>Apache Software Foundation</name>
+ <url>http://apache.org/</url>
+ <logo>/images/jakarta-logo-blue.gif</logo>
+ </organization>
+
+ <scm>
+ <connection>anon-connection</connection>
+ <developerConnection>developer-connection</developerConnection>
+ <url>repository-url</url>
+ </scm>
+
+ <mailingLists>
+ <mailingList>
+ <name>Maven User List</name>
+ <subscribe>subscribe</subscribe>
+ <unsubscribe>unsubscribe</unsubscribe>
+ <archive>archive</archive>
+ </mailingList>
+ </mailingLists>
+
+ <developers>
+ <developer>
+ <name>Jason van Zyl</name>
+ <id>jvanzyl</id>
+ <email>jason@maven.org</email>
+ <organization>Zenplex</organization>
+ <roles>
+ <role>Founder</role>
+ <role>Release Manager</role>
+ </roles>
+ </developer>
+ </developers>
+
+ <contributors>
+ <contributor>
+ <name>Martin van dem Bemt</name>
+ <email>mvdb@mvdb.com</email>
+ </contributor>
+ </contributors>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>g1</groupId>
+ <artifactId>d1</artifactId>
+ <version>1.0</version>
+ <url>d1-url</url>
+ </dependency>
+
+ <dependency>
+ <groupId>g2</groupId>
+ <artifactId>d2</artifactId>
+ <version>2.0</version>
+ <url>d2-url</url>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <nagEmailAddress>jason@maven.org</nagEmailAddress>
+ <sourceDirectory>/sourceDirectory</sourceDirectory>
+ <unitTestSourceDirectory>/unitTestSourceDirectory</unitTestSourceDirectory>
+ <unitTest>
+ <includes>
+ <include>**/*Test.java</include>
+ </includes>
+ <excludes>
+ <exclude>**/RepositoryTest.java</exclude>
+ <exclude>**/JAXPTest.java</exclude>
+ </excludes>
+ <resources>
+ <resource>
+ <directory>${basedir}/src/test</directory>
+ <includes>
+ <include>**/*.xml</include>
+ </includes>
+ </resource>
+ </resources>
+ </unitTest>
+ <resources>
+ <resource>
+ <directory>/src/conf</directory>
+ <includes>
+ <include>*.xsd</include>
+ <include>*.dtd</include>
+ <include>*.mod</include>
+ <include>log4j.properties</include>
+ <include>driver.jelly</include>
+ <include>driver.properties</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>/src/messages</directory>
+ <targetPath>org/apache/maven/messages</targetPath>
+ <includes>
+ <include>messages*.properties</include>
+ </includes>
+ </resource>
+ </resources>
+ </build>
+
+ <reports>
+ <report>maven-jdepend-plugin</report>
+ <report>maven-checkstyle-plugin</report>
+ <report>maven-changelog-plugin</report>
+ <report>maven-file-activity-plugin</report>
+ <report>maven-developer-activity-plugin</report>
+ <report>maven-javadoc-plugin</report>
+ <report>maven-jxr-plugin</report>
+ <report>maven-junit-report-plugin</report>
+ <report>maven-tasklist-plugin</report>
+ <report>maven-jellydoc-plugin</report>
+ </reports>
+
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/versionless-managed-dependency.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/versionless-managed-dependency.xml
new file mode 100644
index 00000000..40bf2955
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/versionless-managed-dependency.xml
@@ -0,0 +1,24 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>test</groupId>
+ <artifactId>versionless-managed-dependency.xml</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>a</artifactId>
+ </dependency>
+ </dependencies>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>a</artifactId>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/maven-test/jars/maven-test-b-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/maven-test/jars/maven-test-b-1.0.jar
new file mode 100644
index 00000000..9ff33b6d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/maven-test/jars/maven-test-b-1.0.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/maven-test/jars/maven-test-b-1.0.jar.md5 b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/maven-test/jars/maven-test-b-1.0.jar.md5
new file mode 100644
index 00000000..a8406fd7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/maven-test/jars/maven-test-b-1.0.jar.md5
@@ -0,0 +1 @@
+a5c3b5cd0605bb7331d1846cdc14b13b
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/maven-test/poms/maven-test-b-1.0.pom b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/maven-test/poms/maven-test-b-1.0.pom
new file mode 100644
index 00000000..ed5c2693
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/maven-test/poms/maven-test-b-1.0.pom
@@ -0,0 +1,21 @@
+<model>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-a</artifactId>
+ <packaging>jar</packaging>
+ <dependencies>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-b</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-z</artifactId>
+ <version>1.0</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</model> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar
new file mode 100644
index 00000000..b3da0186
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar
@@ -0,0 +1 @@
+remote \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version
new file mode 100644
index 00000000..c1c3c3e3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version
@@ -0,0 +1 @@
+20050101.101010 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar
new file mode 100644
index 00000000..c2c027fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar
@@ -0,0 +1 @@
+local \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version
new file mode 100644
index 00000000..b2954fe9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version
@@ -0,0 +1 @@
+20030101.101010 \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-c-1.0-SNAPSHOT.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-c-1.0-SNAPSHOT.jar
new file mode 100644
index 00000000..b3da0186
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-c-1.0-SNAPSHOT.jar
@@ -0,0 +1 @@
+remote \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-c-1.0-SNAPSHOT.jar.snapshot-version b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-c-1.0-SNAPSHOT.jar.snapshot-version
new file mode 100644
index 00000000..7c5f8a57
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-c-1.0-SNAPSHOT.jar.snapshot-version
@@ -0,0 +1 @@
+20040101.101010
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-2/maven-test/jars/maven-test-z-1.0.jar b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-2/maven-test/jars/maven-test-z-1.0.jar
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-2/maven-test/jars/maven-test-z-1.0.jar
@@ -0,0 +1 @@
+foo
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/withActiveByDefaultProfile-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/withActiveByDefaultProfile-pom.xml
new file mode 100644
index 00000000..95ee353a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/withActiveByDefaultProfile-pom.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>2.0-SNAPSHOT</version>
+
+ <name>Maven</name>
+
+ <profiles>
+ <profile>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <id>test</id>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/pom.xml
new file mode 100644
index 00000000..c004ea17
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/pom.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language
+ governing permissions and limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.3.3</version>
+ </parent>
+
+ <artifactId>maven-embedder</artifactId>
+
+ <name>Maven Embedder</name>
+ <description>Maven embeddable component, with CLI and logging support.</description>
+
+ <scm><!-- remove when git scm url format can accept artifact-id at the end, as automatically inherited -->
+ <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
+ <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
+ <tag>maven-3.3.3</tag>
+ </scm>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-settings</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model-builder</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-compat</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-classworlds</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>org.eclipse.sisu.plexus</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-sec-dispatcher</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-cipher</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ <optional>true</optional>
+ </dependency>
+ <!-- CLI -->
+ <dependency>
+ <groupId>commons-cli</groupId>
+ <artifactId>commons-cli</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ <filtering>true</filtering>
+ </resource>
+ </resources>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludes combine.children="append">
+ <exclude>src/main/resources/META-INF/MANIFEST.MF</exclude>
+ <exclude>src/test/*-projects/**</exclude>
+ <exclude>src/test/*-project/**</exclude>
+ <exclude>src/test/plugin-version-references/**</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>sisu-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-metadata</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <configuration>
+ <version>1.0.0</version>
+ <models>
+ <model>src/main/mdo/core-extensions.mdo</model>
+ </models>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/pom.xml
new file mode 100644
index 00000000..c4ad90d2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/pom.xml
@@ -0,0 +1,39 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.embedder</groupId>
+ <artifactId>simple-project</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <name>simple-project</name>
+ <url>http://maven.apache.org</url>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <properties>
+ <environment>development</environment>
+ </properties>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/settings.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/settings.xml
new file mode 100644
index 00000000..39709fde
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/settings.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<settings>
+ <pluginGroups>
+ <pluginGroup>org.codehaus.tycho</pluginGroup>
+ <pluginGroup>org.sonatype.pwt</pluginGroup>
+ </pluginGroups>
+</settings>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/src/main/java/org/apache/maven/embedder/App.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/src/main/java/org/apache/maven/embedder/App.java
new file mode 100644
index 00000000..06927bff
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/src/main/java/org/apache/maven/embedder/App.java
@@ -0,0 +1,28 @@
+package org.apache.maven.embedder;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/src/test/java/org/apache/maven/embedder/AppTest.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/src/test/java/org/apache/maven/embedder/AppTest.java
new file mode 100644
index 00000000..ee90c206
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/src/test/java/org/apache/maven/embedder/AppTest.java
@@ -0,0 +1,53 @@
+package org.apache.maven.embedder;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
new file mode 100644
index 00000000..a78e11dc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
@@ -0,0 +1,271 @@
+package org.apache.maven.cli;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.GnuParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.OptionBuilder;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+
+/**
+ * @author Jason van Zyl
+ */
+public class CLIManager
+{
+ public static final char ALTERNATE_POM_FILE = 'f';
+
+ public static final char BATCH_MODE = 'B';
+
+ public static final char SET_SYSTEM_PROPERTY = 'D';
+
+ public static final char OFFLINE = 'o';
+
+ public static final char QUIET = 'q';
+
+ public static final char DEBUG = 'X';
+
+ public static final char ERRORS = 'e';
+
+ public static final char HELP = 'h';
+
+ public static final char VERSION = 'v';
+
+ public static final char SHOW_VERSION = 'V';
+
+ public static final char NON_RECURSIVE = 'N';
+
+ public static final char UPDATE_SNAPSHOTS = 'U';
+
+ public static final char ACTIVATE_PROFILES = 'P';
+
+ public static final String SUPRESS_SNAPSHOT_UPDATES = "nsu";
+
+ public static final char CHECKSUM_FAILURE_POLICY = 'C';
+
+ public static final char CHECKSUM_WARNING_POLICY = 'c';
+
+ public static final char ALTERNATE_USER_SETTINGS = 's';
+
+ public static final String ALTERNATE_GLOBAL_SETTINGS = "gs";
+
+ public static final char ALTERNATE_USER_TOOLCHAINS = 't';
+
+ public static final String ALTERNATE_GLOBAL_TOOLCHAINS = "gt";
+
+ public static final String FAIL_FAST = "ff";
+
+ public static final String FAIL_AT_END = "fae";
+
+ public static final String FAIL_NEVER = "fn";
+
+ public static final String RESUME_FROM = "rf";
+
+ public static final String PROJECT_LIST = "pl";
+
+ public static final String ALSO_MAKE = "am";
+
+ public static final String ALSO_MAKE_DEPENDENTS = "amd";
+
+ public static final String LOG_FILE = "l";
+
+ public static final String ENCRYPT_MASTER_PASSWORD = "emp";
+
+ public static final String ENCRYPT_PASSWORD = "ep";
+
+ public static final String THREADS = "T";
+
+ public static final String LEGACY_LOCAL_REPOSITORY = "llr";
+
+ public static final String BUILDER = "b";
+
+ protected Options options;
+
+ @SuppressWarnings( { "static-access", "checkstyle:linelength" } )
+ public CLIManager()
+ {
+ options = new Options();
+ options.addOption( OptionBuilder.withLongOpt( "help" ).withDescription( "Display help information" ).create( HELP ) );
+ options.addOption( OptionBuilder.withLongOpt( "file" ).hasArg().withDescription( "Force the use of an alternate POM file (or directory with pom.xml)." ).create( ALTERNATE_POM_FILE ) );
+ options.addOption( OptionBuilder.withLongOpt( "define" ).hasArg().withDescription( "Define a system property" ).create( SET_SYSTEM_PROPERTY ) );
+ options.addOption( OptionBuilder.withLongOpt( "offline" ).withDescription( "Work offline" ).create( OFFLINE ) );
+ options.addOption( OptionBuilder.withLongOpt( "version" ).withDescription( "Display version information" ).create( VERSION ) );
+ options.addOption( OptionBuilder.withLongOpt( "quiet" ).withDescription( "Quiet output - only show errors" ).create( QUIET ) );
+ options.addOption( OptionBuilder.withLongOpt( "debug" ).withDescription( "Produce execution debug output" ).create( DEBUG ) );
+ options.addOption( OptionBuilder.withLongOpt( "errors" ).withDescription( "Produce execution error messages" ).create( ERRORS ) );
+ options.addOption( OptionBuilder.withLongOpt( "non-recursive" ).withDescription( "Do not recurse into sub-projects" ).create( NON_RECURSIVE ) );
+ options.addOption( OptionBuilder.withLongOpt( "update-snapshots" ).withDescription( "Forces a check for missing releases and updated snapshots on remote repositories" ).create( UPDATE_SNAPSHOTS ) );
+ options.addOption( OptionBuilder.withLongOpt( "activate-profiles" ).withDescription( "Comma-delimited list of profiles to activate" ).hasArg().create( ACTIVATE_PROFILES ) );
+ options.addOption( OptionBuilder.withLongOpt( "batch-mode" ).withDescription( "Run in non-interactive (batch) mode" ).create( BATCH_MODE ) );
+ options.addOption( OptionBuilder.withLongOpt( "no-snapshot-updates" ).withDescription( "Suppress SNAPSHOT updates" ).create( SUPRESS_SNAPSHOT_UPDATES ) );
+ options.addOption( OptionBuilder.withLongOpt( "strict-checksums" ).withDescription( "Fail the build if checksums don't match" ).create( CHECKSUM_FAILURE_POLICY ) );
+ options.addOption( OptionBuilder.withLongOpt( "lax-checksums" ).withDescription( "Warn if checksums don't match" ).create( CHECKSUM_WARNING_POLICY ) );
+ options.addOption( OptionBuilder.withLongOpt( "settings" ).withDescription( "Alternate path for the user settings file" ).hasArg().create( ALTERNATE_USER_SETTINGS ) );
+ options.addOption( OptionBuilder.withLongOpt( "global-settings" ).withDescription( "Alternate path for the global settings file" ).hasArg().create( ALTERNATE_GLOBAL_SETTINGS ) );
+ options.addOption( OptionBuilder.withLongOpt( "toolchains" ).withDescription( "Alternate path for the user toolchains file" ).hasArg().create( ALTERNATE_USER_TOOLCHAINS ) );
+ options.addOption( OptionBuilder.withLongOpt( "global-toolchains" ).withDescription( "Alternate path for the global toolchains file" ).hasArg().create( ALTERNATE_GLOBAL_TOOLCHAINS ) );
+ options.addOption( OptionBuilder.withLongOpt( "fail-fast" ).withDescription( "Stop at first failure in reactorized builds" ).create( FAIL_FAST ) );
+ options.addOption( OptionBuilder.withLongOpt( "fail-at-end" ).withDescription( "Only fail the build afterwards; allow all non-impacted builds to continue" ).create( FAIL_AT_END ) );
+ options.addOption( OptionBuilder.withLongOpt( "fail-never" ).withDescription( "NEVER fail the build, regardless of project result" ).create( FAIL_NEVER ) );
+ options.addOption( OptionBuilder.withLongOpt( "resume-from" ).hasArg().withDescription( "Resume reactor from specified project" ).create( RESUME_FROM ) );
+ options.addOption( OptionBuilder.withLongOpt( "projects" ).withDescription( "Comma-delimited list of specified reactor projects to build instead of all projects. A project can be specified by [groupId]:artifactId or by its relative path." ).hasArg().create( PROJECT_LIST ) );
+ options.addOption( OptionBuilder.withLongOpt( "also-make" ).withDescription( "If project list is specified, also build projects required by the list" ).create( ALSO_MAKE ) );
+ options.addOption( OptionBuilder.withLongOpt( "also-make-dependents" ).withDescription( "If project list is specified, also build projects that depend on projects on the list" ).create( ALSO_MAKE_DEPENDENTS ) );
+ options.addOption( OptionBuilder.withLongOpt( "log-file" ).hasArg().withDescription( "Log file to where all build output will go." ).create( LOG_FILE ) );
+ options.addOption( OptionBuilder.withLongOpt( "show-version" ).withDescription( "Display version information WITHOUT stopping build" ).create( SHOW_VERSION ) );
+ options.addOption( OptionBuilder.withLongOpt( "encrypt-master-password" ).hasOptionalArg().withDescription( "Encrypt master security password" ).create( ENCRYPT_MASTER_PASSWORD ) );
+ options.addOption( OptionBuilder.withLongOpt( "encrypt-password" ).hasOptionalArg().withDescription( "Encrypt server password" ).create( ENCRYPT_PASSWORD ) );
+ options.addOption( OptionBuilder.withLongOpt( "threads" ).hasArg().withDescription( "Thread count, for instance 2.0C where C is core multiplied" ).create( THREADS ) );
+ options.addOption( OptionBuilder.withLongOpt( "legacy-local-repository" ).withDescription( "Use Maven 2 Legacy Local Repository behaviour, ie no use of _remote.repositories. Can also be activated by using -Dmaven.legacyLocalRepo=true" ).create( LEGACY_LOCAL_REPOSITORY ) );
+ options.addOption( OptionBuilder.withLongOpt( "builder" ).hasArg().withDescription( "The id of the build strategy to use." ).create( BUILDER ) );
+
+ // Adding this back in for compatibility with the verifier that hard codes this option.
+ options.addOption( OptionBuilder.withLongOpt( "no-plugin-registry" ).withDescription( "Ineffective, only kept for backward compatibility" ).create( "npr" ) );
+ options.addOption( OptionBuilder.withLongOpt( "check-plugin-updates" ).withDescription( "Ineffective, only kept for backward compatibility" ).create( "cpu" ) );
+ options.addOption( OptionBuilder.withLongOpt( "update-plugins" ).withDescription( "Ineffective, only kept for backward compatibility" ).create( "up" ) );
+ options.addOption( OptionBuilder.withLongOpt( "no-plugin-updates" ).withDescription( "Ineffective, only kept for backward compatibility" ).create( "npu" ) );
+ }
+
+ public CommandLine parse( String[] args )
+ throws ParseException
+ {
+ // We need to eat any quotes surrounding arguments...
+ String[] cleanArgs = cleanArgs( args );
+
+ CommandLineParser parser = new GnuParser();
+
+ return parser.parse( options, cleanArgs );
+ }
+
+ private String[] cleanArgs( String[] args )
+ {
+ List<String> cleaned = new ArrayList<String>();
+
+ StringBuilder currentArg = null;
+
+ for ( String arg : args )
+ {
+ boolean addedToBuffer = false;
+
+ if ( arg.startsWith( "\"" ) )
+ {
+ // if we're in the process of building up another arg, push it and start over.
+ // this is for the case: "-Dfoo=bar "-Dfoo2=bar two" (note the first unterminated quote)
+ if ( currentArg != null )
+ {
+ cleaned.add( currentArg.toString() );
+ }
+
+ // start building an argument here.
+ currentArg = new StringBuilder( arg.substring( 1 ) );
+ addedToBuffer = true;
+ }
+
+ // this has to be a separate "if" statement, to capture the case of: "-Dfoo=bar"
+ if ( arg.endsWith( "\"" ) )
+ {
+ String cleanArgPart = arg.substring( 0, arg.length() - 1 );
+
+ // if we're building an argument, keep doing so.
+ if ( currentArg != null )
+ {
+ // if this is the case of "-Dfoo=bar", then we need to adjust the buffer.
+ if ( addedToBuffer )
+ {
+ currentArg.setLength( currentArg.length() - 1 );
+ }
+ // otherwise, we trim the trailing " and append to the buffer.
+ else
+ {
+ // TODO: introducing a space here...not sure what else to do but collapse whitespace
+ currentArg.append( ' ' ).append( cleanArgPart );
+ }
+
+ cleaned.add( currentArg.toString() );
+ }
+ else
+ {
+ cleaned.add( cleanArgPart );
+ }
+
+ currentArg = null;
+
+ continue;
+ }
+
+ // if we haven't added this arg to the buffer, and we ARE building an argument
+ // buffer, then append it with a preceding space...again, not sure what else to
+ // do other than collapse whitespace.
+ // NOTE: The case of a trailing quote is handled by nullifying the arg buffer.
+ if ( !addedToBuffer )
+ {
+ if ( currentArg != null )
+ {
+ currentArg.append( ' ' ).append( arg );
+ }
+ else
+ {
+ cleaned.add( arg );
+ }
+ }
+ }
+
+ if ( currentArg != null )
+ {
+ cleaned.add( currentArg.toString() );
+ }
+
+ int cleanedSz = cleaned.size();
+
+ String[] cleanArgs;
+
+ if ( cleanedSz == 0 )
+ {
+ cleanArgs = args;
+ }
+ else
+ {
+ cleanArgs = cleaned.toArray( new String[cleanedSz] );
+ }
+
+ return cleanArgs;
+ }
+
+ public void displayHelp( PrintStream stdout )
+ {
+ stdout.println();
+
+ PrintWriter pw = new PrintWriter( stdout );
+
+ HelpFormatter formatter = new HelpFormatter();
+
+ formatter.printHelp( pw, HelpFormatter.DEFAULT_WIDTH, "mvn [options] [<goal(s)>] [<phase(s)>]", "\nOptions:",
+ options, HelpFormatter.DEFAULT_LEFT_PAD, HelpFormatter.DEFAULT_DESC_PAD, "\n", false );
+
+ pw.flush();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java
new file mode 100644
index 00000000..07863b72
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java
@@ -0,0 +1,205 @@
+package org.apache.maven.cli;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Date;
+import java.util.Locale;
+import java.util.Properties;
+import java.util.TimeZone;
+
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.Os;
+import org.slf4j.Logger;
+
+/**
+ * Utility class used to report errors, statistics, application version info, etc.
+ *
+ * @author jdcasey
+ *
+ */
+public final class CLIReportingUtils
+{
+ // CHECKSTYLE_OFF: MagicNumber
+ public static final long MB = 1024 * 1024;
+
+ private static final long ONE_SECOND = 1000L;
+ private static final long ONE_MINUTE = 60 * ONE_SECOND;
+ private static final long ONE_HOUR = 60 * ONE_MINUTE;
+ private static final long ONE_DAY = 24 * ONE_HOUR;
+ // CHECKSTYLE_ON: MagicNumber
+
+ public static final String BUILD_VERSION_PROPERTY = "version";
+
+ public static String showVersion()
+ {
+ final String ls = System.getProperty( "line.separator" );
+ Properties properties = getBuildProperties();
+ StringBuilder version = new StringBuilder();
+ version.append( createMavenVersionString( properties ) ).append( ls );
+ version.append( reduce( properties.getProperty( "distributionShortName" ) + " home: "
+ + System.getProperty( "maven.home", "<unknown maven home>" ) ) ).append( ls );
+ version.append( "Java version: " ).append(
+ System.getProperty( "java.version", "<unknown java version>" ) ).append( ", vendor: " ).append(
+ System.getProperty( "java.vendor", "<unknown vendor>" ) ).append( ls );
+ version.append( "Java home: " ).append( System.getProperty( "java.home", "<unknown java home>" ) ).append( ls );
+ version.append( "Default locale: " ).append( Locale.getDefault() ).append( ", platform encoding: " ).append(
+ System.getProperty( "file.encoding", "<unknown encoding>" ) ).append( ls );
+ version.append( "OS name: \"" ).append( Os.OS_NAME ).append( "\", version: \"" ).append( Os.OS_VERSION ).append(
+ "\", arch: \"" ).append( Os.OS_ARCH ).append( "\", family: \"" ).append( Os.OS_FAMILY ).append( "\"" );
+ return version.toString();
+ }
+
+ /**
+ * Create a human readable string containing the Maven version, buildnumber, and time of build
+ *
+ * @param buildProperties The build properties
+ * @return Readable build info
+ */
+ static String createMavenVersionString( Properties buildProperties )
+ {
+ String timestamp = reduce( buildProperties.getProperty( "timestamp" ) );
+ String version = reduce( buildProperties.getProperty( BUILD_VERSION_PROPERTY ) );
+ String rev = reduce( buildProperties.getProperty( "buildNumber" ) );
+ String distributionName = reduce( buildProperties.getProperty( "distributionName" ) );
+
+ String msg = distributionName + " ";
+ msg += ( version != null ? version : "<version unknown>" );
+ if ( rev != null || timestamp != null )
+ {
+ msg += " (";
+ msg += ( rev != null ? rev : "" );
+ if ( timestamp != null )
+ {
+ String ts = formatTimestamp( Long.valueOf( timestamp ) );
+ msg += ( rev != null ? "; " : "" ) + ts;
+ }
+ msg += ")";
+ }
+ return msg;
+ }
+
+ private static String reduce( String s )
+ {
+ return ( s != null ? ( s.startsWith( "${" ) && s.endsWith( "}" ) ? null : s ) : null );
+ }
+
+ static Properties getBuildProperties()
+ {
+ Properties properties = new Properties();
+ InputStream resourceAsStream = null;
+ try
+ {
+ resourceAsStream = MavenCli.class.getResourceAsStream( "/org/apache/maven/messages/build.properties" );
+
+ if ( resourceAsStream != null )
+ {
+ properties.load( resourceAsStream );
+ }
+ }
+ catch ( IOException e )
+ {
+ System.err.println( "Unable determine version from JAR file: " + e.getMessage() );
+ }
+ finally
+ {
+ IOUtil.close( resourceAsStream );
+ }
+
+ return properties;
+ }
+
+ public static void showError( Logger logger, String message, Throwable e, boolean showStackTrace )
+ {
+ if ( showStackTrace )
+ {
+ logger.error( message, e );
+ }
+ else
+ {
+ logger.error( message );
+
+ if ( e != null )
+ {
+ logger.error( e.getMessage() );
+
+ for ( Throwable cause = e.getCause(); cause != null; cause = cause.getCause() )
+ {
+ logger.error( "Caused by: " + cause.getMessage() );
+ }
+ }
+ }
+ }
+
+ public static String formatTimestamp( long timestamp )
+ {
+ // Manual construction of the tz offset because only Java 7 is aware of ISO 8601 time zones
+ TimeZone tz = TimeZone.getDefault();
+ int offset = tz.getRawOffset();
+
+ // Raw offset ignores DST, so check if we are in DST now and add the offset
+ if ( tz.inDaylightTime( new Date( timestamp ) ) )
+ {
+ offset += tz.getDSTSavings();
+ }
+
+ // CHECKSTYLE_OFF: MagicNumber
+ long m = Math.abs( ( offset / ONE_MINUTE ) % 60 );
+ long h = Math.abs( ( offset / ONE_HOUR ) % 24 );
+ // CHECKSTYLE_ON: MagicNumber
+
+ int offsetDir = (int) Math.signum( (float) offset );
+ char offsetSign = offsetDir >= 0 ? '+' : '-';
+ return String.format( "%tFT%<tT%s%02d:%02d", timestamp, offsetSign, h, m );
+ }
+
+ public static String formatDuration( long duration )
+ {
+ // CHECKSTYLE_OFF: MagicNumber
+ long ms = duration % 1000;
+ long s = ( duration / ONE_SECOND ) % 60;
+ long m = ( duration / ONE_MINUTE ) % 60;
+ long h = ( duration / ONE_HOUR ) % 24;
+ long d = duration / ONE_DAY;
+ // CHECKSTYLE_ON: MagicNumber
+
+ String format;
+ if ( d > 0 )
+ {
+ format = "%d d %02d:%02d h";
+ }
+ else if ( h > 0 )
+ {
+ format = "%2$02d:%3$02d h";
+ }
+ else if ( m > 0 )
+ {
+ format = "%3$02d:%4$02d min";
+ }
+ else
+ {
+ format = "%4$d.%5$03d s";
+ }
+
+ return String.format( format, d, h, m, s, ms );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/CliRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/CliRequest.java
new file mode 100644
index 00000000..4656dd37
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/CliRequest.java
@@ -0,0 +1,120 @@
+package org.apache.maven.cli;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Properties;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.codehaus.plexus.classworlds.ClassWorld;
+
+public class CliRequest
+{
+ String[] args;
+
+ CommandLine commandLine;
+
+ ClassWorld classWorld;
+
+ String workingDirectory;
+
+ File multiModuleProjectDirectory;
+
+ boolean debug;
+
+ boolean quiet;
+
+ boolean showErrors = true;
+
+ Properties userProperties = new Properties();
+
+ Properties systemProperties = new Properties();
+
+ MavenExecutionRequest request;
+
+ CliRequest( String[] args, ClassWorld classWorld )
+ {
+ this.args = args;
+ this.classWorld = classWorld;
+ this.request = new DefaultMavenExecutionRequest();
+ }
+
+ public String[] getArgs()
+ {
+ return args;
+ }
+
+ public CommandLine getCommandLine()
+ {
+ return commandLine;
+ }
+
+ public ClassWorld getClassWorld()
+ {
+ return classWorld;
+ }
+
+ public String getWorkingDirectory()
+ {
+ return workingDirectory;
+ }
+
+ public File getMultiModuleProjectDirectory()
+ {
+ return multiModuleProjectDirectory;
+ }
+
+ public boolean isDebug()
+ {
+ return debug;
+ }
+
+ public boolean isQuiet()
+ {
+ return quiet;
+ }
+
+ public boolean isShowErrors()
+ {
+ return showErrors;
+ }
+
+ public Properties getUserProperties()
+ {
+ return userProperties;
+ }
+
+ public Properties getSystemProperties()
+ {
+ return systemProperties;
+ }
+
+ public MavenExecutionRequest getRequest()
+ {
+ return request;
+ }
+
+ public void setUserProperties( Properties properties )
+ {
+ this.userProperties.putAll( properties );
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
new file mode 100644
index 00000000..39660956
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
@@ -0,0 +1,1610 @@
+package org.apache.maven.cli;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.BufferedInputStream;
+import java.io.Console;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.ParseException;
+import org.apache.commons.cli.UnrecognizedOptionException;
+import org.apache.maven.BuildAbort;
+import org.apache.maven.InternalErrorException;
+import org.apache.maven.Maven;
+import org.apache.maven.building.FileSource;
+import org.apache.maven.building.Problem;
+import org.apache.maven.building.Source;
+import org.apache.maven.cli.configuration.ConfigurationProcessor;
+import org.apache.maven.cli.configuration.SettingsXmlConfigurationProcessor;
+import org.apache.maven.cli.event.DefaultEventSpyContext;
+import org.apache.maven.cli.event.ExecutionEventLogger;
+import org.apache.maven.cli.internal.BootstrapCoreExtensionManager;
+import org.apache.maven.cli.internal.extension.model.CoreExtension;
+import org.apache.maven.cli.internal.extension.model.io.xpp3.CoreExtensionsXpp3Reader;
+import org.apache.maven.cli.logging.Slf4jConfiguration;
+import org.apache.maven.cli.logging.Slf4jConfigurationFactory;
+import org.apache.maven.cli.logging.Slf4jLoggerManager;
+import org.apache.maven.cli.logging.Slf4jStdoutLogger;
+import org.apache.maven.cli.transfer.ConsoleMavenTransferListener;
+import org.apache.maven.cli.transfer.QuietMavenTransferListener;
+import org.apache.maven.cli.transfer.Slf4jMavenTransferListener;
+import org.apache.maven.eventspy.internal.EventSpyDispatcher;
+import org.apache.maven.exception.DefaultExceptionHandler;
+import org.apache.maven.exception.ExceptionHandler;
+import org.apache.maven.exception.ExceptionSummary;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.ExecutionListener;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionRequestPopulationException;
+import org.apache.maven.execution.MavenExecutionRequestPopulator;
+import org.apache.maven.execution.MavenExecutionResult;
+import org.apache.maven.extension.internal.CoreExports;
+import org.apache.maven.extension.internal.CoreExtensionEntry;
+import org.apache.maven.lifecycle.LifecycleExecutionException;
+import org.apache.maven.model.building.ModelProcessor;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.properties.internal.EnvironmentUtils;
+import org.apache.maven.properties.internal.SystemProperties;
+import org.apache.maven.toolchain.building.DefaultToolchainsBuildingRequest;
+import org.apache.maven.toolchain.building.ToolchainsBuilder;
+import org.apache.maven.toolchain.building.ToolchainsBuildingResult;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.DefaultContainerConfiguration;
+import org.codehaus.plexus.DefaultPlexusContainer;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.classworlds.ClassWorld;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.classworlds.realm.NoSuchRealmException;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.logging.LoggerManager;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.eclipse.aether.transfer.TransferListener;
+import org.slf4j.ILoggerFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.sonatype.plexus.components.cipher.DefaultPlexusCipher;
+import org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher;
+import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
+import org.sonatype.plexus.components.sec.dispatcher.SecUtil;
+import org.sonatype.plexus.components.sec.dispatcher.model.SettingsSecurity;
+
+import com.google.common.base.Charsets;
+import com.google.common.io.Files;
+import com.google.inject.AbstractModule;
+
+// TODO: push all common bits back to plexus cli and prepare for transition to Guice. We don't need 50 ways to make CLIs
+
+/**
+ * @author Jason van Zyl
+ * @noinspection UseOfSystemOutOrSystemErr,ACCESS_STATIC_VIA_INSTANCE
+ */
+public class MavenCli
+{
+ public static final String LOCAL_REPO_PROPERTY = "maven.repo.local";
+
+ public static final String THREADS_DEPRECATED = "maven.threads.experimental";
+
+ public static final String MULTIMODULE_PROJECT_DIRECTORY = "maven.multiModuleProjectDirectory";
+
+ @SuppressWarnings( "checkstyle:constantname" )
+ public static final String userHome = System.getProperty( "user.home" );
+
+ @SuppressWarnings( "checkstyle:constantname" )
+ public static final File userMavenConfigurationHome = new File( userHome, ".m2" );
+
+ /**
+ * @deprecated use {@link SettingsXmlConfigurationProcessor#DEFAULT_USER_SETTINGS_FILE}
+ */
+ public static final File DEFAULT_USER_SETTINGS_FILE = SettingsXmlConfigurationProcessor.DEFAULT_USER_SETTINGS_FILE;
+
+ /**
+ * @deprecated use {@link SettingsXmlConfigurationProcessor#DEFAULT_GLOBAL_SETTINGS_FILE}
+ */
+ public static final File DEFAULT_GLOBAL_SETTINGS_FILE =
+ SettingsXmlConfigurationProcessor.DEFAULT_GLOBAL_SETTINGS_FILE;
+
+ public static final File DEFAULT_USER_TOOLCHAINS_FILE = new File( userMavenConfigurationHome, "toolchains.xml" );
+
+ public static final File DEFAULT_GLOBAL_TOOLCHAINS_FILE =
+ new File( System.getProperty( "maven.home", System.getProperty( "user.dir", "" ) ), "conf/toolchains.xml" );
+
+ private static final String EXT_CLASS_PATH = "maven.ext.class.path";
+
+ private static final String EXTENSIONS_FILENAME = ".mvn/extensions.xml";
+
+ private ClassWorld classWorld;
+
+ private LoggerManager plexusLoggerManager;
+
+ private ILoggerFactory slf4jLoggerFactory;
+
+ private Logger slf4jLogger;
+
+ private EventSpyDispatcher eventSpyDispatcher;
+
+ private ModelProcessor modelProcessor;
+
+ private Maven maven;
+
+ private MavenExecutionRequestPopulator executionRequestPopulator;
+
+ private ToolchainsBuilder toolchainsBuilder;
+
+ private DefaultSecDispatcher dispatcher;
+
+ private Map<String, ConfigurationProcessor> configurationProcessors;
+
+ public MavenCli()
+ {
+ this( null );
+ }
+
+ // This supports painless invocation by the Verifier during embedded execution of the core ITs
+ public MavenCli( ClassWorld classWorld )
+ {
+ this.classWorld = classWorld;
+ }
+
+ public static void main( String[] args )
+ {
+ int result = main( args, null );
+
+ System.exit( result );
+ }
+
+ /** @noinspection ConfusingMainMethod */
+ public static int main( String[] args, ClassWorld classWorld )
+ {
+ MavenCli cli = new MavenCli();
+ return cli.doMain( new CliRequest( args, classWorld ) );
+ }
+
+ // TODO: need to externalize CliRequest
+ public static int doMain( String[] args, ClassWorld classWorld )
+ {
+ MavenCli cli = new MavenCli();
+ return cli.doMain( new CliRequest( args, classWorld ) );
+ }
+
+ // This supports painless invocation by the Verifier during embedded execution of the core ITs
+ public int doMain( String[] args, String workingDirectory, PrintStream stdout, PrintStream stderr )
+ {
+ PrintStream oldout = System.out;
+ PrintStream olderr = System.err;
+
+ final Set<String> realms;
+ if ( classWorld != null )
+ {
+ realms = new HashSet<String>();
+ for ( ClassRealm realm : classWorld.getRealms() )
+ {
+ realms.add( realm.getId() );
+ }
+ }
+ else
+ {
+ realms = Collections.emptySet();
+ }
+
+ try
+ {
+ if ( stdout != null )
+ {
+ System.setOut( stdout );
+ }
+ if ( stderr != null )
+ {
+ System.setErr( stderr );
+ }
+
+ CliRequest cliRequest = new CliRequest( args, classWorld );
+ cliRequest.workingDirectory = workingDirectory;
+
+ return doMain( cliRequest );
+ }
+ finally
+ {
+ if ( classWorld != null )
+ {
+ for ( ClassRealm realm : new ArrayList<ClassRealm>( classWorld.getRealms() ) )
+ {
+ String realmId = realm.getId();
+ if ( !realms.contains( realmId ) )
+ {
+ try
+ {
+ classWorld.disposeRealm( realmId );
+ }
+ catch ( NoSuchRealmException ignored )
+ {
+ // can't happen
+ }
+ }
+ }
+ }
+ System.setOut( oldout );
+ System.setErr( olderr );
+ }
+ }
+
+ // TODO: need to externalize CliRequest
+ public int doMain( CliRequest cliRequest )
+ {
+ PlexusContainer localContainer = null;
+ try
+ {
+ initialize( cliRequest );
+ cli( cliRequest );
+ logging( cliRequest );
+ version( cliRequest );
+ properties( cliRequest );
+ localContainer = container( cliRequest );
+ commands( cliRequest );
+ configure( cliRequest );
+ toolchains( cliRequest );
+ populateRequest( cliRequest );
+ encryption( cliRequest );
+ repository( cliRequest );
+ return execute( cliRequest );
+ }
+ catch ( ExitException e )
+ {
+ return e.exitCode;
+ }
+ catch ( UnrecognizedOptionException e )
+ {
+ // pure user error, suppress stack trace
+ return 1;
+ }
+ catch ( BuildAbort e )
+ {
+ CLIReportingUtils.showError( slf4jLogger, "ABORTED", e, cliRequest.showErrors );
+
+ return 2;
+ }
+ catch ( Exception e )
+ {
+ CLIReportingUtils.showError( slf4jLogger, "Error executing Maven.", e, cliRequest.showErrors );
+
+ return 1;
+ }
+ finally
+ {
+ if ( localContainer != null )
+ {
+ localContainer.dispose();
+ }
+ }
+ }
+
+ void initialize( CliRequest cliRequest )
+ throws ExitException
+ {
+ if ( cliRequest.workingDirectory == null )
+ {
+ cliRequest.workingDirectory = System.getProperty( "user.dir" );
+ }
+
+ if ( cliRequest.multiModuleProjectDirectory == null )
+ {
+ String basedirProperty = System.getProperty( MULTIMODULE_PROJECT_DIRECTORY );
+ if ( basedirProperty == null )
+ {
+ System.err.format( "-D%s system propery is not set."
+ + " Check $M2_HOME environment variable and mvn script match.", MULTIMODULE_PROJECT_DIRECTORY );
+ throw new ExitException( 1 );
+ }
+ File basedir = basedirProperty != null ? new File( basedirProperty ) : new File( "" );
+ try
+ {
+ cliRequest.multiModuleProjectDirectory = basedir.getCanonicalFile();
+ }
+ catch ( IOException e )
+ {
+ cliRequest.multiModuleProjectDirectory = basedir.getAbsoluteFile();
+ }
+ }
+
+ //
+ // Make sure the Maven home directory is an absolute path to save us from confusion with say drive-relative
+ // Windows paths.
+ //
+ String mavenHome = System.getProperty( "maven.home" );
+
+ if ( mavenHome != null )
+ {
+ System.setProperty( "maven.home", new File( mavenHome ).getAbsolutePath() );
+ }
+ }
+
+ void cli( CliRequest cliRequest )
+ throws Exception
+ {
+ //
+ // Parsing errors can happen during the processing of the arguments and we prefer not having to check if
+ // the logger is null and construct this so we can use an SLF4J logger everywhere.
+ //
+ slf4jLogger = new Slf4jStdoutLogger();
+
+ CLIManager cliManager = new CLIManager();
+
+ List<String> args = new ArrayList<String>();
+
+ try
+ {
+ File configFile = new File( cliRequest.multiModuleProjectDirectory, ".mvn/maven.config" );
+
+ if ( configFile.isFile() )
+ {
+ for ( String arg : Files.toString( configFile, Charsets.UTF_8 ).split( "\\s+" ) )
+ {
+ args.add( arg );
+ }
+
+ CommandLine config = cliManager.parse( args.toArray( new String[args.size()] ) );
+ List<?> unrecongized = config.getArgList();
+ if ( !unrecongized.isEmpty() )
+ {
+ throw new ParseException( "Unrecognized maven.config entries: " + unrecongized );
+ }
+ }
+ }
+ catch ( ParseException e )
+ {
+ System.err.println( "Unable to parse maven.config: " + e.getMessage() );
+ cliManager.displayHelp( System.out );
+ throw e;
+ }
+
+ try
+ {
+ args.addAll( 0, Arrays.asList( cliRequest.args ) );
+ cliRequest.commandLine = cliManager.parse( args.toArray( new String[args.size()] ) );
+ }
+ catch ( ParseException e )
+ {
+ System.err.println( "Unable to parse command line options: " + e.getMessage() );
+ cliManager.displayHelp( System.out );
+ throw e;
+ }
+
+ if ( cliRequest.commandLine.hasOption( CLIManager.HELP ) )
+ {
+ cliManager.displayHelp( System.out );
+ throw new ExitException( 0 );
+ }
+
+ if ( cliRequest.commandLine.hasOption( CLIManager.VERSION ) )
+ {
+ System.out.println( CLIReportingUtils.showVersion() );
+ throw new ExitException( 0 );
+ }
+ }
+
+ /**
+ * configure logging
+ */
+ private void logging( CliRequest cliRequest )
+ {
+ cliRequest.debug = cliRequest.commandLine.hasOption( CLIManager.DEBUG );
+ cliRequest.quiet = !cliRequest.debug && cliRequest.commandLine.hasOption( CLIManager.QUIET );
+ cliRequest.showErrors = cliRequest.debug || cliRequest.commandLine.hasOption( CLIManager.ERRORS );
+
+ slf4jLoggerFactory = LoggerFactory.getILoggerFactory();
+ Slf4jConfiguration slf4jConfiguration = Slf4jConfigurationFactory.getConfiguration( slf4jLoggerFactory );
+
+ if ( cliRequest.debug )
+ {
+ cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_DEBUG );
+ slf4jConfiguration.setRootLoggerLevel( Slf4jConfiguration.Level.DEBUG );
+ }
+ else if ( cliRequest.quiet )
+ {
+ cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_ERROR );
+ slf4jConfiguration.setRootLoggerLevel( Slf4jConfiguration.Level.ERROR );
+ }
+ // else fall back to default log level specified in conf
+ // see http://jira.codehaus.org/browse/MNG-2570
+
+ if ( cliRequest.commandLine.hasOption( CLIManager.LOG_FILE ) )
+ {
+ File logFile = new File( cliRequest.commandLine.getOptionValue( CLIManager.LOG_FILE ) );
+ logFile = resolveFile( logFile, cliRequest.workingDirectory );
+
+ // redirect stdout and stderr to file
+ try
+ {
+ PrintStream ps = new PrintStream( new FileOutputStream( logFile ) );
+ System.setOut( ps );
+ System.setErr( ps );
+ }
+ catch ( FileNotFoundException e )
+ {
+ //
+ // Ignore
+ //
+ }
+ }
+
+ slf4jConfiguration.activate();
+
+ plexusLoggerManager = new Slf4jLoggerManager();
+ slf4jLogger = slf4jLoggerFactory.getLogger( this.getClass().getName() );
+ }
+
+ private void version( CliRequest cliRequest )
+ {
+ if ( cliRequest.debug || cliRequest.commandLine.hasOption( CLIManager.SHOW_VERSION ) )
+ {
+ System.out.println( CLIReportingUtils.showVersion() );
+ }
+ }
+
+ private void commands( CliRequest cliRequest )
+ {
+ if ( cliRequest.showErrors )
+ {
+ slf4jLogger.info( "Error stacktraces are turned on." );
+ }
+
+ if ( MavenExecutionRequest.CHECKSUM_POLICY_WARN.equals( cliRequest.request.getGlobalChecksumPolicy() ) )
+ {
+ slf4jLogger.info( "Disabling strict checksum verification on all artifact downloads." );
+ }
+ else if ( MavenExecutionRequest.CHECKSUM_POLICY_FAIL.equals( cliRequest.request.getGlobalChecksumPolicy() ) )
+ {
+ slf4jLogger.info( "Enabling strict checksum verification on all artifact downloads." );
+ }
+ }
+
+ private void properties( CliRequest cliRequest )
+ {
+ populateProperties( cliRequest.commandLine, cliRequest.systemProperties, cliRequest.userProperties );
+ }
+
+ private PlexusContainer container( CliRequest cliRequest )
+ throws Exception
+ {
+ if ( cliRequest.classWorld == null )
+ {
+ cliRequest.classWorld = new ClassWorld( "plexus.core", Thread.currentThread().getContextClassLoader() );
+ }
+
+ ClassRealm coreRealm = cliRequest.classWorld.getClassRealm( "plexus.core" );
+ if ( coreRealm == null )
+ {
+ coreRealm = cliRequest.classWorld.getRealms().iterator().next();
+ }
+
+ List<File> extClassPath = parseExtClasspath( cliRequest );
+
+ CoreExtensionEntry coreEntry = CoreExtensionEntry.discoverFrom( coreRealm );
+ List<CoreExtensionEntry> extensions =
+ loadCoreExtensions( cliRequest, coreRealm, coreEntry.getExportedArtifacts() );
+
+ ClassRealm containerRealm = setupContainerRealm( cliRequest.classWorld, coreRealm, extClassPath, extensions );
+
+ ContainerConfiguration cc = new DefaultContainerConfiguration()
+ .setClassWorld( cliRequest.classWorld )
+ .setRealm( containerRealm )
+ .setClassPathScanning( PlexusConstants.SCANNING_INDEX )
+ .setAutoWiring( true )
+ .setName( "maven" );
+
+ Set<String> exportedArtifacts = new HashSet<String>( coreEntry.getExportedArtifacts() );
+ Set<String> exportedPackages = new HashSet<String>( coreEntry.getExportedPackages() );
+ for ( CoreExtensionEntry extension : extensions )
+ {
+ exportedArtifacts.addAll( extension.getExportedArtifacts() );
+ exportedPackages.addAll( extension.getExportedPackages() );
+ }
+
+ final CoreExports exports = new CoreExports( containerRealm, exportedArtifacts, exportedPackages );
+
+ DefaultPlexusContainer container = new DefaultPlexusContainer( cc, new AbstractModule()
+ {
+ @Override
+ protected void configure()
+ {
+ bind( ILoggerFactory.class ).toInstance( slf4jLoggerFactory );
+ bind( CoreExports.class ).toInstance( exports );
+ }
+ } );
+
+ // NOTE: To avoid inconsistencies, we'll use the TCCL exclusively for lookups
+ container.setLookupRealm( null );
+
+ container.setLoggerManager( plexusLoggerManager );
+
+ for ( CoreExtensionEntry extension : extensions )
+ {
+ container.discoverComponents( extension.getClassRealm() );
+ }
+
+ customizeContainer( container );
+
+ container.getLoggerManager().setThresholds( cliRequest.request.getLoggingLevel() );
+
+ Thread.currentThread().setContextClassLoader( container.getContainerRealm() );
+
+ eventSpyDispatcher = container.lookup( EventSpyDispatcher.class );
+
+ DefaultEventSpyContext eventSpyContext = new DefaultEventSpyContext();
+ Map<String, Object> data = eventSpyContext.getData();
+ data.put( "plexus", container );
+ data.put( "workingDirectory", cliRequest.workingDirectory );
+ data.put( "systemProperties", cliRequest.systemProperties );
+ data.put( "userProperties", cliRequest.userProperties );
+ data.put( "versionProperties", CLIReportingUtils.getBuildProperties() );
+ eventSpyDispatcher.init( eventSpyContext );
+
+ // refresh logger in case container got customized by spy
+ slf4jLogger = slf4jLoggerFactory.getLogger( this.getClass().getName() );
+
+ maven = container.lookup( Maven.class );
+
+ executionRequestPopulator = container.lookup( MavenExecutionRequestPopulator.class );
+
+ modelProcessor = createModelProcessor( container );
+
+ configurationProcessors = container.lookupMap( ConfigurationProcessor.class );
+
+ toolchainsBuilder = container.lookup( ToolchainsBuilder.class );
+
+ dispatcher = (DefaultSecDispatcher) container.lookup( SecDispatcher.class, "maven" );
+
+ return container;
+ }
+
+ private List<CoreExtensionEntry> loadCoreExtensions( CliRequest cliRequest, ClassRealm containerRealm,
+ Set<String> providedArtifacts )
+ {
+ if ( cliRequest.multiModuleProjectDirectory == null )
+ {
+ return Collections.emptyList();
+ }
+
+ File extensionsFile = new File( cliRequest.multiModuleProjectDirectory, EXTENSIONS_FILENAME );
+ if ( !extensionsFile.isFile() )
+ {
+ return Collections.emptyList();
+ }
+
+ try
+ {
+ List<CoreExtension> extensions = readCoreExtensionsDescriptor( extensionsFile );
+ if ( extensions.isEmpty() )
+ {
+ return Collections.emptyList();
+ }
+
+ ContainerConfiguration cc = new DefaultContainerConfiguration() //
+ .setClassWorld( cliRequest.classWorld ) //
+ .setRealm( containerRealm ) //
+ .setClassPathScanning( PlexusConstants.SCANNING_INDEX ) //
+ .setAutoWiring( true ) //
+ .setName( "maven" );
+
+ DefaultPlexusContainer container = new DefaultPlexusContainer( cc, new AbstractModule()
+ {
+ @Override
+ protected void configure()
+ {
+ bind( ILoggerFactory.class ).toInstance( slf4jLoggerFactory );
+ }
+ } );
+
+ try
+ {
+ container.setLookupRealm( null );
+
+ container.setLoggerManager( plexusLoggerManager );
+
+ container.getLoggerManager().setThresholds( cliRequest.request.getLoggingLevel() );
+
+ Thread.currentThread().setContextClassLoader( container.getContainerRealm() );
+
+ executionRequestPopulator = container.lookup( MavenExecutionRequestPopulator.class );
+
+ configurationProcessors = container.lookupMap( ConfigurationProcessor.class );
+
+ configure( cliRequest );
+
+ MavenExecutionRequest request = DefaultMavenExecutionRequest.copy( cliRequest.request );
+
+ request = populateRequest( cliRequest, request );
+
+ request = executionRequestPopulator.populateDefaults( request );
+
+ BootstrapCoreExtensionManager resolver = container.lookup( BootstrapCoreExtensionManager.class );
+
+ return resolver.loadCoreExtensions( request, providedArtifacts, extensions );
+ }
+ finally
+ {
+ executionRequestPopulator = null;
+ container.dispose();
+ }
+ }
+ catch ( RuntimeException e )
+ {
+ // runtime exceptions are most likely bugs in maven, let them bubble up to the user
+ throw e;
+ }
+ catch ( Exception e )
+ {
+ slf4jLogger.warn( "Failed to read extensions descriptor " + extensionsFile + ": " + e.getMessage() );
+ }
+ return Collections.emptyList();
+ }
+
+ private List<CoreExtension> readCoreExtensionsDescriptor( File extensionsFile )
+ throws IOException, XmlPullParserException
+ {
+ CoreExtensionsXpp3Reader parser = new CoreExtensionsXpp3Reader();
+ InputStream is = null;
+ try
+ {
+ is = new BufferedInputStream( new FileInputStream( extensionsFile ) );
+ return parser.read( is ).getExtensions();
+ }
+ finally
+ {
+ IOUtil.close( is );
+ }
+ }
+
+ private ClassRealm setupContainerRealm( ClassWorld classWorld, ClassRealm coreRealm, List<File> extClassPath,
+ List<CoreExtensionEntry> extensions )
+ throws Exception
+ {
+ if ( !extClassPath.isEmpty() || !extensions.isEmpty() )
+ {
+ ClassRealm extRealm = classWorld.newRealm( "maven.ext", null );
+
+ extRealm.setParentRealm( coreRealm );
+
+ slf4jLogger.debug( "Populating class realm " + extRealm.getId() );
+
+ for ( File file : extClassPath )
+ {
+ slf4jLogger.debug( " Included " + file );
+
+ extRealm.addURL( file.toURI().toURL() );
+ }
+
+ for ( CoreExtensionEntry entry : reverse( extensions ) )
+ {
+ Set<String> exportedPackages = entry.getExportedPackages();
+ ClassRealm realm = entry.getClassRealm();
+ for ( String exportedPackage : exportedPackages )
+ {
+ extRealm.importFrom( realm, exportedPackage );
+ }
+ if ( exportedPackages.isEmpty() )
+ {
+ // sisu uses realm imports to establish component visibility
+ extRealm.importFrom( realm, realm.getId() );
+ }
+ }
+
+ return extRealm;
+ }
+
+ return coreRealm;
+ }
+
+ private static <T> List<T> reverse( List<T> list )
+ {
+ List<T> copy = new ArrayList<T>( list );
+ Collections.reverse( copy );
+ return copy;
+ }
+
+ private List<File> parseExtClasspath( CliRequest cliRequest )
+ {
+ String extClassPath = cliRequest.userProperties.getProperty( EXT_CLASS_PATH );
+ if ( extClassPath == null )
+ {
+ extClassPath = cliRequest.systemProperties.getProperty( EXT_CLASS_PATH );
+ }
+
+ List<File> jars = new ArrayList<File>();
+
+ if ( StringUtils.isNotEmpty( extClassPath ) )
+ {
+ for ( String jar : StringUtils.split( extClassPath, File.pathSeparator ) )
+ {
+ File file = resolveFile( new File( jar ), cliRequest.workingDirectory );
+
+ slf4jLogger.debug( " Included " + file );
+
+ jars.add( file );
+ }
+ }
+
+ return jars;
+ }
+
+ //
+ // This should probably be a separate tool and not be baked into Maven.
+ //
+ private void encryption( CliRequest cliRequest )
+ throws Exception
+ {
+ if ( cliRequest.commandLine.hasOption( CLIManager.ENCRYPT_MASTER_PASSWORD ) )
+ {
+ String passwd = cliRequest.commandLine.getOptionValue( CLIManager.ENCRYPT_MASTER_PASSWORD );
+
+ if ( passwd == null )
+ {
+ Console cons = System.console();
+ char[] password = ( cons == null ) ? null : cons.readPassword( "Master password: " );
+ if ( password != null )
+ {
+ // Cipher uses Strings
+ passwd = String.copyValueOf( password );
+
+ // Sun/Oracle advises to empty the char array
+ java.util.Arrays.fill( password, ' ' );
+ }
+ }
+
+ DefaultPlexusCipher cipher = new DefaultPlexusCipher();
+
+ System.out.println( cipher.encryptAndDecorate( passwd,
+ DefaultSecDispatcher.SYSTEM_PROPERTY_SEC_LOCATION ) );
+
+ throw new ExitException( 0 );
+ }
+ else if ( cliRequest.commandLine.hasOption( CLIManager.ENCRYPT_PASSWORD ) )
+ {
+ String passwd = cliRequest.commandLine.getOptionValue( CLIManager.ENCRYPT_PASSWORD );
+
+ if ( passwd == null )
+ {
+ Console cons = System.console();
+ char[] password = ( cons == null ) ? null : cons.readPassword( "Password: " );
+ if ( password != null )
+ {
+ // Cipher uses Strings
+ passwd = String.copyValueOf( password );
+
+ // Sun/Oracle advises to empty the char array
+ java.util.Arrays.fill( password, ' ' );
+ }
+ }
+
+ String configurationFile = dispatcher.getConfigurationFile();
+
+ if ( configurationFile.startsWith( "~" ) )
+ {
+ configurationFile = System.getProperty( "user.home" ) + configurationFile.substring( 1 );
+ }
+
+ String file = System.getProperty( DefaultSecDispatcher.SYSTEM_PROPERTY_SEC_LOCATION, configurationFile );
+
+ String master = null;
+
+ SettingsSecurity sec = SecUtil.read( file, true );
+ if ( sec != null )
+ {
+ master = sec.getMaster();
+ }
+
+ if ( master == null )
+ {
+ throw new IllegalStateException( "Master password is not set in the setting security file: " + file );
+ }
+
+ DefaultPlexusCipher cipher = new DefaultPlexusCipher();
+ String masterPasswd = cipher.decryptDecorated( master, DefaultSecDispatcher.SYSTEM_PROPERTY_SEC_LOCATION );
+ System.out.println( cipher.encryptAndDecorate( passwd, masterPasswd ) );
+
+ throw new ExitException( 0 );
+ }
+ }
+
+ private void repository( CliRequest cliRequest )
+ throws Exception
+ {
+ if ( cliRequest.commandLine.hasOption( CLIManager.LEGACY_LOCAL_REPOSITORY )
+ || Boolean.getBoolean( "maven.legacyLocalRepo" ) )
+ {
+ cliRequest.request.setUseLegacyLocalRepository( true );
+ }
+ }
+
+ private int execute( CliRequest cliRequest ) throws MavenExecutionRequestPopulationException
+ {
+ MavenExecutionRequest request = executionRequestPopulator.populateDefaults( cliRequest.request );
+
+ eventSpyDispatcher.onEvent( request );
+
+ MavenExecutionResult result = maven.execute( request );
+
+ eventSpyDispatcher.onEvent( result );
+
+ eventSpyDispatcher.close();
+
+ if ( result.hasExceptions() )
+ {
+ ExceptionHandler handler = new DefaultExceptionHandler();
+
+ Map<String, String> references = new LinkedHashMap<String, String>();
+
+ MavenProject project = null;
+
+ for ( Throwable exception : result.getExceptions() )
+ {
+ ExceptionSummary summary = handler.handleException( exception );
+
+ logSummary( summary, references, "", cliRequest.showErrors );
+
+ if ( project == null && exception instanceof LifecycleExecutionException )
+ {
+ project = ( (LifecycleExecutionException) exception ).getProject();
+ }
+ }
+
+ slf4jLogger.error( "" );
+
+ if ( !cliRequest.showErrors )
+ {
+ slf4jLogger.error( "To see the full stack trace of the errors, re-run Maven with the -e switch." );
+ }
+ if ( !slf4jLogger.isDebugEnabled() )
+ {
+ slf4jLogger.error( "Re-run Maven using the -X switch to enable full debug logging." );
+ }
+
+ if ( !references.isEmpty() )
+ {
+ slf4jLogger.error( "" );
+ slf4jLogger.error( "For more information about the errors and possible solutions"
+ + ", please read the following articles:" );
+
+ for ( Map.Entry<String, String> entry : references.entrySet() )
+ {
+ slf4jLogger.error( entry.getValue() + " " + entry.getKey() );
+ }
+ }
+
+ if ( project != null && !project.equals( result.getTopologicallySortedProjects().get( 0 ) ) )
+ {
+ slf4jLogger.error( "" );
+ slf4jLogger.error( "After correcting the problems, you can resume the build with the command" );
+ slf4jLogger.error( " mvn <goals> -rf :" + project.getArtifactId() );
+ }
+
+ if ( MavenExecutionRequest.REACTOR_FAIL_NEVER.equals( cliRequest.request.getReactorFailureBehavior() ) )
+ {
+ slf4jLogger.info( "Build failures were ignored." );
+
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+ }
+ else
+ {
+ return 0;
+ }
+ }
+
+ private void logSummary( ExceptionSummary summary, Map<String, String> references, String indent,
+ boolean showErrors )
+ {
+ String referenceKey = "";
+
+ if ( StringUtils.isNotEmpty( summary.getReference() ) )
+ {
+ referenceKey = references.get( summary.getReference() );
+ if ( referenceKey == null )
+ {
+ referenceKey = "[Help " + ( references.size() + 1 ) + "]";
+ references.put( summary.getReference(), referenceKey );
+ }
+ }
+
+ String msg = summary.getMessage();
+
+ if ( StringUtils.isNotEmpty( referenceKey ) )
+ {
+ if ( msg.indexOf( '\n' ) < 0 )
+ {
+ msg += " -> " + referenceKey;
+ }
+ else
+ {
+ msg += "\n-> " + referenceKey;
+ }
+ }
+
+ String[] lines = msg.split( "(\r\n)|(\r)|(\n)" );
+
+ for ( int i = 0; i < lines.length; i++ )
+ {
+ String line = indent + lines[i].trim();
+
+ if ( ( i == lines.length - 1 )
+ && ( showErrors || ( summary.getException() instanceof InternalErrorException ) ) )
+ {
+ slf4jLogger.error( line, summary.getException() );
+ }
+ else
+ {
+ slf4jLogger.error( line );
+ }
+ }
+
+ indent += " ";
+
+ for ( ExceptionSummary child : summary.getChildren() )
+ {
+ logSummary( child, references, indent, showErrors );
+ }
+ }
+
+ @SuppressWarnings( "checkstyle:methodlength" )
+ private void configure( CliRequest cliRequest )
+ throws Exception
+ {
+ //
+ // This is not ideal but there are events specifically for configuration from the CLI which I don't
+ // believe are really valid but there are ITs which assert the right events are published so this
+ // needs to be supported so the EventSpyDispatcher needs to be put in the CliRequest so that
+ // it can be accessed by configuration processors.
+ //
+ cliRequest.request.setEventSpyDispatcher( eventSpyDispatcher );
+
+ //
+ // We expect at most 2 implementations to be available. The SettingsXmlConfigurationProcessor implementation
+ // is always available in the core and likely always will be, but we may have another ConfigurationProcessor
+ // present supplied by the user. The rule is that we only allow the execution of one ConfigurationProcessor.
+ // If there is more than one then we execute the one supplied by the user, otherwise we execute the
+ // the default SettingsXmlConfigurationProcessor.
+ //
+ int userSuppliedConfigurationProcessorCount = configurationProcessors.size() - 1;
+
+ if ( userSuppliedConfigurationProcessorCount == 0 )
+ {
+ //
+ // Our settings.xml source is historically how we have configured Maven from the CLI so we are going to
+ // have to honour its existence forever. So let's run it.
+ //
+ configurationProcessors.get( SettingsXmlConfigurationProcessor.HINT ).process( cliRequest );
+ }
+ else if ( userSuppliedConfigurationProcessorCount == 1 )
+ {
+ //
+ // Run the user supplied ConfigurationProcessor
+ //
+ for ( Entry<String, ConfigurationProcessor> entry : configurationProcessors.entrySet() )
+ {
+ String hint = entry.getKey();
+ if ( !hint.equals( SettingsXmlConfigurationProcessor.HINT ) )
+ {
+ ConfigurationProcessor configurationProcessor = entry.getValue();
+ configurationProcessor.process( cliRequest );
+ }
+ }
+ }
+ else if ( userSuppliedConfigurationProcessorCount > 1 )
+ {
+ //
+ // There are too many ConfigurationProcessors so we don't know which one to run so report the error.
+ //
+ StringBuffer sb = new StringBuffer(
+ String.format( "\nThere can only be one user supplied ConfigurationProcessor, there are %s:\n\n",
+ userSuppliedConfigurationProcessorCount ) );
+ for ( Entry<String, ConfigurationProcessor> entry : configurationProcessors.entrySet() )
+ {
+ String hint = entry.getKey();
+ if ( !hint.equals( SettingsXmlConfigurationProcessor.HINT ) )
+ {
+ ConfigurationProcessor configurationProcessor = entry.getValue();
+ sb.append( String.format( "%s\n", configurationProcessor.getClass().getName() ) );
+ }
+ }
+ sb.append( String.format( "\n" ) );
+ throw new Exception( sb.toString() );
+ }
+ }
+
+ @SuppressWarnings( "checkstyle:methodlength" )
+ private void toolchains( CliRequest cliRequest )
+ throws Exception
+ {
+ File userToolchainsFile;
+
+ if ( cliRequest.commandLine.hasOption( CLIManager.ALTERNATE_USER_TOOLCHAINS ) )
+ {
+ userToolchainsFile =
+ new File( cliRequest.commandLine.getOptionValue( CLIManager.ALTERNATE_USER_TOOLCHAINS ) );
+ userToolchainsFile = resolveFile( userToolchainsFile, cliRequest.workingDirectory );
+
+ if ( !userToolchainsFile.isFile() )
+ {
+ throw new FileNotFoundException( "The specified user toolchains file does not exist: "
+ + userToolchainsFile );
+ }
+ }
+ else
+ {
+ userToolchainsFile = DEFAULT_USER_TOOLCHAINS_FILE;
+ }
+
+ File globalToolchainsFile;
+
+ if ( cliRequest.commandLine.hasOption( CLIManager.ALTERNATE_GLOBAL_TOOLCHAINS ) )
+ {
+ globalToolchainsFile =
+ new File( cliRequest.commandLine.getOptionValue( CLIManager.ALTERNATE_GLOBAL_TOOLCHAINS ) );
+ globalToolchainsFile = resolveFile( globalToolchainsFile, cliRequest.workingDirectory );
+
+ if ( !globalToolchainsFile.isFile() )
+ {
+ throw new FileNotFoundException( "The specified global toolchains file does not exist: "
+ + globalToolchainsFile );
+ }
+ }
+ else
+ {
+ globalToolchainsFile = DEFAULT_GLOBAL_TOOLCHAINS_FILE;
+ }
+
+ cliRequest.request.setGlobalToolchainsFile( globalToolchainsFile );
+ cliRequest.request.setUserToolchainsFile( userToolchainsFile );
+
+ DefaultToolchainsBuildingRequest toolchainsRequest = new DefaultToolchainsBuildingRequest();
+ if ( globalToolchainsFile.isFile() )
+ {
+ toolchainsRequest.setGlobalToolchainsSource( new FileSource( globalToolchainsFile ) );
+ }
+ if ( userToolchainsFile.isFile() )
+ {
+ toolchainsRequest.setUserToolchainsSource( new FileSource( userToolchainsFile ) );
+ }
+
+ eventSpyDispatcher.onEvent( toolchainsRequest );
+
+ slf4jLogger.debug( "Reading global toolchains from "
+ + getLocation( toolchainsRequest.getGlobalToolchainsSource(), globalToolchainsFile ) );
+ slf4jLogger.debug( "Reading user toolchains from "
+ + getLocation( toolchainsRequest.getUserToolchainsSource(), userToolchainsFile ) );
+
+ ToolchainsBuildingResult toolchainsResult = toolchainsBuilder.build( toolchainsRequest );
+
+ eventSpyDispatcher.onEvent( toolchainsRequest );
+
+ executionRequestPopulator.populateFromToolchains( cliRequest.request,
+ toolchainsResult.getEffectiveToolchains() );
+
+ if ( !toolchainsResult.getProblems().isEmpty() && slf4jLogger.isWarnEnabled() )
+ {
+ slf4jLogger.warn( "" );
+ slf4jLogger.warn( "Some problems were encountered while building the effective toolchains" );
+
+ for ( Problem problem : toolchainsResult.getProblems() )
+ {
+ slf4jLogger.warn( problem.getMessage() + " @ " + problem.getLocation() );
+ }
+
+ slf4jLogger.warn( "" );
+ }
+ }
+
+ private Object getLocation( Source source, File defaultLocation )
+ {
+ if ( source != null )
+ {
+ return source.getLocation();
+ }
+ return defaultLocation;
+ }
+
+ private MavenExecutionRequest populateRequest( CliRequest cliRequest )
+ {
+ return populateRequest( cliRequest, cliRequest.request );
+ }
+
+ private MavenExecutionRequest populateRequest( CliRequest cliRequest, MavenExecutionRequest request )
+ {
+ CommandLine commandLine = cliRequest.commandLine;
+ String workingDirectory = cliRequest.workingDirectory;
+ boolean quiet = cliRequest.quiet;
+ boolean showErrors = cliRequest.showErrors;
+
+ String[] deprecatedOptions = { "up", "npu", "cpu", "npr" };
+ for ( String deprecatedOption : deprecatedOptions )
+ {
+ if ( commandLine.hasOption( deprecatedOption ) )
+ {
+ slf4jLogger.warn( "Command line option -" + deprecatedOption
+ + " is deprecated and will be removed in future Maven versions." );
+ }
+ }
+
+ // ----------------------------------------------------------------------
+ // Now that we have everything that we need we will fire up plexus and
+ // bring the maven component to life for use.
+ // ----------------------------------------------------------------------
+
+ if ( commandLine.hasOption( CLIManager.BATCH_MODE ) )
+ {
+ request.setInteractiveMode( false );
+ }
+
+ boolean noSnapshotUpdates = false;
+ if ( commandLine.hasOption( CLIManager.SUPRESS_SNAPSHOT_UPDATES ) )
+ {
+ noSnapshotUpdates = true;
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ @SuppressWarnings( "unchecked" )
+ List<String> goals = commandLine.getArgList();
+
+ boolean recursive = true;
+
+ // this is the default behavior.
+ String reactorFailureBehaviour = MavenExecutionRequest.REACTOR_FAIL_FAST;
+
+ if ( commandLine.hasOption( CLIManager.NON_RECURSIVE ) )
+ {
+ recursive = false;
+ }
+
+ if ( commandLine.hasOption( CLIManager.FAIL_FAST ) )
+ {
+ reactorFailureBehaviour = MavenExecutionRequest.REACTOR_FAIL_FAST;
+ }
+ else if ( commandLine.hasOption( CLIManager.FAIL_AT_END ) )
+ {
+ reactorFailureBehaviour = MavenExecutionRequest.REACTOR_FAIL_AT_END;
+ }
+ else if ( commandLine.hasOption( CLIManager.FAIL_NEVER ) )
+ {
+ reactorFailureBehaviour = MavenExecutionRequest.REACTOR_FAIL_NEVER;
+ }
+
+ if ( commandLine.hasOption( CLIManager.OFFLINE ) )
+ {
+ request.setOffline( true );
+ }
+
+ boolean updateSnapshots = false;
+
+ if ( commandLine.hasOption( CLIManager.UPDATE_SNAPSHOTS ) )
+ {
+ updateSnapshots = true;
+ }
+
+ String globalChecksumPolicy = null;
+
+ if ( commandLine.hasOption( CLIManager.CHECKSUM_FAILURE_POLICY ) )
+ {
+ globalChecksumPolicy = MavenExecutionRequest.CHECKSUM_POLICY_FAIL;
+ }
+ else if ( commandLine.hasOption( CLIManager.CHECKSUM_WARNING_POLICY ) )
+ {
+ globalChecksumPolicy = MavenExecutionRequest.CHECKSUM_POLICY_WARN;
+ }
+
+ File baseDirectory = new File( workingDirectory, "" ).getAbsoluteFile();
+
+ // ----------------------------------------------------------------------
+ // Profile Activation
+ // ----------------------------------------------------------------------
+
+ List<String> activeProfiles = new ArrayList<String>();
+
+ List<String> inactiveProfiles = new ArrayList<String>();
+
+ if ( commandLine.hasOption( CLIManager.ACTIVATE_PROFILES ) )
+ {
+ String[] profileOptionValues = commandLine.getOptionValues( CLIManager.ACTIVATE_PROFILES );
+ if ( profileOptionValues != null )
+ {
+ for ( String profileOptionValue : profileOptionValues )
+ {
+ StringTokenizer profileTokens = new StringTokenizer( profileOptionValue, "," );
+
+ while ( profileTokens.hasMoreTokens() )
+ {
+ String profileAction = profileTokens.nextToken().trim();
+
+ if ( profileAction.startsWith( "-" ) || profileAction.startsWith( "!" ) )
+ {
+ inactiveProfiles.add( profileAction.substring( 1 ) );
+ }
+ else if ( profileAction.startsWith( "+" ) )
+ {
+ activeProfiles.add( profileAction.substring( 1 ) );
+ }
+ else
+ {
+ activeProfiles.add( profileAction );
+ }
+ }
+ }
+ }
+ }
+
+ TransferListener transferListener;
+
+ if ( quiet )
+ {
+ transferListener = new QuietMavenTransferListener();
+ }
+ else if ( request.isInteractiveMode() && !cliRequest.commandLine.hasOption( CLIManager.LOG_FILE ) )
+ {
+ //
+ // If we're logging to a file then we don't want the console transfer listener as it will spew
+ // download progress all over the place
+ //
+ transferListener = getConsoleTransferListener();
+ }
+ else
+ {
+ transferListener = getBatchTransferListener();
+ }
+
+ ExecutionListener executionListener = new ExecutionEventLogger();
+ if ( eventSpyDispatcher != null )
+ {
+ executionListener = eventSpyDispatcher.chainListener( executionListener );
+ }
+
+ String alternatePomFile = null;
+ if ( commandLine.hasOption( CLIManager.ALTERNATE_POM_FILE ) )
+ {
+ alternatePomFile = commandLine.getOptionValue( CLIManager.ALTERNATE_POM_FILE );
+ }
+
+ File userToolchainsFile;
+ if ( commandLine.hasOption( CLIManager.ALTERNATE_USER_TOOLCHAINS ) )
+ {
+ userToolchainsFile = new File( commandLine.getOptionValue( CLIManager.ALTERNATE_USER_TOOLCHAINS ) );
+ userToolchainsFile = resolveFile( userToolchainsFile, workingDirectory );
+ }
+ else
+ {
+ userToolchainsFile = MavenCli.DEFAULT_USER_TOOLCHAINS_FILE;
+ }
+
+ request.setBaseDirectory( baseDirectory ).setGoals( goals )
+ .setSystemProperties( cliRequest.systemProperties )
+ .setUserProperties( cliRequest.userProperties )
+ .setReactorFailureBehavior( reactorFailureBehaviour ) // default: fail fast
+ .setRecursive( recursive ) // default: true
+ .setShowErrors( showErrors ) // default: false
+ .addActiveProfiles( activeProfiles ) // optional
+ .addInactiveProfiles( inactiveProfiles ) // optional
+ .setExecutionListener( executionListener )
+ .setTransferListener( transferListener ) // default: batch mode which goes along with interactive
+ .setUpdateSnapshots( updateSnapshots ) // default: false
+ .setNoSnapshotUpdates( noSnapshotUpdates ) // default: false
+ .setGlobalChecksumPolicy( globalChecksumPolicy ) // default: warn
+ .setMultiModuleProjectDirectory( cliRequest.multiModuleProjectDirectory );
+
+ if ( alternatePomFile != null )
+ {
+ File pom = resolveFile( new File( alternatePomFile ), workingDirectory );
+ if ( pom.isDirectory() )
+ {
+ pom = new File( pom, "pom.xml" );
+ }
+
+ request.setPom( pom );
+ }
+ else if ( modelProcessor != null )
+ {
+ File pom = modelProcessor.locatePom( baseDirectory );
+
+ if ( pom.isFile() )
+ {
+ request.setPom( pom );
+ }
+ }
+
+ if ( ( request.getPom() != null ) && ( request.getPom().getParentFile() != null ) )
+ {
+ request.setBaseDirectory( request.getPom().getParentFile() );
+ }
+
+ if ( commandLine.hasOption( CLIManager.RESUME_FROM ) )
+ {
+ request.setResumeFrom( commandLine.getOptionValue( CLIManager.RESUME_FROM ) );
+ }
+
+ if ( commandLine.hasOption( CLIManager.PROJECT_LIST ) )
+ {
+ String[] projectOptionValues = commandLine.getOptionValues( CLIManager.PROJECT_LIST );
+
+ List<String> inclProjects = new ArrayList<String>();
+ List<String> exclProjects = new ArrayList<String>();
+
+ if ( projectOptionValues != null )
+ {
+ for ( String projectOptionValue : projectOptionValues )
+ {
+ StringTokenizer projectTokens = new StringTokenizer( projectOptionValue, "," );
+
+ while ( projectTokens.hasMoreTokens() )
+ {
+ String projectAction = projectTokens.nextToken().trim();
+
+ if ( projectAction.startsWith( "-" ) || projectAction.startsWith( "!" ) )
+ {
+ exclProjects.add( projectAction.substring( 1 ) );
+ }
+ else if ( projectAction.startsWith( "+" ) )
+ {
+ inclProjects.add( projectAction.substring( 1 ) );
+ }
+ else
+ {
+ inclProjects.add( projectAction );
+ }
+ }
+ }
+ }
+
+ request.setSelectedProjects( inclProjects );
+ request.setExcludedProjects( exclProjects );
+ }
+
+ if ( commandLine.hasOption( CLIManager.ALSO_MAKE )
+ && !commandLine.hasOption( CLIManager.ALSO_MAKE_DEPENDENTS ) )
+ {
+ request.setMakeBehavior( MavenExecutionRequest.REACTOR_MAKE_UPSTREAM );
+ }
+ else if ( !commandLine.hasOption( CLIManager.ALSO_MAKE )
+ && commandLine.hasOption( CLIManager.ALSO_MAKE_DEPENDENTS ) )
+ {
+ request.setMakeBehavior( MavenExecutionRequest.REACTOR_MAKE_DOWNSTREAM );
+ }
+ else if ( commandLine.hasOption( CLIManager.ALSO_MAKE )
+ && commandLine.hasOption( CLIManager.ALSO_MAKE_DEPENDENTS ) )
+ {
+ request.setMakeBehavior( MavenExecutionRequest.REACTOR_MAKE_BOTH );
+ }
+
+ String localRepoProperty = request.getUserProperties().getProperty( MavenCli.LOCAL_REPO_PROPERTY );
+
+ if ( localRepoProperty == null )
+ {
+ localRepoProperty = request.getSystemProperties().getProperty( MavenCli.LOCAL_REPO_PROPERTY );
+ }
+
+ if ( localRepoProperty != null )
+ {
+ request.setLocalRepositoryPath( localRepoProperty );
+ }
+
+ request.setCacheNotFound( true );
+ request.setCacheTransferError( false );
+
+ //
+ // Builder, concurrency and parallelism
+ //
+ // We preserve the existing methods for builder selection which is to look for various inputs in the threading
+ // configuration. We don't have an easy way to allow a pluggable builder to provide its own configuration
+ // parameters but this is sufficient for now. Ultimately we want components like Builders to provide a way to
+ // extend the command line to accept its own configuration parameters.
+ //
+ final String threadConfiguration = commandLine.hasOption( CLIManager.THREADS )
+ ? commandLine.getOptionValue( CLIManager.THREADS )
+ : request.getSystemProperties().getProperty(
+ MavenCli.THREADS_DEPRECATED ); // TODO: Remove this setting. Note that the int-tests use it
+
+ if ( threadConfiguration != null )
+ {
+ //
+ // Default to the standard multithreaded builder
+ //
+ request.setBuilderId( "multithreaded" );
+
+ if ( threadConfiguration.contains( "C" ) )
+ {
+ request.setDegreeOfConcurrency( calculateDegreeOfConcurrencyWithCoreMultiplier( threadConfiguration ) );
+ }
+ else
+ {
+ request.setDegreeOfConcurrency( Integer.valueOf( threadConfiguration ) );
+ }
+ }
+
+ //
+ // Allow the builder to be overriden by the user if requested. The builders are now pluggable.
+ //
+ if ( commandLine.hasOption( CLIManager.BUILDER ) )
+ {
+ request.setBuilderId( commandLine.getOptionValue( CLIManager.BUILDER ) );
+ }
+
+ return request;
+ }
+
+ int calculateDegreeOfConcurrencyWithCoreMultiplier( String threadConfiguration )
+ {
+ int procs = Runtime.getRuntime().availableProcessors();
+ return (int) ( Float.valueOf( threadConfiguration.replace( "C", "" ) ) * procs );
+ }
+
+ static File resolveFile( File file, String workingDirectory )
+ {
+ if ( file == null )
+ {
+ return null;
+ }
+ else if ( file.isAbsolute() )
+ {
+ return file;
+ }
+ else if ( file.getPath().startsWith( File.separator ) )
+ {
+ // drive-relative Windows path
+ return file.getAbsoluteFile();
+ }
+ else
+ {
+ return new File( workingDirectory, file.getPath() ).getAbsoluteFile();
+ }
+ }
+
+ // ----------------------------------------------------------------------
+ // System properties handling
+ // ----------------------------------------------------------------------
+
+ static void populateProperties( CommandLine commandLine, Properties systemProperties, Properties userProperties )
+ {
+ EnvironmentUtils.addEnvVars( systemProperties );
+
+ // ----------------------------------------------------------------------
+ // Options that are set on the command line become system properties
+ // and therefore are set in the session properties. System properties
+ // are most dominant.
+ // ----------------------------------------------------------------------
+
+ if ( commandLine.hasOption( CLIManager.SET_SYSTEM_PROPERTY ) )
+ {
+ String[] defStrs = commandLine.getOptionValues( CLIManager.SET_SYSTEM_PROPERTY );
+
+ if ( defStrs != null )
+ {
+ for ( String defStr : defStrs )
+ {
+ setCliProperty( defStr, userProperties );
+ }
+ }
+ }
+
+ SystemProperties.addSystemProperties( systemProperties );
+
+ // ----------------------------------------------------------------------
+ // Properties containing info about the currently running version of Maven
+ // These override any corresponding properties set on the command line
+ // ----------------------------------------------------------------------
+
+ Properties buildProperties = CLIReportingUtils.getBuildProperties();
+
+ String mavenVersion = buildProperties.getProperty( CLIReportingUtils.BUILD_VERSION_PROPERTY );
+ systemProperties.setProperty( "maven.version", mavenVersion );
+
+ String mavenBuildVersion = CLIReportingUtils.createMavenVersionString( buildProperties );
+ systemProperties.setProperty( "maven.build.version", mavenBuildVersion );
+ }
+
+ private static void setCliProperty( String property, Properties properties )
+ {
+ String name;
+
+ String value;
+
+ int i = property.indexOf( "=" );
+
+ if ( i <= 0 )
+ {
+ name = property.trim();
+
+ value = "true";
+ }
+ else
+ {
+ name = property.substring( 0, i ).trim();
+
+ value = property.substring( i + 1 );
+ }
+
+ properties.setProperty( name, value );
+
+ // ----------------------------------------------------------------------
+ // I'm leaving the setting of system properties here as not to break
+ // the SystemPropertyProfileActivator. This won't harm embedding. jvz.
+ // ----------------------------------------------------------------------
+
+ System.setProperty( name, value );
+ }
+
+ static class ExitException
+ extends Exception
+ {
+ @SuppressWarnings( "checkstyle:visibilitymodifier" )
+ public int exitCode;
+
+ public ExitException( int exitCode )
+ {
+ this.exitCode = exitCode;
+ }
+ }
+
+ //
+ // Customizations available via the CLI
+ //
+
+ protected TransferListener getConsoleTransferListener()
+ {
+ return new ConsoleMavenTransferListener( System.out );
+ }
+
+ protected TransferListener getBatchTransferListener()
+ {
+ return new Slf4jMavenTransferListener();
+ }
+
+ protected void customizeContainer( PlexusContainer container )
+ {
+ }
+
+ protected ModelProcessor createModelProcessor( PlexusContainer container )
+ throws ComponentLookupException
+ {
+ return container.lookup( ModelProcessor.class );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/configuration/ConfigurationProcessor.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/configuration/ConfigurationProcessor.java
new file mode 100644
index 00000000..75fb9b91
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/configuration/ConfigurationProcessor.java
@@ -0,0 +1,28 @@
+package org.apache.maven.cli.configuration;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.cli.CliRequest;
+
+public interface ConfigurationProcessor
+{
+ void process( CliRequest request )
+ throws Exception;
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java
new file mode 100644
index 00000000..791a2267
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java
@@ -0,0 +1,290 @@
+package org.apache.maven.cli.configuration;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.List;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.bridge.MavenRepositorySystem;
+import org.apache.maven.building.Source;
+import org.apache.maven.cli.CLIManager;
+import org.apache.maven.cli.CliRequest;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionRequestPopulationException;
+import org.apache.maven.settings.Mirror;
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Repository;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.settings.SettingsUtils;
+import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
+import org.apache.maven.settings.building.SettingsBuilder;
+import org.apache.maven.settings.building.SettingsBuildingRequest;
+import org.apache.maven.settings.building.SettingsBuildingResult;
+import org.apache.maven.settings.building.SettingsProblem;
+import org.apache.maven.settings.crypto.SettingsDecrypter;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.slf4j.Logger;
+
+@Component( role = ConfigurationProcessor.class, hint = SettingsXmlConfigurationProcessor.HINT )
+public class SettingsXmlConfigurationProcessor
+ implements ConfigurationProcessor
+{
+ public static final String HINT = "settings";
+
+ public static final String USER_HOME = System.getProperty( "user.home" );
+
+ public static final File USER_MAVEN_CONFIGURATION_HOME = new File( USER_HOME, ".m2" );
+
+ public static final File DEFAULT_USER_SETTINGS_FILE = new File( USER_MAVEN_CONFIGURATION_HOME, "settings.xml" );
+
+ public static final File DEFAULT_GLOBAL_SETTINGS_FILE = new File( System.getProperty( "maven.home", System
+ .getProperty( "user.dir", "" ) ), "conf/settings.xml" );
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private SettingsBuilder settingsBuilder;
+
+ @Requirement
+ private SettingsDecrypter settingsDecrypter;
+
+ @Override
+ public void process( CliRequest cliRequest )
+ throws Exception
+ {
+ CommandLine commandLine = cliRequest.getCommandLine();
+ String workingDirectory = cliRequest.getWorkingDirectory();
+ MavenExecutionRequest request = cliRequest.getRequest();
+
+ File userSettingsFile;
+
+ if ( commandLine.hasOption( CLIManager.ALTERNATE_USER_SETTINGS ) )
+ {
+ userSettingsFile = new File( commandLine.getOptionValue( CLIManager.ALTERNATE_USER_SETTINGS ) );
+ userSettingsFile = resolveFile( userSettingsFile, workingDirectory );
+
+ if ( !userSettingsFile.isFile() )
+ {
+ throw new FileNotFoundException( "The specified user settings file does not exist: "
+ + userSettingsFile );
+ }
+ }
+ else
+ {
+ userSettingsFile = DEFAULT_USER_SETTINGS_FILE;
+ }
+
+ File globalSettingsFile;
+
+ if ( commandLine.hasOption( CLIManager.ALTERNATE_GLOBAL_SETTINGS ) )
+ {
+ globalSettingsFile = new File( commandLine.getOptionValue( CLIManager.ALTERNATE_GLOBAL_SETTINGS ) );
+ globalSettingsFile = resolveFile( globalSettingsFile, workingDirectory );
+
+ if ( !globalSettingsFile.isFile() )
+ {
+ throw new FileNotFoundException( "The specified global settings file does not exist: "
+ + globalSettingsFile );
+ }
+ }
+ else
+ {
+ globalSettingsFile = DEFAULT_GLOBAL_SETTINGS_FILE;
+ }
+
+ request.setGlobalSettingsFile( globalSettingsFile );
+ request.setUserSettingsFile( userSettingsFile );
+
+ SettingsBuildingRequest settingsRequest = new DefaultSettingsBuildingRequest();
+ settingsRequest.setGlobalSettingsFile( globalSettingsFile );
+ settingsRequest.setUserSettingsFile( userSettingsFile );
+ settingsRequest.setSystemProperties( cliRequest.getSystemProperties() );
+ settingsRequest.setUserProperties( cliRequest.getUserProperties() );
+
+ if ( request.getEventSpyDispatcher() != null )
+ {
+ request.getEventSpyDispatcher().onEvent( settingsRequest );
+ }
+
+ logger.debug( "Reading global settings from "
+ + getLocation( settingsRequest.getGlobalSettingsSource(), settingsRequest.getGlobalSettingsFile() ) );
+ logger.debug( "Reading user settings from "
+ + getLocation( settingsRequest.getUserSettingsSource(), settingsRequest.getUserSettingsFile() ) );
+
+ SettingsBuildingResult settingsResult = settingsBuilder.build( settingsRequest );
+
+ if ( request.getEventSpyDispatcher() != null )
+ {
+ request.getEventSpyDispatcher().onEvent( settingsResult );
+ }
+
+ populateFromSettings( request, settingsResult.getEffectiveSettings() );
+
+ if ( !settingsResult.getProblems().isEmpty() && logger.isWarnEnabled() )
+ {
+ logger.warn( "" );
+ logger.warn( "Some problems were encountered while building the effective settings" );
+
+ for ( SettingsProblem problem : settingsResult.getProblems() )
+ {
+ logger.warn( problem.getMessage() + " @ " + problem.getLocation() );
+ }
+ logger.warn( "" );
+ }
+ }
+
+ private MavenExecutionRequest populateFromSettings( MavenExecutionRequest request, Settings settings )
+ throws MavenExecutionRequestPopulationException
+ {
+ if ( settings == null )
+ {
+ return request;
+ }
+
+ request.setOffline( settings.isOffline() );
+
+ request.setInteractiveMode( settings.isInteractiveMode() );
+
+ request.setPluginGroups( settings.getPluginGroups() );
+
+ request.setLocalRepositoryPath( settings.getLocalRepository() );
+
+ for ( Server server : settings.getServers() )
+ {
+ server = server.clone();
+
+ request.addServer( server );
+ }
+
+ // <proxies>
+ // <proxy>
+ // <active>true</active>
+ // <protocol>http</protocol>
+ // <host>proxy.somewhere.com</host>
+ // <port>8080</port>
+ // <username>proxyuser</username>
+ // <password>somepassword</password>
+ // <nonProxyHosts>www.google.com|*.somewhere.com</nonProxyHosts>
+ // </proxy>
+ // </proxies>
+
+ for ( Proxy proxy : settings.getProxies() )
+ {
+ if ( !proxy.isActive() )
+ {
+ continue;
+ }
+
+ proxy = proxy.clone();
+
+ request.addProxy( proxy );
+ }
+
+ // <mirrors>
+ // <mirror>
+ // <id>nexus</id>
+ // <mirrorOf>*</mirrorOf>
+ // <url>http://repository.sonatype.org/content/groups/public</url>
+ // </mirror>
+ // </mirrors>
+
+ for ( Mirror mirror : settings.getMirrors() )
+ {
+ mirror = mirror.clone();
+
+ request.addMirror( mirror );
+ }
+
+ request.setActiveProfiles( settings.getActiveProfiles() );
+
+ for ( org.apache.maven.settings.Profile rawProfile : settings.getProfiles() )
+ {
+ request.addProfile( SettingsUtils.convertFromSettingsProfile( rawProfile ) );
+
+ if ( settings.getActiveProfiles().contains( rawProfile.getId() ) )
+ {
+ List<Repository> remoteRepositories = rawProfile.getRepositories();
+ for ( Repository remoteRepository : remoteRepositories )
+ {
+ try
+ {
+ request.addRemoteRepository(
+ MavenRepositorySystem.buildArtifactRepository( remoteRepository ) );
+ }
+ catch ( InvalidRepositoryException e )
+ {
+ // do nothing for now
+ }
+ }
+
+ List<Repository> pluginRepositories = rawProfile.getPluginRepositories();
+ for ( Repository pluginRepository : pluginRepositories )
+ {
+ try
+ {
+ request.addPluginArtifactRepository(
+ MavenRepositorySystem.buildArtifactRepository( pluginRepository ) );
+ }
+ catch ( InvalidRepositoryException e )
+ {
+ // do nothing for now
+ }
+ }
+ }
+ }
+ return request;
+ }
+
+ private Object getLocation( Source source, File defaultLocation )
+ {
+ if ( source != null )
+ {
+ return source.getLocation();
+ }
+ return defaultLocation;
+ }
+
+ static File resolveFile( File file, String workingDirectory )
+ {
+ if ( file == null )
+ {
+ return null;
+ }
+ else if ( file.isAbsolute() )
+ {
+ return file;
+ }
+ else if ( file.getPath().startsWith( File.separator ) )
+ {
+ // drive-relative Windows path
+ return file.getAbsoluteFile();
+ }
+ else
+ {
+ return new File( workingDirectory, file.getPath() ).getAbsoluteFile();
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/event/DefaultEventSpyContext.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/event/DefaultEventSpyContext.java
new file mode 100644
index 00000000..7c7976ab
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/event/DefaultEventSpyContext.java
@@ -0,0 +1,38 @@
+package org.apache.maven.cli.event;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.maven.eventspy.EventSpy;
+
+public class DefaultEventSpyContext
+ implements EventSpy.Context
+{
+
+ private final Map<String, Object> data = new HashMap<String, Object>();
+
+ public Map<String, Object> getData()
+ {
+ return data;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
new file mode 100644
index 00000000..ad3ad3a4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
@@ -0,0 +1,381 @@
+package org.apache.maven.cli.event;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.apache.maven.cli.CLIReportingUtils.formatDuration;
+import static org.apache.maven.cli.CLIReportingUtils.formatTimestamp;
+
+import org.apache.maven.execution.AbstractExecutionListener;
+import org.apache.maven.execution.BuildFailure;
+import org.apache.maven.execution.BuildSuccess;
+import org.apache.maven.execution.BuildSummary;
+import org.apache.maven.execution.ExecutionEvent;
+import org.apache.maven.execution.MavenExecutionResult;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Logs execution events to logger, eventually user-supplied.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ExecutionEventLogger
+ extends AbstractExecutionListener
+{
+ private final Logger logger;
+
+ private static final int LINE_LENGTH = 72;
+ private static final int MAX_PADDED_BUILD_TIME_DURATION_LENGTH = 9;
+ private static final int MAX_PROJECT_NAME_LENGTH = 52;
+
+ public ExecutionEventLogger()
+ {
+ logger = LoggerFactory.getLogger( ExecutionEventLogger.class );
+ }
+
+ // TODO should we deprecate?
+ public ExecutionEventLogger( Logger logger )
+ {
+ if ( logger == null )
+ {
+ throw new IllegalArgumentException( "logger missing" );
+ }
+
+ this.logger = logger;
+ }
+
+ private static String chars( char c, int count )
+ {
+ StringBuilder buffer = new StringBuilder( count );
+
+ for ( int i = count; i > 0; i-- )
+ {
+ buffer.append( c );
+ }
+
+ return buffer.toString();
+ }
+
+ @Override
+ public void projectDiscoveryStarted( ExecutionEvent event )
+ {
+ if ( logger.isInfoEnabled() )
+ {
+ logger.info( "Scanning for projects..." );
+ }
+ }
+
+ @Override
+ public void sessionStarted( ExecutionEvent event )
+ {
+ if ( logger.isInfoEnabled() && event.getSession().getProjects().size() > 1 )
+ {
+ logger.info( chars( '-', LINE_LENGTH ) );
+
+ logger.info( "Reactor Build Order:" );
+
+ logger.info( "" );
+
+ for ( MavenProject project : event.getSession().getProjects() )
+ {
+ logger.info( project.getName() );
+ }
+ }
+ }
+
+ @Override
+ public void sessionEnded( ExecutionEvent event )
+ {
+ if ( logger.isInfoEnabled() )
+ {
+ if ( event.getSession().getProjects().size() > 1 )
+ {
+ logReactorSummary( event.getSession() );
+ }
+
+ logResult( event.getSession() );
+
+ logStats( event.getSession() );
+
+ logger.info( chars( '-', LINE_LENGTH ) );
+ }
+ }
+
+ private void logReactorSummary( MavenSession session )
+ {
+ logger.info( chars( '-', LINE_LENGTH ) );
+
+ logger.info( "Reactor Summary:" );
+
+ logger.info( "" );
+
+ MavenExecutionResult result = session.getResult();
+
+ for ( MavenProject project : session.getProjects() )
+ {
+ StringBuilder buffer = new StringBuilder( 128 );
+
+ buffer.append( project.getName() );
+ buffer.append( ' ' );
+
+ if ( buffer.length() <= MAX_PROJECT_NAME_LENGTH )
+ {
+ while ( buffer.length() < MAX_PROJECT_NAME_LENGTH )
+ {
+ buffer.append( '.' );
+ }
+ buffer.append( ' ' );
+ }
+
+ BuildSummary buildSummary = result.getBuildSummary( project );
+
+ if ( buildSummary == null )
+ {
+ buffer.append( "SKIPPED" );
+ }
+ else if ( buildSummary instanceof BuildSuccess )
+ {
+ buffer.append( "SUCCESS [" );
+ String buildTimeDuration = formatDuration( buildSummary.getTime() );
+ int padSize = MAX_PADDED_BUILD_TIME_DURATION_LENGTH - buildTimeDuration.length();
+ if ( padSize > 0 )
+ {
+ buffer.append( chars( ' ', padSize ) );
+ }
+ buffer.append( buildTimeDuration );
+ buffer.append( "]" );
+ }
+ else if ( buildSummary instanceof BuildFailure )
+ {
+ buffer.append( "FAILURE [" );
+ String buildTimeDuration = formatDuration( buildSummary.getTime() );
+ int padSize = MAX_PADDED_BUILD_TIME_DURATION_LENGTH - buildTimeDuration.length();
+ if ( padSize > 0 )
+ {
+ buffer.append( chars( ' ', padSize ) );
+ }
+ buffer.append( buildTimeDuration );
+ buffer.append( "]" );
+ }
+
+ logger.info( buffer.toString() );
+ }
+ }
+
+ private void logResult( MavenSession session )
+ {
+ logger.info( chars( '-', LINE_LENGTH ) );
+
+ if ( session.getResult().hasExceptions() )
+ {
+ logger.info( "BUILD FAILURE" );
+ }
+ else
+ {
+ logger.info( "BUILD SUCCESS" );
+ }
+ }
+
+ private void logStats( MavenSession session )
+ {
+ logger.info( chars( '-', LINE_LENGTH ) );
+
+ long finish = System.currentTimeMillis();
+
+ long time = finish - session.getRequest().getStartTime().getTime();
+
+ String wallClock = session.getRequest().getDegreeOfConcurrency() > 1 ? " (Wall Clock)" : "";
+
+ logger.info( "Total time: " + formatDuration( time ) + wallClock );
+
+ logger.info( "Finished at: " + formatTimestamp( finish ) );
+
+ System.gc();
+
+ Runtime r = Runtime.getRuntime();
+
+ long mb = 1024 * 1024;
+
+ logger.info( "Final Memory: " + ( r.totalMemory() - r.freeMemory() ) / mb + "M/" + r.totalMemory() / mb + "M" );
+ }
+
+ @Override
+ public void projectSkipped( ExecutionEvent event )
+ {
+ if ( logger.isInfoEnabled() )
+ {
+ logger.info( chars( ' ', LINE_LENGTH ) );
+ logger.info( chars( '-', LINE_LENGTH ) );
+
+ logger.info( "Skipping " + event.getProject().getName() );
+ logger.info( "This project has been banned from the build due to previous failures." );
+
+ logger.info( chars( '-', LINE_LENGTH ) );
+ }
+ }
+
+ @Override
+ public void projectStarted( ExecutionEvent event )
+ {
+ if ( logger.isInfoEnabled() )
+ {
+ logger.info( chars( ' ', LINE_LENGTH ) );
+ logger.info( chars( '-', LINE_LENGTH ) );
+
+ logger.info( "Building " + event.getProject().getName() + " " + event.getProject().getVersion() );
+
+ logger.info( chars( '-', LINE_LENGTH ) );
+ }
+ }
+
+ @Override
+ public void mojoSkipped( ExecutionEvent event )
+ {
+ if ( logger.isWarnEnabled() )
+ {
+ logger.warn( "Goal " + event.getMojoExecution().getGoal()
+ + " requires online mode for execution but Maven is currently offline, skipping" );
+ }
+ }
+
+ /**
+ * <pre>--- mojo-artifactId:version:goal (mojo-executionId) @ project-artifactId ---</pre>
+ */
+ @Override
+ public void mojoStarted( ExecutionEvent event )
+ {
+ if ( logger.isInfoEnabled() )
+ {
+ StringBuilder buffer = new StringBuilder( 128 );
+
+ buffer.append( "--- " );
+ append( buffer, event.getMojoExecution() );
+ append( buffer, event.getProject() );
+ buffer.append( " ---" );
+
+ logger.info( "" );
+ logger.info( buffer.toString() );
+ }
+ }
+
+ /**
+ * <pre>>>> mojo-artifactId:version:goal (mojo-executionId) > :forked-goal @ project-artifactId >>></pre>
+ * <pre>>>> mojo-artifactId:version:goal (mojo-executionId) > [lifecycle]phase @ project-artifactId >>></pre>
+ */
+ @Override
+ public void forkStarted( ExecutionEvent event )
+ {
+ if ( logger.isInfoEnabled() )
+ {
+ StringBuilder buffer = new StringBuilder( 128 );
+
+ buffer.append( ">>> " );
+ append( buffer, event.getMojoExecution() );
+ buffer.append( " > " );
+ appendForkInfo( buffer, event.getMojoExecution().getMojoDescriptor() );
+ append( buffer, event.getProject() );
+ buffer.append( " >>>" );
+
+ logger.info( "" );
+ logger.info( buffer.toString() );
+ }
+ }
+
+ // CHECKSTYLE_OFF: LineLength
+ /**
+ * <pre>&lt;&lt;&lt; mojo-artifactId:version:goal (mojo-executionId) &lt; :forked-goal @ project-artifactId &lt;&lt;&lt;</pre>
+ * <pre>&lt;&lt;&lt; mojo-artifactId:version:goal (mojo-executionId) &lt; [lifecycle]phase @ project-artifactId &lt;&lt;&lt;</pre>
+ */
+ // CHECKSTYLE_ON: LineLength
+ @Override
+ public void forkSucceeded( ExecutionEvent event )
+ {
+ if ( logger.isInfoEnabled() )
+ {
+ StringBuilder buffer = new StringBuilder( 128 );
+
+ buffer.append( "<<< " );
+ append( buffer, event.getMojoExecution() );
+ buffer.append( " < " );
+ appendForkInfo( buffer, event.getMojoExecution().getMojoDescriptor() );
+ append( buffer, event.getProject() );
+ buffer.append( " <<<" );
+
+ logger.info( "" );
+ logger.info( buffer.toString() );
+ }
+ }
+
+ private void append( StringBuilder buffer, MojoExecution me )
+ {
+ buffer.append( me.getArtifactId() ).append( ':' ).append( me.getVersion() );
+ buffer.append( ':' ).append( me.getGoal() );
+ if ( me.getExecutionId() != null )
+ {
+ buffer.append( " (" ).append( me.getExecutionId() ).append( ')' );
+ }
+ }
+
+ private void appendForkInfo( StringBuilder buffer, MojoDescriptor md )
+ {
+ if ( StringUtils.isNotEmpty( md.getExecutePhase() ) )
+ {
+ // forked phase
+ if ( StringUtils.isNotEmpty( md.getExecuteLifecycle() ) )
+ {
+ buffer.append( '[' );
+ buffer.append( md.getExecuteLifecycle() );
+ buffer.append( ']' );
+ }
+ buffer.append( md.getExecutePhase() );
+ }
+ else
+ {
+ // forked goal
+ buffer.append( ':' );
+ buffer.append( md.getExecuteGoal() );
+ }
+ }
+
+ private void append( StringBuilder buffer, MavenProject project )
+ {
+ buffer.append( " @ " ).append( project.getArtifactId() );
+ }
+
+ @Override
+ public void forkedProjectStarted( ExecutionEvent event )
+ {
+ if ( logger.isInfoEnabled() && event.getMojoExecution().getForkedExecutions().size() > 1 )
+ {
+ logger.info( chars( ' ', LINE_LENGTH ) );
+ logger.info( chars( '>', LINE_LENGTH ) );
+
+ logger.info( "Forking " + event.getProject().getName() + " " + event.getProject().getVersion() );
+
+ logger.info( chars( '>', LINE_LENGTH ) );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java
new file mode 100644
index 00000000..a431bded
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java
@@ -0,0 +1,143 @@
+package org.apache.maven.cli.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.cli.internal.extension.model.CoreExtension;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.extension.internal.CoreExtensionEntry;
+import org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver;
+import org.codehaus.plexus.DefaultPlexusContainer;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.classworlds.ClassWorld;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.logging.Logger;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.util.filter.ExclusionsDependencyFilter;
+import org.eclipse.aether.util.graph.visitor.PreorderNodeListGenerator;
+
+@Named
+public class BootstrapCoreExtensionManager
+{
+ private final Logger log;
+
+ private final DefaultPluginDependenciesResolver pluginDependenciesResolver;
+
+ private final DefaultRepositorySystemSessionFactory repositorySystemSessionFactory;
+
+ private final ClassWorld classWorld;
+
+ private final ClassRealm parentRealm;
+
+ @Inject
+ public BootstrapCoreExtensionManager( Logger log, DefaultPluginDependenciesResolver pluginDependenciesResolver,
+ DefaultRepositorySystemSessionFactory repositorySystemSessionFactory,
+ PlexusContainer container )
+ {
+ this.log = log;
+ this.pluginDependenciesResolver = pluginDependenciesResolver;
+ this.repositorySystemSessionFactory = repositorySystemSessionFactory;
+ this.classWorld = ( (DefaultPlexusContainer) container ).getClassWorld();
+ this.parentRealm = container.getContainerRealm();
+ }
+
+ public List<CoreExtensionEntry> loadCoreExtensions( MavenExecutionRequest request, Set<String> providedArtifacts,
+ List<CoreExtension> extensions )
+ throws Exception
+ {
+ RepositorySystemSession repoSession = repositorySystemSessionFactory.newRepositorySession( request );
+ List<RemoteRepository> repositories = RepositoryUtils.toRepos( request.getPluginArtifactRepositories() );
+
+ return resolveCoreExtensions( repoSession, repositories, providedArtifacts, extensions );
+ }
+
+ private List<CoreExtensionEntry> resolveCoreExtensions( RepositorySystemSession repoSession,
+ List<RemoteRepository> repositories,
+ Set<String> providedArtifacts,
+ List<CoreExtension> configuration )
+ throws Exception
+ {
+ List<CoreExtensionEntry> extensions = new ArrayList<CoreExtensionEntry>();
+
+ DependencyFilter dependencyFilter = new ExclusionsDependencyFilter( providedArtifacts );
+
+ for ( CoreExtension extension : configuration )
+ {
+ List<Artifact> artifacts = resolveExtension( extension, repoSession, repositories, dependencyFilter );
+ if ( !artifacts.isEmpty() )
+ {
+ extensions.add( createExtension( extension, artifacts ) );
+ }
+ }
+
+ return Collections.unmodifiableList( extensions );
+ }
+
+ private CoreExtensionEntry createExtension( CoreExtension extension, List<Artifact> artifacts )
+ throws Exception
+ {
+ String realmId =
+ "coreExtension>" + extension.getGroupId() + ":" + extension.getArtifactId() + ":" + extension.getVersion();
+ ClassRealm realm = classWorld.newRealm( realmId, null );
+ log.debug( "Populating class realm " + realm.getId() );
+ realm.setParentRealm( parentRealm );
+ for ( Artifact artifact : artifacts )
+ {
+ File file = artifact.getFile();
+ log.debug( " Included " + file );
+ realm.addURL( file.toURI().toURL() );
+ }
+ return CoreExtensionEntry.discoverFrom( realm, Collections.singleton( artifacts.get( 0 ).getFile() ) );
+ }
+
+ private List<Artifact> resolveExtension( CoreExtension extension, RepositorySystemSession repoSession,
+ List<RemoteRepository> repositories, DependencyFilter dependencyFilter )
+ throws PluginResolutionException
+ {
+ Plugin plugin = new Plugin();
+ plugin.setGroupId( extension.getGroupId() );
+ plugin.setArtifactId( extension.getArtifactId() );
+ plugin.setVersion( extension.getVersion() );
+
+ DependencyNode root =
+ pluginDependenciesResolver.resolveCoreExtension( plugin, dependencyFilter, repositories, repoSession );
+ PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
+ root.accept( nlg );
+ List<Artifact> artifacts = nlg.getArtifacts( false );
+
+ return artifacts;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/BaseSlf4jConfiguration.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/BaseSlf4jConfiguration.java
new file mode 100644
index 00000000..33e9920e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/BaseSlf4jConfiguration.java
@@ -0,0 +1,45 @@
+package org.apache.maven.cli.logging;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Abstract implementation.
+ *
+ * @author Hervé Boutemy
+ * @since 3.1.0
+ */
+public class BaseSlf4jConfiguration
+ implements Slf4jConfiguration
+{
+ private final Logger logger = LoggerFactory.getLogger( BaseSlf4jConfiguration.class );
+
+ public void setRootLoggerLevel( Level level )
+ {
+ logger.warn( "setRootLoggerLevel: operation not supported" );
+ }
+
+ public void activate()
+ {
+ logger.warn( "reset(): operation not supported" );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jConfiguration.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jConfiguration.java
new file mode 100644
index 00000000..5f4b64d3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jConfiguration.java
@@ -0,0 +1,47 @@
+package org.apache.maven.cli.logging;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Interface for configuration operations on loggers, which are not available in slf4j, then require per-slf4f-binding
+ * implementation.
+ *
+ * @author Hervé Boutemy
+ * @since 3.1.0
+ */
+public interface Slf4jConfiguration
+{
+ public static enum Level
+ {
+ DEBUG, INFO, ERROR
+ }
+
+ /**
+ * Set root logging level.
+ *
+ * @param level the level
+ */
+ void setRootLoggerLevel( Level level );
+
+ /**
+ * Activate logging implementation configuration (if necessary).
+ */
+ void activate();
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jConfigurationFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jConfigurationFactory.java
new file mode 100644
index 00000000..b50d9442
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jConfigurationFactory.java
@@ -0,0 +1,91 @@
+package org.apache.maven.cli.logging;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import org.apache.maven.cli.logging.impl.UnsupportedSlf4jBindingConfiguration;
+import org.codehaus.plexus.util.PropertyUtils;
+import org.slf4j.ILoggerFactory;
+
+/**
+ * Slf4jConfiguration factory, loading implementations from <code>META-INF/maven/slf4j-configuration.properties</code>
+ * configuration files in class loader: key is the class name of the ILoggerFactory, value is the class name of
+ * the corresponding Slf4jConfiguration.
+ *
+ * @author Hervé Boutemy
+ * @since 3.1.0
+ */
+public class Slf4jConfigurationFactory
+{
+ public static final String RESOURCE = "META-INF/maven/slf4j-configuration.properties";
+
+ public static Slf4jConfiguration getConfiguration( ILoggerFactory loggerFactory )
+ {
+ Map<URL, Set<Object>> supported = new LinkedHashMap<URL, Set<Object>>();
+
+ String slf4jBinding = loggerFactory.getClass().getCanonicalName();
+
+ try
+ {
+ Enumeration<URL> resources = Slf4jConfigurationFactory.class.getClassLoader().getResources( RESOURCE );
+
+ while ( resources.hasMoreElements() )
+ {
+ URL resource = resources.nextElement();
+
+ Properties conf = PropertyUtils.loadProperties( resource.openStream() );
+
+ String impl = conf.getProperty( slf4jBinding );
+
+ if ( impl != null )
+ {
+ return (Slf4jConfiguration) Class.forName( impl ).newInstance();
+ }
+
+ supported.put( resource, conf.keySet() );
+ }
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ }
+ catch ( InstantiationException e )
+ {
+ e.printStackTrace();
+ }
+ catch ( IllegalAccessException e )
+ {
+ e.printStackTrace();
+ }
+ catch ( ClassNotFoundException e )
+ {
+ e.printStackTrace();
+ }
+
+ return new UnsupportedSlf4jBindingConfiguration( slf4jBinding, supported );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jLogger.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jLogger.java
new file mode 100644
index 00000000..39574642
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jLogger.java
@@ -0,0 +1,145 @@
+package org.apache.maven.cli.logging;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.codehaus.plexus.logging.Logger;
+
+/**
+ * Adapt an SLF4J logger to a Plexus logger, ignoring Plexus logger API parts that are not classical and
+ * probably not really used.
+ *
+ * @author Jason van Zyl
+ * @since 3.1.0
+ */
+public class Slf4jLogger
+ implements Logger
+{
+
+ private org.slf4j.Logger logger;
+
+ public Slf4jLogger( org.slf4j.Logger logger )
+ {
+ this.logger = logger;
+ }
+
+ public void debug( String message )
+ {
+ logger.debug( message );
+ }
+
+ public void debug( String message, Throwable throwable )
+ {
+ logger.debug( message, throwable );
+ }
+
+ public boolean isDebugEnabled()
+ {
+ return logger.isDebugEnabled();
+ }
+
+ public void info( String message )
+ {
+ logger.info( message );
+ }
+
+ public void info( String message, Throwable throwable )
+ {
+ logger.info( message, throwable );
+ }
+
+ public boolean isInfoEnabled()
+ {
+ return logger.isInfoEnabled();
+ }
+
+ public void warn( String message )
+ {
+ logger.warn( message );
+ }
+
+ public void warn( String message, Throwable throwable )
+ {
+ logger.warn( message, throwable );
+ }
+
+ public boolean isWarnEnabled()
+ {
+ return logger.isWarnEnabled();
+ }
+
+ public void error( String message )
+ {
+ logger.error( message );
+ }
+
+ public void error( String message, Throwable throwable )
+ {
+ logger.error( message, throwable );
+ }
+
+ public boolean isErrorEnabled()
+ {
+ return logger.isErrorEnabled();
+ }
+
+ public void fatalError( String message )
+ {
+ logger.error( message );
+ }
+
+ public void fatalError( String message, Throwable throwable )
+ {
+ logger.error( message, throwable );
+ }
+
+ public boolean isFatalErrorEnabled()
+ {
+ return logger.isErrorEnabled();
+ }
+
+ /**
+ * <b>Warning</b>: ignored (always return <code>0 == Logger.LEVEL_DEBUG</code>).
+ */
+ public int getThreshold()
+ {
+ return 0;
+ }
+
+ /**
+ * <b>Warning</b>: ignored.
+ */
+ public void setThreshold( int threshold )
+ {
+ }
+
+ /**
+ * <b>Warning</b>: ignored (always return <code>null</code>).
+ */
+ public Logger getChildLogger( String name )
+ {
+ return null;
+ }
+
+ public String getName()
+ {
+ return logger.getName();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jLoggerManager.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jLoggerManager.java
new file mode 100644
index 00000000..529f19eb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jLoggerManager.java
@@ -0,0 +1,111 @@
+package org.apache.maven.cli.logging;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.logging.LoggerManager;
+import org.slf4j.ILoggerFactory;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Use an SLF4J {@link org.slf4j.ILoggerFactory} as a backing for a Plexus
+ * {@link org.codehaus.plexus.logging.LoggerManager},
+ * ignoring Plexus logger API parts that are not classical and probably not really used.
+ *
+ * @author Jason van Zyl
+ * @since 3.1
+ */
+public class Slf4jLoggerManager
+ implements LoggerManager
+{
+
+ private ILoggerFactory loggerFactory;
+
+ public Slf4jLoggerManager()
+ {
+ loggerFactory = LoggerFactory.getILoggerFactory();
+ }
+
+ public Logger getLoggerForComponent( String role )
+ {
+ return new Slf4jLogger( loggerFactory.getLogger( role ) );
+ }
+
+ /**
+ * The logger name for a component with a non-null hint is <code>role.hint</code>.
+ * <b>Warning</b>: this does not conform to logger name as class name convention.
+ * (and what about <code>null</code> and <code>default</code> hint equivalence?)
+ */
+ public Logger getLoggerForComponent( String role, String hint )
+ {
+ return ( null == hint
+ ? getLoggerForComponent( role )
+ : new Slf4jLogger( loggerFactory.getLogger( role + '.' + hint ) ) );
+ }
+
+ //
+ // Trying to give loggers back is a bad idea. Ceki said so :-)
+ // notice to self: what was this method supposed to do?
+ //
+ /**
+ * <b>Warning</b>: ignored.
+ */
+ public void returnComponentLogger( String role )
+ {
+ }
+
+ /**
+ * <b>Warning</b>: ignored.
+ */
+ public void returnComponentLogger( String role, String hint )
+ {
+ }
+
+ /**
+ * <b>Warning</b>: ignored (always return <code>0</code>).
+ */
+ public int getThreshold()
+ {
+ return 0;
+ }
+
+ /**
+ * <b>Warning</b>: ignored.
+ */
+ public void setThreshold( int threshold )
+ {
+ }
+
+ /**
+ * <b>Warning</b>: ignored.
+ */
+ public void setThresholds( int threshold )
+ {
+ }
+
+ /**
+ * <b>Warning</b>: ignored (always return <code>0</code>).
+ */
+ public int getActiveLoggerCount()
+ {
+ return 0;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jStdoutLogger.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jStdoutLogger.java
new file mode 100644
index 00000000..64b9bfde
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jStdoutLogger.java
@@ -0,0 +1,306 @@
+package org.apache.maven.cli.logging;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.PrintStream;
+
+import org.slf4j.Logger;
+import org.slf4j.Marker;
+
+/**
+ * @since 3.1.0
+ */
+public class Slf4jStdoutLogger
+ implements Logger
+{
+ private static final String ERROR = "[ERROR] ";
+
+ private PrintStream out = System.out;
+
+ //
+ // These are the only methods we need in our primordial logger
+ //
+ public void error( String msg )
+ {
+ out.print( ERROR );
+ out.println( msg );
+ }
+
+ public void error( String msg, Throwable t )
+ {
+ error( msg );
+
+ if ( null != t )
+ {
+ t.printStackTrace( out );
+ }
+ }
+
+ //
+ // Don't need any of this
+ //
+ public String getName()
+ {
+ return null;
+ }
+
+ public boolean isTraceEnabled()
+ {
+ return false;
+ }
+
+ public void trace( String msg )
+ {
+ }
+
+ public void trace( String format, Object arg )
+ {
+ }
+
+ public void trace( String format, Object arg1, Object arg2 )
+ {
+ }
+
+ public void trace( String format, Object... arguments )
+ {
+ }
+
+ public void trace( String msg, Throwable t )
+ {
+ }
+
+ public boolean isTraceEnabled( Marker marker )
+ {
+ return false;
+ }
+
+ public void trace( Marker marker, String msg )
+ {
+ }
+
+ public void trace( Marker marker, String format, Object arg )
+ {
+ }
+
+ public void trace( Marker marker, String format, Object arg1, Object arg2 )
+ {
+ }
+
+ public void trace( Marker marker, String format, Object... argArray )
+ {
+ }
+
+ public void trace( Marker marker, String msg, Throwable t )
+ {
+ }
+
+ public boolean isDebugEnabled()
+ {
+ return false;
+ }
+
+ public void debug( String msg )
+ {
+ }
+
+ public void debug( String format, Object arg )
+ {
+ }
+
+ public void debug( String format, Object arg1, Object arg2 )
+ {
+ }
+
+ public void debug( String format, Object... arguments )
+ {
+ }
+
+ public void debug( String msg, Throwable t )
+ {
+ }
+
+ public boolean isDebugEnabled( Marker marker )
+ {
+ return false;
+ }
+
+ public void debug( Marker marker, String msg )
+ {
+ }
+
+ public void debug( Marker marker, String format, Object arg )
+ {
+ }
+
+ public void debug( Marker marker, String format, Object arg1, Object arg2 )
+ {
+ }
+
+ public void debug( Marker marker, String format, Object... arguments )
+ {
+ }
+
+ public void debug( Marker marker, String msg, Throwable t )
+ {
+ }
+
+ public boolean isInfoEnabled()
+ {
+ return false;
+ }
+
+ public void info( String msg )
+ {
+ }
+
+ public void info( String format, Object arg )
+ {
+ }
+
+ public void info( String format, Object arg1, Object arg2 )
+ {
+ }
+
+ public void info( String format, Object... arguments )
+ {
+ }
+
+ public void info( String msg, Throwable t )
+ {
+ }
+
+ public boolean isInfoEnabled( Marker marker )
+ {
+ return false;
+ }
+
+ public void info( Marker marker, String msg )
+ {
+ }
+
+ public void info( Marker marker, String format, Object arg )
+ {
+ }
+
+ public void info( Marker marker, String format, Object arg1, Object arg2 )
+ {
+ }
+
+ public void info( Marker marker, String format, Object... arguments )
+ {
+ }
+
+ public void info( Marker marker, String msg, Throwable t )
+ {
+ }
+
+ public boolean isWarnEnabled()
+ {
+ return false;
+ }
+
+ public void warn( String msg )
+ {
+ }
+
+ public void warn( String format, Object arg )
+ {
+ }
+
+ public void warn( String format, Object... arguments )
+ {
+ }
+
+ public void warn( String format, Object arg1, Object arg2 )
+ {
+ }
+
+ public void warn( String msg, Throwable t )
+ {
+ }
+
+ public boolean isWarnEnabled( Marker marker )
+ {
+ return false;
+ }
+
+ public void warn( Marker marker, String msg )
+ {
+ }
+
+ public void warn( Marker marker, String format, Object arg )
+ {
+ }
+
+ public void warn( Marker marker, String format, Object arg1, Object arg2 )
+ {
+ }
+
+ public void warn( Marker marker, String format, Object... arguments )
+ {
+ }
+
+ public void warn( Marker marker, String msg, Throwable t )
+ {
+ }
+
+ public boolean isErrorEnabled()
+ {
+ return false;
+ }
+
+ public void error( String format, Object arg )
+ {
+ }
+
+ public void error( String format, Object arg1, Object arg2 )
+ {
+ }
+
+ public void error( String format, Object... arguments )
+ {
+ }
+
+ public boolean isErrorEnabled( Marker marker )
+ {
+ return false;
+ }
+
+ public void error( Marker marker, String msg )
+ {
+ }
+
+ public void error( Marker marker, String format, Object arg )
+ {
+ }
+
+ public void error( Marker marker, String format, Object arg1, Object arg2 )
+ {
+ }
+
+ public void error( Marker marker, String format, Object... arguments )
+ {
+ }
+
+ public void error( Marker marker, String msg, Throwable t )
+ {
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Log4j2Configuration.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Log4j2Configuration.java
new file mode 100644
index 00000000..b24ea9cf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Log4j2Configuration.java
@@ -0,0 +1,59 @@
+package org.apache.maven.cli.logging.impl;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.cli.logging.BaseSlf4jConfiguration;
+
+/**
+ * Configuration for slf4j-log4j2.
+ *
+ * @author Hervé Boutemy
+ * @since 3.1.0
+ */
+public class Log4j2Configuration
+ extends BaseSlf4jConfiguration
+{
+ @Override
+ public void setRootLoggerLevel( Level level )
+ {
+ String value;
+ switch ( level )
+ {
+ case DEBUG:
+ value = "debug";
+ break;
+
+ case INFO:
+ value = "info";
+ break;
+
+ default:
+ value = "error";
+ break;
+ }
+ System.setProperty( "maven.logging.root.level", value );
+ }
+
+ @Override
+ public void activate()
+ {
+ // no op
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/LogbackConfiguration.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/LogbackConfiguration.java
new file mode 100644
index 00000000..5d9fab74
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/LogbackConfiguration.java
@@ -0,0 +1,61 @@
+package org.apache.maven.cli.logging.impl;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.cli.logging.BaseSlf4jConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Configuration for slf4j-logback.
+ *
+ * @author Hervé Boutemy
+ * @since 3.1.0
+ */
+public class LogbackConfiguration
+ extends BaseSlf4jConfiguration
+{
+ @Override
+ public void setRootLoggerLevel( Level level )
+ {
+ ch.qos.logback.classic.Level value;
+ switch ( level )
+ {
+ case DEBUG:
+ value = ch.qos.logback.classic.Level.DEBUG;
+ break;
+
+ case INFO:
+ value = ch.qos.logback.classic.Level.INFO;
+ break;
+
+ default:
+ value = ch.qos.logback.classic.Level.ERROR;
+ break;
+ }
+ ( (ch.qos.logback.classic.Logger) LoggerFactory.getLogger( Logger.ROOT_LOGGER_NAME ) ).setLevel( value );
+ }
+
+ @Override
+ public void activate()
+ {
+ // no op
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
new file mode 100644
index 00000000..3961059d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
@@ -0,0 +1,63 @@
+package org.apache.maven.cli.logging.impl;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.cli.logging.BaseSlf4jConfiguration;
+import org.slf4j.MavenSlf4jFriend;
+import org.slf4j.impl.MavenSlf4jSimpleFriend;
+
+/**
+ * Configuration for slf4j-simple.
+ *
+ * @author Hervé Boutemy
+ * @since 3.1.0
+ */
+public class Slf4jSimpleConfiguration
+ extends BaseSlf4jConfiguration
+{
+ @Override
+ public void setRootLoggerLevel( Level level )
+ {
+ String value;
+ switch ( level )
+ {
+ case DEBUG:
+ value = "debug";
+ break;
+
+ case INFO:
+ value = "info";
+ break;
+
+ default:
+ value = "error";
+ break;
+ }
+ System.setProperty( "org.slf4j.simpleLogger.defaultLogLevel", value );
+ }
+
+ @Override
+ public void activate()
+ {
+ // property for root logger level or System.out redirection need to be taken into account
+ MavenSlf4jFriend.reset();
+ MavenSlf4jSimpleFriend.init();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/UnsupportedSlf4jBindingConfiguration.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/UnsupportedSlf4jBindingConfiguration.java
new file mode 100644
index 00000000..2e91b251
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/UnsupportedSlf4jBindingConfiguration.java
@@ -0,0 +1,72 @@
+package org.apache.maven.cli.logging.impl;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.net.URL;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.cli.logging.BaseSlf4jConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Pseudo-configuration for unsupported slf4j binding.
+ *
+ * @author Hervé Boutemy
+ * @since 3.2.4
+ */
+public class UnsupportedSlf4jBindingConfiguration
+ extends BaseSlf4jConfiguration
+{
+ private final Logger logger = LoggerFactory.getLogger( UnsupportedSlf4jBindingConfiguration.class );
+
+ private String slf4jBinding;
+
+ private Map<URL, Set<Object>> supported;
+
+ public UnsupportedSlf4jBindingConfiguration( String slf4jBinding, Map<URL, Set<Object>> supported )
+ {
+ this.slf4jBinding = slf4jBinding;
+ this.supported = supported;
+ }
+
+ @Override
+ public void activate()
+ {
+ logger.warn( "The SLF4J binding actually used is not supported by Maven: " + slf4jBinding );
+ logger.warn( "Maven supported bindings are:" );
+
+ String ls = System.getProperty( "line.separator" );
+
+ for ( Map.Entry<URL, Set<Object>> entry : supported.entrySet() )
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.append( "(from " ).append( entry.getKey().toExternalForm() ).append( ")" );
+
+ for ( Object binding : entry.getValue() )
+ {
+ sb.append( ls ).append( "- " ).append( binding );
+ }
+
+ logger.warn( sb.toString() );
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/AbstractMavenTransferListener.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/AbstractMavenTransferListener.java
new file mode 100644
index 00000000..58b1a5dc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/AbstractMavenTransferListener.java
@@ -0,0 +1,90 @@
+package org.apache.maven.cli.transfer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.PrintStream;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.util.Locale;
+
+import org.eclipse.aether.transfer.AbstractTransferListener;
+import org.eclipse.aether.transfer.TransferCancelledException;
+import org.eclipse.aether.transfer.TransferEvent;
+import org.eclipse.aether.transfer.TransferResource;
+
+public abstract class AbstractMavenTransferListener
+ extends AbstractTransferListener
+{
+
+ protected PrintStream out;
+
+ protected AbstractMavenTransferListener( PrintStream out )
+ {
+ this.out = out;
+ }
+
+ @Override
+ public void transferInitiated( TransferEvent event )
+ {
+ String message = event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploading" : "Downloading";
+
+ out.println( message + ": " + event.getResource().getRepositoryUrl() + event.getResource().getResourceName() );
+ }
+
+ @Override
+ public void transferCorrupted( TransferEvent event )
+ throws TransferCancelledException
+ {
+ TransferResource resource = event.getResource();
+
+ out.println( "[WARNING] " + event.getException().getMessage() + " for " + resource.getRepositoryUrl()
+ + resource.getResourceName() );
+ }
+
+ @Override
+ public void transferSucceeded( TransferEvent event )
+ {
+ TransferResource resource = event.getResource();
+ long contentLength = event.getTransferredBytes();
+ if ( contentLength >= 0 )
+ {
+ String type = ( event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploaded" : "Downloaded" );
+ String len = contentLength >= 1024 ? toKB( contentLength ) + " KB" : contentLength + " B";
+
+ String throughput = "";
+ long duration = System.currentTimeMillis() - resource.getTransferStartTime();
+ if ( duration > 0 )
+ {
+ DecimalFormat format = new DecimalFormat( "0.0", new DecimalFormatSymbols( Locale.ENGLISH ) );
+ double kbPerSec = ( contentLength / 1024.0 ) / ( duration / 1000.0 );
+ throughput = " at " + format.format( kbPerSec ) + " KB/sec";
+ }
+
+ out.println( type + ": " + resource.getRepositoryUrl() + resource.getResourceName() + " (" + len
+ + throughput + ")" );
+ }
+ }
+
+ protected long toKB( long bytes )
+ {
+ return ( bytes + 1023 ) / 1024;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/BatchModeMavenTransferListener.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/BatchModeMavenTransferListener.java
new file mode 100644
index 00000000..0e20f17f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/BatchModeMavenTransferListener.java
@@ -0,0 +1,32 @@
+package org.apache.maven.cli.transfer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.PrintStream;
+
+public class BatchModeMavenTransferListener
+ extends AbstractMavenTransferListener
+{
+ public BatchModeMavenTransferListener( PrintStream out )
+ {
+ super( out );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListener.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListener.java
new file mode 100644
index 00000000..46725024
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListener.java
@@ -0,0 +1,133 @@
+package org.apache.maven.cli.transfer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.PrintStream;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.eclipse.aether.transfer.TransferCancelledException;
+import org.eclipse.aether.transfer.TransferEvent;
+import org.eclipse.aether.transfer.TransferResource;
+
+/**
+ * Console download progress meter.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class ConsoleMavenTransferListener
+ extends AbstractMavenTransferListener
+{
+
+ private Map<TransferResource, Long> downloads = new ConcurrentHashMap<TransferResource, Long>();
+
+ private int lastLength;
+
+ public ConsoleMavenTransferListener( PrintStream out )
+ {
+ super( out );
+ }
+
+ @Override
+ public void transferProgressed( TransferEvent event )
+ throws TransferCancelledException
+ {
+ TransferResource resource = event.getResource();
+ downloads.put( resource, event.getTransferredBytes() );
+
+ StringBuilder buffer = new StringBuilder( 64 );
+
+ for ( Map.Entry<TransferResource, Long> entry : downloads.entrySet() )
+ {
+ long total = entry.getKey().getContentLength();
+ Long complete = entry.getValue();
+ // NOTE: This null check guards against http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6312056
+ if ( complete != null )
+ {
+ buffer.append( getStatus( complete, total ) ).append( " " );
+ }
+ }
+
+ int pad = lastLength - buffer.length();
+ lastLength = buffer.length();
+ pad( buffer, pad );
+ buffer.append( '\r' );
+
+ out.print( buffer.toString() );
+ }
+
+ private String getStatus( long complete, long total )
+ {
+ if ( total >= 1024 )
+ {
+ return toKB( complete ) + "/" + toKB( total ) + " KB ";
+ }
+ else if ( total >= 0 )
+ {
+ return complete + "/" + total + " B ";
+ }
+ else if ( complete >= 1024 )
+ {
+ return toKB( complete ) + " KB ";
+ }
+ else
+ {
+ return complete + " B ";
+ }
+ }
+
+ private void pad( StringBuilder buffer, int spaces )
+ {
+ String block = " ";
+ while ( spaces > 0 )
+ {
+ int n = Math.min( spaces, block.length() );
+ buffer.append( block, 0, n );
+ spaces -= n;
+ }
+ }
+
+ @Override
+ public void transferSucceeded( TransferEvent event )
+ {
+ transferCompleted( event );
+
+ super.transferSucceeded( event );
+ }
+
+ @Override
+ public void transferFailed( TransferEvent event )
+ {
+ transferCompleted( event );
+
+ super.transferFailed( event );
+ }
+
+ private void transferCompleted( TransferEvent event )
+ {
+ downloads.remove( event.getResource() );
+
+ StringBuilder buffer = new StringBuilder( 64 );
+ pad( buffer, lastLength );
+ buffer.append( '\r' );
+ out.print( buffer.toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/QuietMavenTransferListener.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/QuietMavenTransferListener.java
new file mode 100644
index 00000000..fd9f52cf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/QuietMavenTransferListener.java
@@ -0,0 +1,31 @@
+package org.apache.maven.cli.transfer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.eclipse.aether.transfer.AbstractTransferListener;
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class QuietMavenTransferListener
+ extends AbstractTransferListener
+{
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/Slf4jMavenTransferListener.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/Slf4jMavenTransferListener.java
new file mode 100644
index 00000000..bb72db36
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/Slf4jMavenTransferListener.java
@@ -0,0 +1,97 @@
+package org.apache.maven.cli.transfer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.util.Locale;
+
+import org.eclipse.aether.transfer.AbstractTransferListener;
+import org.eclipse.aether.transfer.TransferCancelledException;
+import org.eclipse.aether.transfer.TransferEvent;
+import org.eclipse.aether.transfer.TransferResource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Slf4jMavenTransferListener
+ extends AbstractTransferListener
+{
+
+ protected final Logger out;
+
+ public Slf4jMavenTransferListener()
+ {
+ this.out = LoggerFactory.getLogger( Slf4jMavenTransferListener.class );
+ }
+
+ // TODO should we deprecate?
+ public Slf4jMavenTransferListener( Logger out )
+ {
+ this.out = out;
+ }
+
+ @Override
+ public void transferInitiated( TransferEvent event )
+ {
+ String message = event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploading" : "Downloading";
+
+ out.info( message + ": " + event.getResource().getRepositoryUrl() + event.getResource().getResourceName() );
+ }
+
+ @Override
+ public void transferCorrupted( TransferEvent event )
+ throws TransferCancelledException
+ {
+ TransferResource resource = event.getResource();
+
+ out.warn( event.getException().getMessage() + " for " + resource.getRepositoryUrl()
+ + resource.getResourceName() );
+ }
+
+ @Override
+ public void transferSucceeded( TransferEvent event )
+ {
+ TransferResource resource = event.getResource();
+ long contentLength = event.getTransferredBytes();
+ if ( contentLength >= 0 )
+ {
+ String type = ( event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploaded" : "Downloaded" );
+ String len = contentLength >= 1024 ? toKB( contentLength ) + " KB" : contentLength + " B";
+
+ String throughput = "";
+ long duration = System.currentTimeMillis() - resource.getTransferStartTime();
+ if ( duration > 0 )
+ {
+ DecimalFormat format = new DecimalFormat( "0.0", new DecimalFormatSymbols( Locale.ENGLISH ) );
+ double kbPerSec = ( contentLength / 1024.0 ) / ( duration / 1000.0 );
+ throughput = " at " + format.format( kbPerSec ) + " KB/sec";
+ }
+
+ out.info( type + ": " + resource.getRepositoryUrl() + resource.getResourceName() + " (" + len
+ + throughput + ")" );
+ }
+ }
+
+ protected long toKB( long bytes )
+ {
+ return ( bytes + 1023 ) / 1024;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/slf4j/MavenSlf4jFriend.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/slf4j/MavenSlf4jFriend.java
new file mode 100644
index 00000000..8a430537
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/slf4j/MavenSlf4jFriend.java
@@ -0,0 +1,35 @@
+package org.slf4j;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Utility for Maven to access Slf4j internals through package access.
+ * Use with precaution, since this is not normally intended for production use.
+ */
+public class MavenSlf4jFriend
+{
+ /**
+ * Reset Slf4j internal state.
+ */
+ public static void reset()
+ {
+ LoggerFactory.reset();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/slf4j/impl/MavenSlf4jSimpleFriend.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/slf4j/impl/MavenSlf4jSimpleFriend.java
new file mode 100644
index 00000000..bffd18c6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/slf4j/impl/MavenSlf4jSimpleFriend.java
@@ -0,0 +1,40 @@
+package org.slf4j.impl;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.slf4j.ILoggerFactory;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Utility for Maven to access Slf4j-Simple internals through package access.
+ * Use with precaution, since this is not normally intended for production use.
+ */
+public class MavenSlf4jSimpleFriend
+{
+ public static void init()
+ {
+ SimpleLogger.init();
+ ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory();
+ if ( loggerFactory instanceof SimpleLoggerFactory )
+ {
+ ( (SimpleLoggerFactory) loggerFactory ).reset();
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/mdo/core-extensions.mdo b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/mdo/core-extensions.mdo
new file mode 100644
index 00000000..3a8d80ad
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/mdo/core-extensions.mdo
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+
+<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0 http://modello.codehaus.org/xsd/modello-1.4.0.xsd"
+ xml.namespace="http://maven.apache.org/EXTENSIONS/${version}"
+ xml.schemaLocation="http://maven.apache.org/xsd/core-extensions-${version}.xsd">
+
+ <id>core-extensions</id>
+ <name>CoreExtensions</name>
+ <description><![CDATA[
+ <p>This is a reference for the Core Extensions descriptor.</p>
+ <p>The default location for the Core Extensions descriptor file is <code>${maven.projectBasedir}/.mvn/extensions.xml</code></p>
+ ]]></description>
+
+ <defaults>
+ <default>
+ <key>package</key>
+ <value>org.apache.maven.cli.internal.extension.model</value>
+ </default>
+ </defaults>
+
+ <classes>
+ <class rootElement="true" xml.tagName="extensions" xsd.compositor="sequence">
+ <name>CoreExtensions</name>
+ <description>Extensions to load.</description>
+ <version>1.0.0+</version>
+ <fields>
+ <field>
+ <name>extensions</name>
+ <description>A set of build extensions to use from this project.</description>
+ <version>1.0.0+</version>
+ <association xml.itemsStyle="flat">
+ <type>CoreExtension</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class xml.tagName="extension">
+ <name>CoreExtension</name>
+ <description>Describes a build extension to utilise.</description>
+ <version>1.0.0+</version>
+ <fields>
+ <field>
+ <name>groupId</name>
+ <description>The group ID of the extension's artifact.</description>
+ <version>1.0.0+</version>
+ <required>true</required>
+ <type>String</type>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <description>The artifact ID of the extension.</description>
+ <version>1.0.0+</version>
+ <required>true</required>
+ <type>String</type>
+ </field>
+ <field>
+ <name>version</name>
+ <description>The version of the extension.</description>
+ <version>1.0.0+</version>
+ <required>true</required>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ </classes>
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/resources/META-INF/MANIFEST.MF b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/resources/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..57576ed9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/resources/META-INF/MANIFEST.MF
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Maven 2.x Embedder Plug-in
+Bundle-Vendor: maven.org
+Bundle-SymbolicName: org.maven.ide.embedder
+Bundle-Version: ${bundleVersion}
+Bundle-ClassPath: .
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties
new file mode 100644
index 00000000..87418363
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties
@@ -0,0 +1,22 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# key = Slf4j effective logger factory implementation
+# value = corresponding o.a.m.cli.logging.Slf4jConfiguration class
+org.slf4j.impl.SimpleLoggerFactory org.apache.maven.cli.logging.impl.Slf4jSimpleConfiguration
+org.slf4j.helpers.Log4jLoggerFactory org.apache.maven.cli.logging.impl.Log4j2Configuration
+ch.qos.logback.classic.LoggerContext org.apache.maven.cli.logging.impl.LogbackConfiguration
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/apt/cli.apt.vm b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/apt/cli.apt.vm
new file mode 100644
index 00000000..b5dcae71
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/apt/cli.apt.vm
@@ -0,0 +1,28 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ Maven CLI Options Reference
+ -----
+ Hervé Boutemy
+ -----
+ 2012-04-29
+ -----
+
+Maven CLI Options Reference
+
+%{snippet|file=${project.basedir}/target/test-classes/options.html|verbatim=false}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/apt/index.apt.vm b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/apt/index.apt.vm
new file mode 100644
index 00000000..519fdae2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/apt/index.apt.vm
@@ -0,0 +1,42 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ ${project.name}
+ -----
+ Hervé Boutemy
+ -----
+ 2015-03-12
+ -----
+
+${project.name}
+
+ ${project.description}
+
+* References
+
+ * {{{./cli.html}CLI options}},
+
+ * {{{./logging.html}logging API}}.
+
+ * since 3.3.0, per project settings can be defined by files in <<<.mvn/>>> directory:
+
+ * <<<.mvn/jvm.config>>> containing jvm options,
+
+ * <<<.mvn/maven.config>>> containing Maven command-line parameter,
+
+ * <<<.mvn/extensions.xml>>> containing {{{./core-extensions.html}a list of extensions}}.
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/apt/logging.apt b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/apt/logging.apt
new file mode 100644
index 00000000..cc9257d3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/apt/logging.apt
@@ -0,0 +1,112 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ Maven Logging
+ -----
+ Hervé Boutemy
+ -----
+ 2013-08-02
+ -----
+
+Maven Logging
+
+ End-user logging documentation is available {{{/maven-logging.html}in Maven site}}.
+ This documentation is focused on internal implementation details.
+
+* Logging API
+
+ Maven uses
+ {{{http://plexus.codehaus.org/plexus-containers/plexus-container-default/apidocs/org/codehaus/plexus/logging/package-summary.html}Plexus
+ Container logging API}}, like any other Plexus components, ie
+ {{{http://plexus.codehaus.org/plexus-containers/plexus-container-default/apidocs/org/codehaus/plexus/logging/LoggerManager.html}LoggerManager}}
+ / {{{http://plexus.codehaus.org/plexus-containers/plexus-container-default/apidocs/org/codehaus/plexus/logging/Logger.html}Logger}}.
+
+ Starting with Maven 3.1.0:
+
+ * Maven supports SLF4J API logging API too, ie {{{http://slf4j.org/apidocs/org/slf4j/LoggerFactory.html}LoggerFactory}} /
+ {{{http://slf4j.org/apidocs/org/slf4j/Logger.html}Logger}},
+
+ * instead of implementing Plexus logging API itself with basic output to console, Maven implements it using SLF4J API in
+ {{{./apidocs/org/apache/maven/cli/logging/Slf4jLoggerManager.html}Slf4jLoggerManager}}
+ / {{{./apidocs/org/apache/maven/cli/logging/Slf4jLogger.html}Slf4jLogger}}.
+
+
+* Logging Implementation
+
+ Maven 3.1.0 ships bundled with {{{http://www.slf4j.org/apidocs/org/slf4j/impl/SimpleLogger.html}SLF4J simple logger}},
+ but is ready to use other logging implementations: SLF4J is responsible for loading the implementation, referred to as
+ {{{http://www.slf4j.org/manual.html#swapping}"SLF4J bindings"}}.
+
+ Logging configuration loading is actually done by logging implementation, without any Maven extensions to support merging
+ Maven installation configuration with per-user configuration for example:
+ `${maven.home}/conf/logging` directory was added to core's classpath (see `${maven.home}/bin/m2.conf`). See your implementation
+ documentation for details on file names, formats, and so on.
+
+ During Maven initialization, Maven tweaks default root logging level to match CLI verbosity choice. Since such feature isn't available
+ in SLF4J API, logging implementation specific extensions need to be added into Maven to support these CLI options: see
+ {{{./apidocs/org/apache/maven/cli/logging/Slf4jConfigurationFactory.html}Slf4jConfigurationFactory}} /
+ {{{./apidocs/org/apache/maven/cli/logging/Slf4jConfiguration.html}Slf4jConfiguration}}.
+
+* Getting Logger Instance
+
+ Plexus Logger and LoggerManager can be injected in Plexus component using Plexus annotations
+
++------+
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+@Component( role = MyComponent.class )
+public class DefaultMyComponent
+ implements MyComponent
+{
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private LoggerManager loggerManager;
+}
++------+
+
+ Starting with Maven 3.1.0, SLF4J Logger can be used directly too, without Plexus. Of course, this will only work when run under
+ Maven 3.1.0, then this technique can be used safely only in Maven core components or in plugins/component not requiring
+ compatibility with previous Maven versions.
+
++-----+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MyClass
+{
+ final Logger logger = LoggerFactory.getLogger( MyClass.class );
+}
++-----+
+
+* Logger Name
+
+ Before Maven 3.1.0, with logging implementation done in Maven, logger name wasn't used by basic console logging implementation:
+ they are as-is, without clear convention on when to pass logger from class to class or when to create a new logger.
+
+ Starting with Maven 3.1.0, logging implementation can be of greatest use if logger names are well defined. This definition still
+ needs to be defined and implemented:
+
+ * classical "class name" pattern?
+
+ * Maven-specific name hierarchy?
+
+ * a mix (some with class name, some with Maven-specific hierarchy)?
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/site.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/site.xml
new file mode 100644
index 00000000..71dc6c84
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/site.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
+ <body>
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ <item name="JavaDocs" href="apidocs/index.html"/>
+ <item name="Source Xref" href="xref/index.html"/>
+ <!--item name="FAQ" href="faq.html"/-->
+ </menu>
+
+ <menu name="Reference">
+ <item name="CLI options" href="cli.html"/>
+ </menu>
+
+ <menu ref="parent"/>
+ <menu ref="reports"/>
+ </body>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/embedder-test-project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/embedder-test-project/pom.xml
new file mode 100644
index 00000000..aed15161
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/embedder-test-project/pom.xml
@@ -0,0 +1,48 @@
+
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language
+ governing permissions and limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>embedder-test-project</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0-SNAPSHOT</version>
+ <name>Maven Quick Start Archetype</name>
+ <url>http://maven.apache.org</url>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <profiles>
+ <profile>
+ <id>embedderProfile</id>
+ <properties>
+ <embedderProfile>true</embedderProfile>
+ <name>jason</name>
+ <occupation>somnambulance</occupation>
+ </properties>
+ </profile>
+ </profiles>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.4.3</version>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/embedder-test-project/src/main/java/org/apache/maven/App.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/embedder-test-project/src/main/java/org/apache/maven/App.java
new file mode 100644
index 00000000..3902bac5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/embedder-test-project/src/main/java/org/apache/maven/App.java
@@ -0,0 +1,13 @@
+package org.apache.maven;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/embedder-test-project/src/test/java/org/apache/maven/AppTest.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/embedder-test-project/src/test/java/org/apache/maven/AppTest.java
new file mode 100644
index 00000000..7a879cec
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/embedder-test-project/src/test/java/org/apache/maven/AppTest.java
@@ -0,0 +1,38 @@
+package org.apache.maven;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/aggregate-mojo-failure/plugin/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/aggregate-mojo-failure/plugin/pom.xml
new file mode 100644
index 00000000..a0dfb082
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/aggregate-mojo-failure/plugin/pom.xml
@@ -0,0 +1,49 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>aggregate-mojo-failure-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/aggregate-mojo-failure/plugin/src/main/java/org/plugin/TestPlugin.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/aggregate-mojo-failure/plugin/src/main/java/org/plugin/TestPlugin.java
new file mode 100644
index 00000000..ec251830
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/aggregate-mojo-failure/plugin/src/main/java/org/plugin/TestPlugin.java
@@ -0,0 +1,36 @@
+package org.plugin;
+
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+
+/**
+ * @goal test
+ * @aggregator
+ *
+ * @author jdcasey
+ */
+public class TestPlugin
+ implements Mojo
+{
+
+ private Log log;
+
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ throw new MojoFailureException( this, "This mojo will always fail.", "This mojo is programmed to fail at all times, to express certain error-reporting functions." );
+ }
+
+ public Log getLog()
+ {
+ return log;
+ }
+
+ public void setLog( Log log )
+ {
+ this.log = log;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/aggregate-mojo-failure/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/aggregate-mojo-failure/project/pom.xml
new file mode 100644
index 00000000..cddcc140
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/aggregate-mojo-failure/project/pom.xml
@@ -0,0 +1,25 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>aggregate-mojo-failure</artifactId>
+ <version>1</version>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-build-plan/plugin/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-build-plan/plugin/pom.xml
new file mode 100644
index 00000000..0a0c0d77
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-build-plan/plugin/pom.xml
@@ -0,0 +1,49 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>bad-build-plan-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-build-plan/plugin/src/main/java/org/plugin/TestPlugin.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-build-plan/plugin/src/main/java/org/plugin/TestPlugin.java
new file mode 100644
index 00000000..b5e6ecd5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-build-plan/plugin/src/main/java/org/plugin/TestPlugin.java
@@ -0,0 +1,35 @@
+package org.plugin;
+
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+
+/**
+ * @goal test
+ * @execute goal="my:something:else:that:is:wrong"
+ *
+ * @author jdcasey
+ */
+public class TestPlugin
+ implements Mojo
+{
+
+ private Log log;
+
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ }
+
+ public Log getLog()
+ {
+ return log;
+ }
+
+ public void setLog( Log log )
+ {
+ this.log = log;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-build-plan/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-build-plan/project/pom.xml
new file mode 100644
index 00000000..6a4bcda3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-build-plan/project/pom.xml
@@ -0,0 +1,25 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>bad-build-plan</artifactId>
+ <version>1</version>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-dep-version/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-dep-version/pom.xml
new file mode 100644
index 00000000..cfd29708
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-dep-version/pom.xml
@@ -0,0 +1,33 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>bad-dep-version</artifactId>
+ <version>1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>[3.1,</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-direct-deps/local-repo/org/apache/maven/errortest/test-maven-ext/1/test-maven-ext-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-direct-deps/local-repo/org/apache/maven/errortest/test-maven-ext/1/test-maven-ext-1.pom
new file mode 100644
index 00000000..dcaf397e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-direct-deps/local-repo/org/apache/maven/errortest/test-maven-ext/1/test-maven-ext-1.pom
@@ -0,0 +1,34 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>test-maven-ext</artifactId>
+ <version>1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>[3.8,</version>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-direct-deps/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-direct-deps/project/pom.xml
new file mode 100644
index 00000000..6d06469f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-direct-deps/project/pom.xml
@@ -0,0 +1,35 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>bad-ext-direct-deps</artifactId>
+ <version>1</version>
+
+ <build>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>test-maven-ext</artifactId>
+ <version>1</version>
+ </extension>
+ </extensions>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-dep-ver-maven-plugin/1/bad-ext-plugin-dep-ver-maven-plugin-1.jar b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-dep-ver-maven-plugin/1/bad-ext-plugin-dep-ver-maven-plugin-1.jar
new file mode 100644
index 00000000..7d849019
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-dep-ver-maven-plugin/1/bad-ext-plugin-dep-ver-maven-plugin-1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-dep-ver-maven-plugin/1/bad-ext-plugin-dep-ver-maven-plugin-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-dep-ver-maven-plugin/1/bad-ext-plugin-dep-ver-maven-plugin-1.pom
new file mode 100644
index 00000000..3c7f3f3f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-dep-ver-maven-plugin/1/bad-ext-plugin-dep-ver-maven-plugin-1.pom
@@ -0,0 +1,55 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>bad-ext-plugin-dep-ver-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>[3.8.1,</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/plugin/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/plugin/pom.xml
new file mode 100644
index 00000000..2c3da51d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/plugin/pom.xml
@@ -0,0 +1,57 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>bad-ext-plugin-maven-ver-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+
+ <!--
+ <prerequisites>
+ <maven>10</maven>
+ </prerequisites>
+
+ -->
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/plugin/src/main/java/org/plugin/TestPlugin.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/plugin/src/main/java/org/plugin/TestPlugin.java
new file mode 100644
index 00000000..5836f1e0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/plugin/src/main/java/org/plugin/TestPlugin.java
@@ -0,0 +1,33 @@
+package org.plugin;
+
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+
+/**
+ * @goal test
+ */
+public class TestPlugin
+ implements Mojo
+{
+
+ private Log log;
+
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ throw new MojoExecutionException( "This is meant to fail." );
+ }
+
+ public Log getLog()
+ {
+ return log;
+ }
+
+ public void setLog( Log log )
+ {
+ this.log = log;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/project/pom.xml
new file mode 100644
index 00000000..9001cdca
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/project/pom.xml
@@ -0,0 +1,37 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>bad-ext-plugin-dep-ver</artifactId>
+ <version>1</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>bad-ext-plugin-dep-ver-maven-plugin</artifactId>
+ <version>1</version>
+ <extensions>true</extensions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-maven-ver-maven-plugin/1/bad-ext-plugin-maven-ver-maven-plugin-1.jar b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-maven-ver-maven-plugin/1/bad-ext-plugin-maven-ver-maven-plugin-1.jar
new file mode 100644
index 00000000..7d849019
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-maven-ver-maven-plugin/1/bad-ext-plugin-maven-ver-maven-plugin-1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-maven-ver-maven-plugin/1/bad-ext-plugin-maven-ver-maven-plugin-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-maven-ver-maven-plugin/1/bad-ext-plugin-maven-ver-maven-plugin-1.pom
new file mode 100644
index 00000000..ffe6141e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-maven-ver-maven-plugin/1/bad-ext-plugin-maven-ver-maven-plugin-1.pom
@@ -0,0 +1,54 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>bad-ext-plugin-maven-ver-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+
+ <prerequisites>
+ <maven>10</maven>
+ </prerequisites>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-maven-ver-maven-plugin/maven-metadata-local.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-maven-ver-maven-plugin/maven-metadata-local.xml
new file mode 100644
index 00000000..184a5f7d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-maven-ver-maven-plugin/maven-metadata-local.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?><metadata>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>bad-ext-plugin-maven-ver-maven-plugin</artifactId>
+ <versioning>
+ <latest>1</latest>
+ <release>1</release>
+ <versions>
+ <version>1</version>
+ </versions>
+ <lastUpdated>20070331131500</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/plugin/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/plugin/pom.xml
new file mode 100644
index 00000000..2c3da51d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/plugin/pom.xml
@@ -0,0 +1,57 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>bad-ext-plugin-maven-ver-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+
+ <!--
+ <prerequisites>
+ <maven>10</maven>
+ </prerequisites>
+
+ -->
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/plugin/src/main/java/org/plugin/TestPlugin.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/plugin/src/main/java/org/plugin/TestPlugin.java
new file mode 100644
index 00000000..5836f1e0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/plugin/src/main/java/org/plugin/TestPlugin.java
@@ -0,0 +1,33 @@
+package org.plugin;
+
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+
+/**
+ * @goal test
+ */
+public class TestPlugin
+ implements Mojo
+{
+
+ private Log log;
+
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ throw new MojoExecutionException( "This is meant to fail." );
+ }
+
+ public Log getLog()
+ {
+ return log;
+ }
+
+ public void setLog( Log log )
+ {
+ this.log = log;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/project/pom.xml
new file mode 100644
index 00000000..3ab28183
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/project/pom.xml
@@ -0,0 +1,37 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>bad-ext-plugin-maven-ver</artifactId>
+ <version>1</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>bad-ext-plugin-maven-ver-maven-plugin</artifactId>
+ <version>1</version>
+ <extensions>true</extensions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-maven-version/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-maven-version/pom.xml
new file mode 100644
index 00000000..db547ca5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-maven-version/pom.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>bad-maven-version</artifactId>
+ <version>1</version>
+
+ <prerequisites>
+ <maven>10</maven>
+ </prerequisites>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-mg-dep-version/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-mg-dep-version/pom.xml
new file mode 100644
index 00000000..4bb4c461
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-mg-dep-version/pom.xml
@@ -0,0 +1,35 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>bad-mg-dep-version</artifactId>
+ <version>1</version>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>[3.1,</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-non-dep-version/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-non-dep-version/pom.xml
new file mode 100644
index 00000000..dd2cff37
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-non-dep-version/pom.xml
@@ -0,0 +1,35 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>bad-non-dep-version</artifactId>
+ <version>1</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>[3.1,</version>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-profile-repo/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-profile-repo/pom.xml
new file mode 100644
index 00000000..d7a73754
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-profile-repo/pom.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>bad-profile-repo</artifactId>
+ <version>1</version>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-profile-repo/profiles.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-profile-repo/profiles.xml
new file mode 100644
index 00000000..43e20d8b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-profile-repo/profiles.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<profilesXml>
+ <profiles>
+ <profile>
+ <id>test</id>
+ <repositories>
+ <repository>
+ <id>test-repo</id>
+ <url>http://www.google.com/</url>
+ <layout>nothing-special</layout>
+ </repository>
+ </repositories>
+ </profile>
+ </profiles>
+ <activeProfiles>
+ <activeProfile>test</activeProfile>
+ </activeProfiles>
+</profilesXml> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/config-rdonly-mojo-param/plugin/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/config-rdonly-mojo-param/plugin/pom.xml
new file mode 100644
index 00000000..73a96583
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/config-rdonly-mojo-param/plugin/pom.xml
@@ -0,0 +1,49 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>config-rdonly-mojo-param-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/config-rdonly-mojo-param/plugin/src/main/java/org/plugin/TestPlugin.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/config-rdonly-mojo-param/plugin/src/main/java/org/plugin/TestPlugin.java
new file mode 100644
index 00000000..6aa5c335
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/config-rdonly-mojo-param/plugin/src/main/java/org/plugin/TestPlugin.java
@@ -0,0 +1,39 @@
+package org.plugin;
+
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+
+/**
+ * @goal test
+ */
+public class TestPlugin
+ implements Mojo
+{
+
+ private Log log;
+
+ /**
+ * @parameter default-value="something"
+ * @required
+ * @readonly
+ */
+ private String param;
+
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ }
+
+ public Log getLog()
+ {
+ return log;
+ }
+
+ public void setLog( Log log )
+ {
+ this.log = log;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/config-rdonly-mojo-param/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/config-rdonly-mojo-param/project/pom.xml
new file mode 100644
index 00000000..e2c74121
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/config-rdonly-mojo-param/project/pom.xml
@@ -0,0 +1,47 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>config-rdonly-mojo-param</artifactId>
+ <version>1</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>config-rdonly-mojo-param-maven-plugin</artifactId>
+ <version>1</version>
+ <executions>
+ <execution>
+ <id>test-run</id>
+ <phase>initialize</phase>
+ <goals>
+ <goal>test</goal>
+ </goals>
+ <configuration>
+ <param>something-else</param>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/deploy-repo-creation-err/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/deploy-repo-creation-err/pom.xml
new file mode 100644
index 00000000..d766e418
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/deploy-repo-creation-err/pom.xml
@@ -0,0 +1,41 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>deploy-repo-creation-err</artifactId>
+ <version>1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ </dependency>
+ </dependencies>
+
+ <distributionManagement>
+ <repository>
+ <id>test</id>
+ <url>http://www.google.com</url>
+ <layout>nothing</layout>
+ </repository>
+ </distributionManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/duplicated-attachments/plugin/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/duplicated-attachments/plugin/pom.xml
new file mode 100644
index 00000000..21222df6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/duplicated-attachments/plugin/pom.xml
@@ -0,0 +1,54 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>duplicated-attachments-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>2.0.7</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/duplicated-attachments/plugin/src/main/java/org/plugin/TestPlugin.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/duplicated-attachments/plugin/src/main/java/org/plugin/TestPlugin.java
new file mode 100644
index 00000000..6b0f61ad
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/duplicated-attachments/plugin/src/main/java/org/plugin/TestPlugin.java
@@ -0,0 +1,50 @@
+package org.plugin;
+
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProjectHelper;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * @goal test
+ *
+ * @author jdcasey
+ */
+public class TestPlugin
+ implements Mojo
+{
+
+ private Log log;
+
+ /**
+ * @component
+ */
+ private MavenProjectHelper mavenProjectHelper;
+
+ /**
+ * @parameter default-value="${project}"
+ * @required
+ * @readonly
+ */
+ private MavenProject project;
+
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ mavenProjectHelper.attachArtifact( project, "pom", "classifier", project.getFile() );
+ mavenProjectHelper.attachArtifact( project, "pom", "classifier", project.getFile() );
+ }
+
+ public Log getLog()
+ {
+ return log;
+ }
+
+ public void setLog( Log log )
+ {
+ this.log = log;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/duplicated-attachments/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/duplicated-attachments/project/pom.xml
new file mode 100644
index 00000000..a9517c94
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/duplicated-attachments/project/pom.xml
@@ -0,0 +1,25 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>duplicated-attachments</artifactId>
+ <version>1</version>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-loading-plugin/local-repo/org/apache/maven/errortest/err-loading-plugin-maven-plugin/1/err-loading-plugin-maven-plugin-1.jar b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-loading-plugin/local-repo/org/apache/maven/errortest/err-loading-plugin-maven-plugin/1/err-loading-plugin-maven-plugin-1.jar
new file mode 100644
index 00000000..7d849019
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-loading-plugin/local-repo/org/apache/maven/errortest/err-loading-plugin-maven-plugin/1/err-loading-plugin-maven-plugin-1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-loading-plugin/local-repo/org/apache/maven/errortest/err-loading-plugin-maven-plugin/1/err-loading-plugin-maven-plugin-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-loading-plugin/local-repo/org/apache/maven/errortest/err-loading-plugin-maven-plugin/1/err-loading-plugin-maven-plugin-1.pom
new file mode 100644
index 00000000..7ac04909
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-loading-plugin/local-repo/org/apache/maven/errortest/err-loading-plugin-maven-plugin/1/err-loading-plugin-maven-plugin-1.pom
@@ -0,0 +1,55 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>err-loading-plugin-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>nothing</groupId>
+ <artifactId>nothing</artifactId>
+ <version>1</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-loading-plugin/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-loading-plugin/project/pom.xml
new file mode 100644
index 00000000..c210cfba
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-loading-plugin/project/pom.xml
@@ -0,0 +1,45 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>err-loading-plugin</artifactId>
+ <version>1</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>err-loading-plugin-maven-plugin</artifactId>
+ <version>1</version>
+ <executions>
+ <execution>
+ <id>test-run</id>
+ <phase>initialize</phase>
+ <goals>
+ <goal>test</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/local-repo/org/apache/maven/errortest/dep/1/dep-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/local-repo/org/apache/maven/errortest/dep/1/dep-1.pom
new file mode 100644
index 00000000..e6dd7a2b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/local-repo/org/apache/maven/errortest/dep/1/dep-1.pom
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>dep</artifactId>
+ <version>1</version>
+ <packaging>pom</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>[4.0,4.1]</version>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/local-repo/org/apache/maven/errortest/err-resolving-ext-plugin-maven-plugin/1/err-resolving-ext-plugin-maven-plugin-1.jar b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/local-repo/org/apache/maven/errortest/err-resolving-ext-plugin-maven-plugin/1/err-resolving-ext-plugin-maven-plugin-1.jar
new file mode 100644
index 00000000..7d849019
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/local-repo/org/apache/maven/errortest/err-resolving-ext-plugin-maven-plugin/1/err-resolving-ext-plugin-maven-plugin-1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/local-repo/org/apache/maven/errortest/err-resolving-ext-plugin-maven-plugin/1/err-resolving-ext-plugin-maven-plugin-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/local-repo/org/apache/maven/errortest/err-resolving-ext-plugin-maven-plugin/1/err-resolving-ext-plugin-maven-plugin-1.pom
new file mode 100644
index 00000000..e520ccc9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/local-repo/org/apache/maven/errortest/err-resolving-ext-plugin-maven-plugin/1/err-resolving-ext-plugin-maven-plugin-1.pom
@@ -0,0 +1,60 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>err-resolving-ext-plugin-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>[3.8.1,3.8.2]</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>dep</artifactId>
+ <version>1</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/project/pom.xml
new file mode 100644
index 00000000..1339c66c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/project/pom.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>err-resolving-ext-plugin</artifactId>
+ <version>1</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>err-resolving-ext-plugin-maven-plugin</artifactId>
+ <version>1</version>
+ <extensions>true</extensions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/local-repo/org/apache/maven/errortest/dep/1/dep-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/local-repo/org/apache/maven/errortest/dep/1/dep-1.pom
new file mode 100644
index 00000000..e6dd7a2b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/local-repo/org/apache/maven/errortest/dep/1/dep-1.pom
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>dep</artifactId>
+ <version>1</version>
+ <packaging>pom</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>[4.0,4.1]</version>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/pom.xml
new file mode 100644
index 00000000..d0b755c6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/pom.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>err-resolving-project-dep</artifactId>
+ <version>1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>[3.8.1,3.8.2]</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>dep</artifactId>
+ <version>1</version>
+ <type>pom</type>
+ </dependency>
+ </dependencies>
+
+ <repositories>
+ <repository>
+ <id>repo</id>
+ <url>file://localhost/${basedir}/local-repo</url>
+ </repository>
+ </repositories>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/src/main/java/org/apache/maven/test/error/mojoFailure/App.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/src/main/java/org/apache/maven/test/error/mojoFailure/App.java
new file mode 100644
index 00000000..dd4102a3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/src/main/java/org/apache/maven/test/error/mojoFailure/App.java
@@ -0,0 +1,13 @@
+package org.apache.maven.test.error.mojoFailure;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java
new file mode 100644
index 00000000..7e0144ac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java
@@ -0,0 +1,38 @@
+package org.apache.maven.test.error.mojoFailure;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-deps-resolve-err/local-repo/org/apache/maven/errortest/test-maven-ext-dep/1/test-maven-ext-dep-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-deps-resolve-err/local-repo/org/apache/maven/errortest/test-maven-ext-dep/1/test-maven-ext-dep-1.pom
new file mode 100644
index 00000000..71edcf4d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-deps-resolve-err/local-repo/org/apache/maven/errortest/test-maven-ext-dep/1/test-maven-ext-dep-1.pom
@@ -0,0 +1,26 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>test-maven-ext-dep</artifactId>
+ <version>1</ver>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-deps-resolve-err/local-repo/org/apache/maven/errortest/test-maven-ext/1/test-maven-ext-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-deps-resolve-err/local-repo/org/apache/maven/errortest/test-maven-ext/1/test-maven-ext-1.pom
new file mode 100644
index 00000000..cd40200d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-deps-resolve-err/local-repo/org/apache/maven/errortest/test-maven-ext/1/test-maven-ext-1.pom
@@ -0,0 +1,34 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>test-maven-ext</artifactId>
+ <version>1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>test-maven-ext-dep</artifactId>
+ <version>1</version>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-deps-resolve-err/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-deps-resolve-err/project/pom.xml
new file mode 100644
index 00000000..8da15606
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-deps-resolve-err/project/pom.xml
@@ -0,0 +1,35 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>ext-deps-resolve-err</artifactId>
+ <version>1</version>
+
+ <build>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>test-maven-ext</artifactId>
+ <version>1</version>
+ </extension>
+ </extensions>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-artifact-missing/local-repo/org/apache/maven/errortest/ext-plugin-artifact-missing-maven-plugin/1/ext-plugin-artifact-missing-maven-plugin-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-artifact-missing/local-repo/org/apache/maven/errortest/ext-plugin-artifact-missing-maven-plugin/1/ext-plugin-artifact-missing-maven-plugin-1.pom
new file mode 100644
index 00000000..b7f7d529
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-artifact-missing/local-repo/org/apache/maven/errortest/ext-plugin-artifact-missing-maven-plugin/1/ext-plugin-artifact-missing-maven-plugin-1.pom
@@ -0,0 +1,55 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>ext-plugin-artifact-missing-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>nothing</groupId>
+ <artifactId>nothing</artifactId>
+ <version>1</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-artifact-missing/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-artifact-missing/project/pom.xml
new file mode 100644
index 00000000..6565fd44
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-artifact-missing/project/pom.xml
@@ -0,0 +1,37 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>ext-plugin-artifact-missing</artifactId>
+ <version>1</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>ext-plugin-artifact-missing-maven-plugin</artifactId>
+ <version>1</version>
+ <extensions>true</extensions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/pom.xml
new file mode 100644
index 00000000..e8e5218c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/pom.xml
@@ -0,0 +1,49 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>test-maven-ext-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/java/org/plugin/ComponentOne.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/java/org/plugin/ComponentOne.java
new file mode 100644
index 00000000..49b7686e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/java/org/plugin/ComponentOne.java
@@ -0,0 +1,8 @@
+package org.plugin;
+
+public class ComponentOne
+{
+
+ private ComponentTwo two;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/java/org/plugin/ComponentTwo.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/java/org/plugin/ComponentTwo.java
new file mode 100644
index 00000000..0a82f578
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/java/org/plugin/ComponentTwo.java
@@ -0,0 +1,8 @@
+package org.plugin;
+
+public class ComponentTwo
+{
+
+ private ComponentOne one;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/java/org/plugin/TestPlugin.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/java/org/plugin/TestPlugin.java
new file mode 100644
index 00000000..4b4a1e4d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/java/org/plugin/TestPlugin.java
@@ -0,0 +1,39 @@
+package org.plugin;
+
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+
+/**
+ * @goal test
+ *
+ * @author jdcasey
+ */
+public class TestPlugin
+ implements Mojo
+{
+
+ private Log log;
+
+ /**
+ * @component
+ */
+ private ComponentOne one;
+
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ }
+
+ public Log getLog()
+ {
+ return log;
+ }
+
+ public void setLog( Log log )
+ {
+ this.log = log;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/resources/META-INF/plexus/components.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/resources/META-INF/plexus/components.xml
new file mode 100644
index 00000000..ddc1eee5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/resources/META-INF/plexus/components.xml
@@ -0,0 +1,25 @@
+<component-set>
+ <components>
+ <component>
+ <role>org.test.ComponentOne</role>
+ <role-hint>default</role-hint>
+ <implementation>org.test.ComponentOne</implementation>
+ <requirements>
+ <requirement>
+ <role>org.test.ComponentTwo</role>
+ </requirement>
+ </requirements>
+ </component>
+
+ <component>
+ <role>org.test.ComponentTwo</role>
+ <role-hint>default</role-hint>
+ <implementation>org.test.ComponentTwo</implementation>
+ <requirements>
+ <requirement>
+ <role>org.test.ComponentOne</role>
+ </requirement>
+ </requirements>
+ </component>
+ </components>
+</component-set> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/project/pom.xml
new file mode 100644
index 00000000..513e00c8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/project/pom.xml
@@ -0,0 +1,36 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>ext-plugin-realm-error</artifactId>
+ <version>1</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>test-maven-ext-plugin</artifactId>
+ <version>1</version>
+ <extensions>true</extensions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/local-repo/org/apache/maven/errortest/ext-plugin-version-err-maven-plugin/1/ext-plugin-version-err-maven-plugin-1.jar b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/local-repo/org/apache/maven/errortest/ext-plugin-version-err-maven-plugin/1/ext-plugin-version-err-maven-plugin-1.jar
new file mode 100644
index 00000000..7d849019
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/local-repo/org/apache/maven/errortest/ext-plugin-version-err-maven-plugin/1/ext-plugin-version-err-maven-plugin-1.jar
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/local-repo/org/apache/maven/errortest/ext-plugin-version-err-maven-plugin/1/ext-plugin-version-err-maven-plugin-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/local-repo/org/apache/maven/errortest/ext-plugin-version-err-maven-plugin/1/ext-plugin-version-err-maven-plugin-1.pom
new file mode 100644
index 00000000..5aab61d9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/local-repo/org/apache/maven/errortest/ext-plugin-version-err-maven-plugin/1/ext-plugin-version-err-maven-plugin-1.pom
@@ -0,0 +1,50 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>ext-plugin-version-err-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/local-repo/org/apache/maven/errortest/ext-plugin-version-err-maven-plugin/maven-metadata-local.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/local-repo/org/apache/maven/errortest/ext-plugin-version-err-maven-plugin/maven-metadata-local.xml
new file mode 100644
index 00000000..2a3d1c56
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/local-repo/org/apache/maven/errortest/ext-plugin-version-err-maven-plugin/maven-metadata-local.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?><metadata>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>ext-plugin-version-err-maven-plugin</artifactId>
+ <versioning>
+ <versions>
+ <version>1</version>
+ </versions>
+ <lastUpdated>20070331131500</lastUpdated>
+ </versioning>
+</metadata>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/plugin/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/plugin/pom.xml
new file mode 100644
index 00000000..2c3da51d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/plugin/pom.xml
@@ -0,0 +1,57 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>bad-ext-plugin-maven-ver-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+
+ <!--
+ <prerequisites>
+ <maven>10</maven>
+ </prerequisites>
+
+ -->
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/plugin/src/main/java/org/plugin/TestPlugin.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/plugin/src/main/java/org/plugin/TestPlugin.java
new file mode 100644
index 00000000..5836f1e0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/plugin/src/main/java/org/plugin/TestPlugin.java
@@ -0,0 +1,33 @@
+package org.plugin;
+
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+
+/**
+ * @goal test
+ */
+public class TestPlugin
+ implements Mojo
+{
+
+ private Log log;
+
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ throw new MojoExecutionException( "This is meant to fail." );
+ }
+
+ public Log getLog()
+ {
+ return log;
+ }
+
+ public void setLog( Log log )
+ {
+ this.log = log;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/project/pom.xml
new file mode 100644
index 00000000..ad6effce
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/project/pom.xml
@@ -0,0 +1,36 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>ext-plugin-version-err</artifactId>
+ <version>1</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>ext-plugin-version-err-maven-plugin</artifactId>
+ <extensions>true</extensions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/ext/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/ext/pom.xml
new file mode 100644
index 00000000..a5677067
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/ext/pom.xml
@@ -0,0 +1,38 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>test-maven-ext</artifactId>
+ <version>1</version>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/ext/src/main/java/org/ext/App.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/ext/src/main/java/org/ext/App.java
new file mode 100644
index 00000000..0701b7ae
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/ext/src/main/java/org/ext/App.java
@@ -0,0 +1,13 @@
+package org.ext;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/ext/src/main/resources/META-INF/plexus/components.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/ext/src/main/resources/META-INF/plexus/components.xml
new file mode 100644
index 00000000..18664051
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/ext/src/main/resources/META-INF/plexus/components.xml
@@ -0,0 +1 @@
+this is an error. \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/project/pom.xml
new file mode 100644
index 00000000..85e9a9fb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/project/pom.xml
@@ -0,0 +1,35 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>ext-realm-error</artifactId>
+ <version>1</version>
+
+ <build>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>test-maven-ext</artifactId>
+ <version>1</version>
+ </extension>
+ </extensions>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/interp-from-model/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/interp-from-model/pom.xml
new file mode 100644
index 00000000..a840870f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/interp-from-model/pom.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>interp-from-model</artifactId>
+ <version>${version}</version>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/interp-from-project/project/local-repo/org/test/bad-pom/1/bad-pom-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/interp-from-project/project/local-repo/org/test/bad-pom/1/bad-pom-1.pom
new file mode 100644
index 00000000..b1f29c49
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/interp-from-project/project/local-repo/org/test/bad-pom/1/bad-pom-1.pom
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.test</groupId>
+ <artifactId>bad-pom</artifactId>
+ <version>1</version>
+
+ <packaging>${packaging}</packaging>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/interp-from-project/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/interp-from-project/project/pom.xml
new file mode 100644
index 00000000..bb50b45c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/interp-from-project/project/pom.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>interp-from-project</artifactId>
+ <version>1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.test</groupId>
+ <artifactId>bad-pom</artifactId>
+ <version>1</version>
+ <type>pom</type>
+ </dependency>
+ </dependencies>
+
+ <repositories>
+ <repository>
+ <id>repo</id>
+ <url>file://localhost/${basedir}/local-repo</url>
+ </repository>
+ </repositories>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/load-extern-profiles-ioex/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/load-extern-profiles-ioex/pom.xml
new file mode 100644
index 00000000..2a924b8c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/load-extern-profiles-ioex/pom.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>load-extern-profiles-ioex</artifactId>
+ <version>1</version>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/load-extern-profiles-xex/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/load-extern-profiles-xex/pom.xml
new file mode 100644
index 00000000..fdaa3d43
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/load-extern-profiles-xex/pom.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>load-extern-profiles-xex</artifactId>
+ <version>1</version>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/load-extern-profiles-xex/profiles.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/load-extern-profiles-xex/profiles.xml
new file mode 100644
index 00000000..e99fc60b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/load-extern-profiles-xex/profiles.xml
@@ -0,0 +1,4 @@
+<profilesXml>
+ <profiles>
+ </profile>
+</profilesXml> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-direct-invoke-mojo/plugin/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-direct-invoke-mojo/plugin/pom.xml
new file mode 100644
index 00000000..5895c2a9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-direct-invoke-mojo/plugin/pom.xml
@@ -0,0 +1,49 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>missing-direct-invoke-mojo-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-direct-invoke-mojo/plugin/src/main/java/org/plugin/TestPlugin.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-direct-invoke-mojo/plugin/src/main/java/org/plugin/TestPlugin.java
new file mode 100644
index 00000000..bfd8a7f4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-direct-invoke-mojo/plugin/src/main/java/org/plugin/TestPlugin.java
@@ -0,0 +1,36 @@
+package org.plugin;
+
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+
+/**
+ * @goal test-unused
+ * @aggregator
+ *
+ * @author jdcasey
+ */
+public class TestPlugin
+ implements Mojo
+{
+
+ private Log log;
+
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ throw new MojoFailureException( this, "This mojo will always fail.", "This mojo is programmed to fail at all times, to express certain error-reporting functions." );
+ }
+
+ public Log getLog()
+ {
+ return log;
+ }
+
+ public void setLog( Log log )
+ {
+ this.log = log;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/pom.xml
new file mode 100644
index 00000000..7ff5c598
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/pom.xml
@@ -0,0 +1,19 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <parent>
+ <artifactId>missing-module-pom</artifactId>
+ <groupId>org.apache.maven.errortest</groupId>
+ <version>1</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>missing-module-pom-child1</artifactId>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/src/main/java/org/test/App.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/src/main/java/org/test/App.java
new file mode 100644
index 00000000..2c825a09
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/src/main/java/org/test/App.java
@@ -0,0 +1,13 @@
+package org.test;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/src/test/java/org/test/AppTest.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/src/test/java/org/test/AppTest.java
new file mode 100644
index 00000000..e4e81e21
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/src/test/java/org/test/AppTest.java
@@ -0,0 +1,38 @@
+package org.test;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/pom.xml
new file mode 100644
index 00000000..ff895b80
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/pom.xml
@@ -0,0 +1,13 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd' xmlns='http://maven.apache.org/POM/4.0.0'>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>missing-module-pom</artifactId>
+ <packaging>pom</packaging>
+ <version>1</version>
+
+ <modules>
+ <module>child1</module>
+ <module>child2</module>
+ </modules>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-parent-pom/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-parent-pom/pom.xml
new file mode 100644
index 00000000..e0ab9f6d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-parent-pom/pom.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>missing-parent-pom-parent</artifactId>
+ <version>1</version>
+ </parent>
+
+ <artifactId>missing-parent-pom</artifactId>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-req-mojo-param/plugin/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-req-mojo-param/plugin/pom.xml
new file mode 100644
index 00000000..6e53240d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-req-mojo-param/plugin/pom.xml
@@ -0,0 +1,49 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>missing-req-mojo-param-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-req-mojo-param/plugin/src/main/java/org/plugin/TestPlugin.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-req-mojo-param/plugin/src/main/java/org/plugin/TestPlugin.java
new file mode 100644
index 00000000..51b71a87
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-req-mojo-param/plugin/src/main/java/org/plugin/TestPlugin.java
@@ -0,0 +1,38 @@
+package org.plugin;
+
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+
+/**
+ * @goal test
+ */
+public class TestPlugin
+ implements Mojo
+{
+
+ private Log log;
+
+ /**
+ * @parameter
+ * @required
+ */
+ private String requiredParam;
+
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ }
+
+ public Log getLog()
+ {
+ return log;
+ }
+
+ public void setLog( Log log )
+ {
+ this.log = log;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-req-mojo-param/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-req-mojo-param/project/pom.xml
new file mode 100644
index 00000000..b5c9852b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-req-mojo-param/project/pom.xml
@@ -0,0 +1,25 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>missing-req-mojo-param</artifactId>
+ <version>1</version>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/plugin/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/plugin/pom.xml
new file mode 100644
index 00000000..de32947a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/plugin/pom.xml
@@ -0,0 +1,49 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>mojo-config-error-maven-plugin</artifactId>
+ <version>1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/plugin/src/main/java/org/plugin/TestPlugin.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/plugin/src/main/java/org/plugin/TestPlugin.java
new file mode 100644
index 00000000..5836f1e0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/plugin/src/main/java/org/plugin/TestPlugin.java
@@ -0,0 +1,33 @@
+package org.plugin;
+
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+
+/**
+ * @goal test
+ */
+public class TestPlugin
+ implements Mojo
+{
+
+ private Log log;
+
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ throw new MojoExecutionException( "This is meant to fail." );
+ }
+
+ public Log getLog()
+ {
+ return log;
+ }
+
+ public void setLog( Log log )
+ {
+ this.log = log;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/plugin/src/main/resources/META-INF/maven/plugin.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/plugin/src/main/resources/META-INF/maven/plugin.xml
new file mode 100644
index 00000000..35697de7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/plugin/src/main/resources/META-INF/maven/plugin.xml
@@ -0,0 +1,38 @@
+<plugin>
+ <description></description>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>mojo-config-error-maven-plugin</artifactId>
+ <version>1</version>
+ <goalPrefix>mojo-config-error</goalPrefix>
+ <isolatedRealm>false</isolatedRealm>
+ <inheritedByDefault>true</inheritedByDefault>
+ <mojos>
+ <mojo>
+ <goal>test</goal>
+ <description></description>
+ <requiresDirectInvocation>false</requiresDirectInvocation>
+ <requiresProject>true</requiresProject>
+ <requiresReports>false</requiresReports>
+ <aggregator>false</aggregator>
+ <requiresOnline>false</requiresOnline>
+ <inheritedByDefault>true</inheritedByDefault>
+ <implementation>org.plugin.TestPlugin</implementation>
+ <language>java</language>
+ <instantiationStrategy>per-lookup</instantiationStrategy>
+ <executionStrategy>once-per-session</executionStrategy>
+ <parameters>
+ <parameter>
+ <name>param</name>
+ <type>java.lang.String</type>
+ <required>true</required>
+ <editable>false</editable>
+ <description></description>
+ </parameter>
+ </parameters>
+ <configuration>
+ <param implementation="java.lang.String" default-value="something"/>
+ </configuration>
+ </mojo>
+ </mojos>
+ <dependencies/>
+</plugin>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/project/pom.xml
new file mode 100644
index 00000000..9d63df51
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/project/pom.xml
@@ -0,0 +1,45 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>mojo-config-error</artifactId>
+ <version>1</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>mojo-config-error-maven-plugin</artifactId>
+ <version>1</version>
+ <executions>
+ <execution>
+ <id>test-run</id>
+ <phase>initialize</phase>
+ <goals>
+ <goal>test</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-exec-err/plugin/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-exec-err/plugin/pom.xml
new file mode 100644
index 00000000..3347d3c7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-exec-err/plugin/pom.xml
@@ -0,0 +1,49 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>mojo-exec-err-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-exec-err/plugin/src/main/java/org/plugin/TestPlugin.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-exec-err/plugin/src/main/java/org/plugin/TestPlugin.java
new file mode 100644
index 00000000..5836f1e0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-exec-err/plugin/src/main/java/org/plugin/TestPlugin.java
@@ -0,0 +1,33 @@
+package org.plugin;
+
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+
+/**
+ * @goal test
+ */
+public class TestPlugin
+ implements Mojo
+{
+
+ private Log log;
+
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ throw new MojoExecutionException( "This is meant to fail." );
+ }
+
+ public Log getLog()
+ {
+ return log;
+ }
+
+ public void setLog( Log log )
+ {
+ this.log = log;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-exec-err/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-exec-err/project/pom.xml
new file mode 100644
index 00000000..1f10d0fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-exec-err/project/pom.xml
@@ -0,0 +1,26 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>mojo-exec-err</artifactId>
+ <version>1</version>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/plugin/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/plugin/pom.xml
new file mode 100644
index 00000000..66adaf00
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/plugin/pom.xml
@@ -0,0 +1,54 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>mojo-lookup-err-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>1</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/plugin/src/main/java/org/plugin/TestPlugin.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/plugin/src/main/java/org/plugin/TestPlugin.java
new file mode 100644
index 00000000..bc2e712d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/plugin/src/main/java/org/plugin/TestPlugin.java
@@ -0,0 +1,42 @@
+package org.plugin;
+
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+
+/**
+ * @goal test
+ * @requiresProject false
+ *
+ * @author jdcasey
+ */
+public class TestPlugin
+ implements Mojo
+{
+
+ private Log log;
+
+ /**
+ * @component role-hint="nonexistant"
+ */
+ private MavenProject project;
+
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ throw new MojoExecutionException( "THIS SHOULD NEVER BE CALLED." );
+ }
+
+ public Log getLog()
+ {
+ return log;
+ }
+
+ public void setLog( Log log )
+ {
+ this.log = log;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/project/pom.xml
new file mode 100644
index 00000000..cddcc140
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/project/pom.xml
@@ -0,0 +1,25 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>aggregate-mojo-failure</artifactId>
+ <version>1</version>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-ioex/child/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-ioex/child/pom.xml
new file mode 100644
index 00000000..b70261d1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-ioex/child/pom.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>parent-parse-ioex</artifactId>
+ <groupId>org.apache.maven.errortest</groupId>
+ <version>1</version>
+ </parent>
+ <artifactId>parent-parse-ioex-child</artifactId>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-ioex/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-ioex/pom.xml
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-ioex/pom.xml
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-xex/child/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-xex/child/pom.xml
new file mode 100644
index 00000000..3961dd48
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-xex/child/pom.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>parent-parse-xex</artifactId>
+ <groupId>org.apache.maven.errortest</groupId>
+ <version>1</version>
+ </parent>
+ <artifactId>parent-parse-xex-child</artifactId>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-xex/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-xex/pom.xml
new file mode 100644
index 00000000..7ac14c6c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-xex/pom.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>parent-parse-xex</artifactId>
+ <version>1</ver>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-err/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-err/pom.xml
new file mode 100644
index 00000000..031ce1e9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-err/pom.xml
@@ -0,0 +1,39 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>profile-activator-err</artifactId>
+ <version>1</version>
+
+ <profiles>
+ <profile>
+ <id>faulty</id>
+ <activation>
+ <custom>
+ <type>nothing</type>
+ <configuration>
+ <foo>bar</foo>
+ </configuration>
+ </custom>
+ </activation>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/ext/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/ext/pom.xml
new file mode 100644
index 00000000..0f93b9e6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/ext/pom.xml
@@ -0,0 +1,38 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>profile-activator-lookup-err-ext</artifactId>
+ <version>1</version>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/ext/src/main/java/org/ext/App.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/ext/src/main/java/org/ext/App.java
new file mode 100644
index 00000000..0701b7ae
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/ext/src/main/java/org/ext/App.java
@@ -0,0 +1,13 @@
+package org.ext;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/ext/src/main/resources/META-INF/plexus/components.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/ext/src/main/resources/META-INF/plexus/components.xml
new file mode 100644
index 00000000..74a2963c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/ext/src/main/resources/META-INF/plexus/components.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<component-set>
+ <components>
+ <component>
+ <role>org.apache.maven.profiles.activation.ProfileActivator</role>
+ <role-hint>faulty</role-hint>
+ <implementation>org.ext.App</implementation>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.artifact.ArtifactResolver</role>
+ <field-name>artifactResolver</field-name>
+ </requirement>
+ </requirements>
+ </component>
+ </components>
+</component-set> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/project/pom.xml
new file mode 100644
index 00000000..a34b838d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/project/pom.xml
@@ -0,0 +1,46 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>profile-activator-lookup-err</artifactId>
+ <version>1</version>
+
+ <profiles>
+ <profile>
+ <id>test-profile</id>
+ <activation>
+ <property>
+ <name>java.version</name>
+ </property>
+ </activation>
+ </profile>
+ </profiles>
+
+ <build>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>profile-activator-lookup-err-ext</artifactId>
+ <version>1</version>
+ </extension>
+ </extensions>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-collision/mod1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-collision/mod1/pom.xml
new file mode 100644
index 00000000..ebb7ee78
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-collision/mod1/pom.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>module</artifactId>
+ <version>1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-collision/mod2/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-collision/mod2/pom.xml
new file mode 100644
index 00000000..ebb7ee78
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-collision/mod2/pom.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>module</artifactId>
+ <version>1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-collision/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-collision/pom.xml
new file mode 100644
index 00000000..9e11c6d1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-collision/pom.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>project-collision</artifactId>
+ <version>1</version>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>mod1</module>
+ <module>mod2</module>
+ </modules>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-cycle/dep/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-cycle/dep/pom.xml
new file mode 100644
index 00000000..eb1f08fd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-cycle/dep/pom.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>project-cycle</artifactId>
+ <version>1</version>
+ </parent>
+
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>project-cycle-dep</artifactId>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-cycle/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-cycle/pom.xml
new file mode 100644
index 00000000..75c53e7b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-cycle/pom.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>project-cycle</artifactId>
+ <version>1</version>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>dep</module>
+ </modules>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>project-cycle-dep</artifactId>
+ <version>1</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-dep-missing/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-dep-missing/pom.xml
new file mode 100644
index 00000000..3c297ac1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-dep-missing/pom.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>project-dep-missing</artifactId>
+ <version>1</version>
+
+ <repositories>
+ <repository>
+ <id>central</id>
+ <url>file://${java.io.tmpdir}</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>not</groupId>
+ <artifactId>found</artifactId>
+ <version>3.8.1</version>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-dep-missing/src/main/java/org/apache/maven/test/error/mojoFailure/App.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-dep-missing/src/main/java/org/apache/maven/test/error/mojoFailure/App.java
new file mode 100644
index 00000000..dd4102a3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-dep-missing/src/main/java/org/apache/maven/test/error/mojoFailure/App.java
@@ -0,0 +1,13 @@
+package org.apache.maven.test.error.mojoFailure;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-dep-missing/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-dep-missing/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java
new file mode 100644
index 00000000..7e0144ac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-dep-missing/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java
@@ -0,0 +1,38 @@
+package org.apache.maven.test.error.mojoFailure;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/pom.xml
new file mode 100644
index 00000000..9323d4ea
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/pom.xml
@@ -0,0 +1,17 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.test.error</groupId>
+ <artifactId>project-mojo-failure</artifactId>
+ <packaging>jar</packaging>
+ <version>1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/src/main/java/org/apache/maven/test/error/mojoFailure/App.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/src/main/java/org/apache/maven/test/error/mojoFailure/App.java
new file mode 100644
index 00000000..89f091d2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/src/main/java/org/apache/maven/test/error/mojoFailure/App.java
@@ -0,0 +1,14 @@
+package org.apache.maven.test.error.mojoFailure;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ StringUtils utils;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java
new file mode 100644
index 00000000..7e0144ac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java
@@ -0,0 +1,38 @@
+package org.apache.maven.test.error.mojoFailure;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-parse-xex/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-parse-xex/pom.xml
new file mode 100644
index 00000000..fd68be6e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-parse-xex/pom.xml
@@ -0,0 +1,25 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>project-parse-xex</artifactId>
+ <version>1</ver>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-validation/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-validation/pom.xml
new file mode 100644
index 00000000..9f66c18b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-validation/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.errortest</groupId>
+ <artifactId>project-validation</artifactId>
+ <version>1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/repo-creation-err/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/repo-creation-err/pom.xml
new file mode 100644
index 00000000..d0574bd0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/repo-creation-err/pom.xml
@@ -0,0 +1,41 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>repo-creation-err</artifactId>
+ <version>1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ </dependency>
+ </dependencies>
+
+ <repositories>
+ <repository>
+ <id>test</id>
+ <url>http://www.google.com</url>
+ <layout>nothing</layout>
+ </repository>
+ </repositories>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/eventing-projects/read-with-deps/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/eventing-projects/read-with-deps/pom.xml
new file mode 100644
index 00000000..169b3921
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/eventing-projects/read-with-deps/pom.xml
@@ -0,0 +1,15 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>testing</groupId>
+ <artifactId>read-with-deps</artifactId>
+ <version>1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>tests</groupId>
+ <artifactId>dep</artifactId>
+ <version>1</version>
+ <type>pom</type>
+ </dependency>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/eventing-projects/read-with-deps/repo/tests/dep/1/dep-1.pom b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/eventing-projects/read-with-deps/repo/tests/dep/1/dep-1.pom
new file mode 100644
index 00000000..175bf210
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/eventing-projects/read-with-deps/repo/tests/dep/1/dep-1.pom
@@ -0,0 +1,6 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>testing</groupId>
+ <artifactId>dep</artifactId>
+ <version>1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/eventing-projects/simple-read-project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/eventing-projects/simple-read-project/pom.xml
new file mode 100644
index 00000000..9a3f6be4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/eventing-projects/simple-read-project/pom.xml
@@ -0,0 +1,6 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>testing</groupId>
+ <artifactId>simple-read-project</artifactId>
+ <version>1</version>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/extensions/META-INF/plexus/components.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/extensions/META-INF/plexus/components.xml
new file mode 100644
index 00000000..f38af597
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/extensions/META-INF/plexus/components.xml
@@ -0,0 +1,28 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<component-set>
+ <components>
+ <component>
+ <role>org.apache.maven.artifact.factory.ArtifactFactory</role>
+ <role-hint>default</role-hint>
+ <implementation>org.apache.maven.embedder.CustomArtifactFactory</implementation>
+ </component>
+ </components>
+</component-set> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/java/org/apache/maven/cli/CLIManagerTest.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/java/org/apache/maven/cli/CLIManagerTest.java
new file mode 100644
index 00000000..163d9d9d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/java/org/apache/maven/cli/CLIManagerTest.java
@@ -0,0 +1,108 @@
+package org.apache.maven.cli;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.apache.commons.cli.Option;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.FileUtils;
+
+/**
+ * Pseudo test to generate documentation fragment about supported CLI options.
+ * TODO such documentation generation code should not be necessary as unit test but should be run
+ * during site generation (Velocity? Doxia macro?)
+ */
+public class CLIManagerTest
+ extends PlexusTestCase
+{
+ private final static String LS = System.getProperty( "line.separator" );
+
+ private static class OptionComparator
+ implements Comparator<Option>
+ {
+ public int compare( Option opt1, Option opt2 )
+ {
+ return opt1.getOpt().compareToIgnoreCase( opt2.getOpt() );
+ }
+ }
+
+ private static class CLIManagerExtension
+ extends CLIManager
+ {
+ public Collection<Option> getOptions()
+ {
+ @SuppressWarnings( "unchecked" )
+ List<Option> optList = new ArrayList<Option>( options.getOptions() );
+ Collections.sort( optList, new OptionComparator() );
+ return optList;
+ }
+ }
+
+ public String getOptionsAsHtml()
+ {
+ StringBuilder sb = new StringBuilder();
+ boolean a = true;
+ sb.append( "<table border='1' class='zebra-striped'><tr class='a'><th><b>Options</b></th><th><b>Description</b></th></tr>" );
+ for ( Option option : new CLIManagerExtension().getOptions() )
+ {
+ a = !a;
+ sb.append( "<tr class='" ).append( a ? 'a' : 'b' ).append( "'><td><code>-<a name='" );
+ sb.append( option.getOpt() );
+ sb.append( "'>" );
+ sb.append( option.getOpt() );
+ sb.append( "</a>,--<a name='" );
+ sb.append( option.getLongOpt() );
+ sb.append( "'>" );
+ sb.append( option.getLongOpt() );
+ sb.append( "</a>" );
+ if ( option.hasArg() )
+ {
+ if ( option.hasArgName() )
+ {
+ sb.append( " &lt;" ).append( option.getArgName() ).append( "&gt;" );
+ }
+ else
+ {
+ sb.append( ' ' );
+ }
+ }
+ sb.append( "</code></td><td>" );
+ sb.append( option.getDescription() );
+ sb.append( "</td></tr>" );
+ sb.append( LS );
+ }
+ sb.append( "</table>" );
+ return sb.toString();
+ }
+
+ public void testOptionsAsHtml()
+ throws IOException
+ {
+ File options = getTestFile( "target/test-classes/options.html" );
+ FileUtils.fileWrite( options, "UTF-8", getOptionsAsHtml() );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/java/org/apache/maven/cli/CLIReportingUtilsTest.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/java/org/apache/maven/cli/CLIReportingUtilsTest.java
new file mode 100644
index 00000000..65488c7c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/java/org/apache/maven/cli/CLIReportingUtilsTest.java
@@ -0,0 +1,40 @@
+package org.apache.maven.cli;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+public class CLIReportingUtilsTest
+ extends TestCase
+{
+
+ public void testFormatDuration()
+ {
+ assertEquals( "0.001 s", CLIReportingUtils.formatDuration( 1 ) );
+ assertEquals( "0.999 s", CLIReportingUtils.formatDuration( 1000 - 1 ) );
+ assertEquals( "1.000 s", CLIReportingUtils.formatDuration( 1000 ) );
+ assertEquals( "59.999 s", CLIReportingUtils.formatDuration( 60 * 1000 - 1 ) );
+ assertEquals( "01:00 min", CLIReportingUtils.formatDuration( 60 * 1000 ) );
+ assertEquals( "59:59 min", CLIReportingUtils.formatDuration( 60 * 60 * 1000 - 1 ) );
+ assertEquals( "01:00 h", CLIReportingUtils.formatDuration( 60 * 60 * 1000 ) );
+ assertEquals( "23:59 h", CLIReportingUtils.formatDuration( 24 * 60 * 60 * 1000 - 1 ) );
+ assertEquals( "1 d 00:00 h", CLIReportingUtils.formatDuration( 24 * 60 * 60 * 1000 ) );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java
new file mode 100644
index 00000000..c8d75b10
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java
@@ -0,0 +1,110 @@
+package org.apache.maven.cli;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+import org.apache.commons.cli.ParseException;
+
+public class MavenCliTest
+ extends TestCase
+{
+ private MavenCli cli;
+
+ private String origBasedir;
+
+ protected void setUp()
+ {
+ cli = new MavenCli();
+ origBasedir = System.getProperty( MavenCli.MULTIMODULE_PROJECT_DIRECTORY );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ if ( origBasedir != null )
+ {
+ System.setProperty( MavenCli.MULTIMODULE_PROJECT_DIRECTORY, origBasedir );
+ }
+ else
+ {
+ System.getProperties().remove( MavenCli.MULTIMODULE_PROJECT_DIRECTORY );
+ }
+ super.tearDown();
+ }
+
+ public void testCalculateDegreeOfConcurrencyWithCoreMultiplier()
+ {
+ int cores = Runtime.getRuntime().availableProcessors();
+ // -T2.2C
+ assertEquals( (int) ( cores * 2.2 ), cli.calculateDegreeOfConcurrencyWithCoreMultiplier( "C2.2" ) );
+ // -TC2.2
+ assertEquals( (int) ( cores * 2.2 ), cli.calculateDegreeOfConcurrencyWithCoreMultiplier( "2.2C" ) );
+
+ try
+ {
+ cli.calculateDegreeOfConcurrencyWithCoreMultiplier( "CXXX" );
+ fail( "Should have failed with a NumberFormatException" );
+ }
+ catch ( NumberFormatException e )
+ {
+ // carry on
+ }
+ }
+
+ public void testMavenConfig()
+ throws Exception
+ {
+ System.setProperty( MavenCli.MULTIMODULE_PROJECT_DIRECTORY, new File( "src/test/projects/config" ).getCanonicalPath() );
+ CliRequest request = new CliRequest( new String[0], null );
+
+ // read .mvn/maven.config
+ cli.initialize( request );
+ cli.cli( request );
+ assertEquals( "multithreaded", request.commandLine.getOptionValue( "builder" ) );
+ assertEquals( "8", request.commandLine.getOptionValue( "threads" ) );
+
+ // override from command line
+ request = new CliRequest( new String[] { "--builder", "foobar" }, null );
+ cli.cli( request );
+ assertEquals( "foobar", request.commandLine.getOptionValue( "builder" ) );
+ }
+
+ public void testMavenConfigInvalid()
+ throws Exception
+ {
+ System.setProperty( MavenCli.MULTIMODULE_PROJECT_DIRECTORY, new File( "src/test/projects/config-illegal" ).getCanonicalPath() );
+ CliRequest request = new CliRequest( new String[0], null );
+
+ cli.initialize( request );
+ try
+ {
+ cli.cli( request );
+ fail();
+ }
+ catch ( ParseException expected )
+ {
+
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/plugin-version-references/jar-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/plugin-version-references/jar-pom.xml
new file mode 100644
index 00000000..1cce9991
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/plugin-version-references/jar-pom.xml
@@ -0,0 +1,32 @@
+<project>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/plugin-version-references/maven-plugin-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/plugin-version-references/maven-plugin-pom.xml
new file mode 100644
index 00000000..7cfd6a2f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/plugin-version-references/maven-plugin-pom.xml
@@ -0,0 +1,36 @@
+<project>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/bad-module-non-recursive/badmodule/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/bad-module-non-recursive/badmodule/pom.xml
new file mode 100644
index 00000000..7efc0a2c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/bad-module-non-recursive/badmodule/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>other</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+
+ <groupId>badmodule</groupId>
+ <artifactId>badmodule</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/bad-module-non-recursive/goodmodule/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/bad-module-non-recursive/goodmodule/pom.xml
new file mode 100644
index 00000000..639315ed
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/bad-module-non-recursive/goodmodule/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>badmodule</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+
+ <groupId>badmodule</groupId>
+ <artifactId>good</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/bad-module-non-recursive/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/bad-module-non-recursive/pom.xml
new file mode 100644
index 00000000..890e7c84
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/bad-module-non-recursive/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>badmodule</groupId>
+ <artifactId>parent</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>goodmodule</module>
+ <module>badmodule</module>
+ </modules>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/config-illegal/.mvn/maven.config b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/config-illegal/.mvn/maven.config
new file mode 100644
index 00000000..8541464a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/config-illegal/.mvn/maven.config
@@ -0,0 +1 @@
+deploy
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/config/.mvn/maven.config b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/config/.mvn/maven.config
new file mode 100644
index 00000000..3d0f13b2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/config/.mvn/maven.config
@@ -0,0 +1,2 @@
+-T8 --builder
+ multithreaded
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/invalid-goal/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/invalid-goal/pom.xml
new file mode 100644
index 00000000..d72b515a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/invalid-goal/pom.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.maven.its.mng</groupId>
+ <artifactId>test1</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <packaging>jar</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <version>2.0-beta-7</version>
+
+ <executions>
+ <execution>
+ <goals>
+ <goal>invalid-goal</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/pom.xml
new file mode 100644
index 00000000..d5973975
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/pom.xml
@@ -0,0 +1,13 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.codehaus.m2eclipse</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>project-1</artifactId>
+ <packaging>jar</packaging>
+ <name>project-1</name>
+ <url>http://maven.apache.org</url>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/src/main/java/org/codehaus/m2eclipse/App.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/src/main/java/org/codehaus/m2eclipse/App.java
new file mode 100644
index 00000000..f959dc43
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/src/main/java/org/codehaus/m2eclipse/App.java
@@ -0,0 +1,13 @@
+package org.codehaus.m2eclipse;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/src/test/java/org/codehaus/m2eclipse/AppTest.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/src/test/java/org/codehaus/m2eclipse/AppTest.java
new file mode 100644
index 00000000..69af0613
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/src/test/java/org/codehaus/m2eclipse/AppTest.java
@@ -0,0 +1,38 @@
+package org.codehaus.m2eclipse;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/repository/org/codehaus/m2eclipse/parent/1.0-SNAPSHOT/maven-metadata-company.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/repository/org/codehaus/m2eclipse/parent/1.0-SNAPSHOT/maven-metadata-company.xml
new file mode 100644
index 00000000..15db1b0d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/repository/org/codehaus/m2eclipse/parent/1.0-SNAPSHOT/maven-metadata-company.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?><metadata>
+ <groupId>org.codehaus.m2eclipse</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <versioning>
+ <snapshot>
+ <localCopy>true</localCopy>
+ </snapshot>
+ <lastUpdated>20070930165921</lastUpdated>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/repository/org/codehaus/m2eclipse/parent/1.0-SNAPSHOT/parent-1.0-SNAPSHOT.pom b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/repository/org/codehaus/m2eclipse/parent/1.0-SNAPSHOT/parent-1.0-SNAPSHOT.pom
new file mode 100644
index 00000000..4aaf1686
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/repository/org/codehaus/m2eclipse/parent/1.0-SNAPSHOT/parent-1.0-SNAPSHOT.pom
@@ -0,0 +1,18 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.codehaus.m2eclipse</groupId>
+ <artifactId>parent</artifactId>
+ <packaging>pom</packaging>
+ <version>1.0-SNAPSHOT</version>
+ <name>parent</name>
+ <url>http://maven.apache.org</url>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/repository/org/codehaus/m2eclipse/parent/maven-metadata-local.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/repository/org/codehaus/m2eclipse/parent/maven-metadata-local.xml
new file mode 100644
index 00000000..5c4412d2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/repository/org/codehaus/m2eclipse/parent/maven-metadata-local.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?><metadata>
+ <groupId>org.codehaus.m2eclipse</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <versioning>
+ <versions>
+ <version>1.0-SNAPSHOT</version>
+ </versions>
+ <lastUpdated>20070930165921</lastUpdated>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/settings.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/settings.xml
new file mode 100644
index 00000000..60c25eb8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/settings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<settings>
+ <profiles>
+ <profile>
+ <id>company</id>
+ <repositories>
+ <repository>
+ <id>repo</id>
+ <url>file:///tmp/repo</url>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </repository>
+ </repositories>
+ </profile>
+ </profiles>
+ <activeProfiles>
+ <activeProfile>company</activeProfile>
+ </activeProfiles>
+</settings>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/optional-dep/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/optional-dep/pom.xml
new file mode 100644
index 00000000..56c99e13
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/optional-dep/pom.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>optionaldependency</groupId>
+ <artifactId>p01</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+
+ <!--
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <optional>false</optional>
+ </dependency>
+ </dependencies>
+ -->
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/readProject-missingModuleIgnored/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/readProject-missingModuleIgnored/pom.xml
new file mode 100644
index 00000000..851987fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/readProject-missingModuleIgnored/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>missing.module</groupId>
+ <artifactId>parent</artifactId>
+ <version>1</version>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>child1</module>
+ </modules>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/readProject-withScmInheritance/modules/child1/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/readProject-withScmInheritance/modules/child1/pom.xml
new file mode 100644
index 00000000..d269726d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/readProject-withScmInheritance/modules/child1/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>scm.inherit</groupId>
+ <artifactId>parent</artifactId>
+ <version>1</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>child1</artifactId>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/readProject-withScmInheritance/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/readProject-withScmInheritance/pom.xml
new file mode 100644
index 00000000..3323e47d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/readProject-withScmInheritance/pom.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>scm.inherit</groupId>
+ <artifactId>parent</artifactId>
+ <version>1</version>
+ <packaging>pom</packaging>
+
+ <scm>
+ <connection>scm:svn:http://host/trunk/parent</connection>
+ <developerConnection>scm:svn:https://host/trunk/parent</developerConnection>
+ <url>http://host/viewer?path=/trunk/parent</url>
+ </scm>
+
+ <modules>
+ <module>modules/child1</module>
+ </modules>
+
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/META-INF/maven/org.apache.maven/maven-core/pom.properties b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/META-INF/maven/org.apache.maven/maven-core/pom.properties
new file mode 100644
index 00000000..8b958ebb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/META-INF/maven/org.apache.maven/maven-core/pom.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+version=2.1-SNAPSHOT \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom-with-distribution-status.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom-with-distribution-status.xml
new file mode 100644
index 00000000..0bece7fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom-with-distribution-status.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>test</artifactId>
+ <version>1.0</version>
+ <distributionManagement>
+ <status>deployed</status>
+ </distributionManagement>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom-without-dependencies.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom-without-dependencies.xml
new file mode 100644
index 00000000..ad2d6aa3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom-without-dependencies.xml
@@ -0,0 +1,30 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <name>Maven Embedder Test Project</name>
+ <version>1.0</version>
+ <description>Maven Embedder Test Project Without Any Dependencies</description>
+ <dependencies>
+ <!-- no dependencies! -->
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom.xml
new file mode 100644
index 00000000..c226875a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom.xml
@@ -0,0 +1,34 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <name>Maven Embedder Test Project</name>
+ <version>1.0</version>
+ <description>Maven Embedder Test Project</description>
+ <dependencies>
+ <dependency>
+ <groupId>plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.0.2</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom2.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom2.xml
new file mode 100644
index 00000000..b99ad32e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom2.xml
@@ -0,0 +1,48 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>embedder-test-project2</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0-SNAPSHOT</version>
+ <name>Maven Quick Start Archetype</name>
+ <url>http://maven.apache.org</url>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.2</version>
+ <scope>test</scope>
+ <type>mkleint</type>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <!-- it's here just for the extensions tag -->
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.4.3</version>
+ <extensions>true</extensions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/settings/invalid-settings.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/settings/invalid-settings.xml
new file mode 100644
index 00000000..a6e0ea96
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/settings/invalid-settings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<settings>
+ <!-- Missing end tag below -->
+ <localRepository>/Users/jvanzyl/maven-repo-local</localRepository
+</settings>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/settings/valid-settings.xml b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/settings/valid-settings.xml
new file mode 100644
index 00000000..a7693343
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/settings/valid-settings.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<settings>
+ <localRepository>/global/maven/local-repository</localRepository>
+ <pluginGroups>
+ <pluginGroup>org.codehaus.tycho</pluginGroup>
+ <pluginGroup>org.sonatype.pwt</pluginGroup>
+ </pluginGroups>
+</settings>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/pom.xml
new file mode 100644
index 00000000..2b514052
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/pom.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
+ file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language
+ governing permissions and limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.3.3</version>
+ </parent>
+
+ <artifactId>maven-model-builder</artifactId>
+
+ <name>Maven Model Builder</name>
+ <description>The effective model builder, with inheritance, profile activation, interpolation, ...</description>
+
+ <scm><!-- remove when git scm url format can accept artifact-id at the end, as automatically inherited -->
+ <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
+ <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
+ <tag>maven-3.3.3</tag>
+ </scm>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interpolation</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-builder-support</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>org.eclipse.sisu.plexus</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.sisu</groupId>
+ <artifactId>sisu-guice</artifactId>
+ <classifier>no_aop</classifier>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>xmlunit</groupId>
+ <artifactId>xmlunit</artifactId>
+ <version>1.3</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-metadata</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelBuildingListener.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelBuildingListener.java
new file mode 100644
index 00000000..5138776a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelBuildingListener.java
@@ -0,0 +1,37 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Provides a skeleton implementation for model building listeners. The methods of this class are empty.
+ *
+ * @author Benjamin Bentmann
+ */
+public class AbstractModelBuildingListener
+ implements ModelBuildingListener
+{
+
+ @Override
+ public void buildExtensionsAssembled( ModelBuildingEvent event )
+ {
+ // default does nothing
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
new file mode 100644
index 00000000..52b3c9c8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
@@ -0,0 +1,1309 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import static org.apache.maven.model.building.Result.error;
+import static org.apache.maven.model.building.Result.newResult;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.InputLocation;
+import org.apache.maven.model.InputSource;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginManagement;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.building.ModelProblem.Severity;
+import org.apache.maven.model.building.ModelProblem.Version;
+import org.apache.maven.model.composition.DependencyManagementImporter;
+import org.apache.maven.model.inheritance.InheritanceAssembler;
+import org.apache.maven.model.interpolation.ModelInterpolator;
+import org.apache.maven.model.io.ModelParseException;
+import org.apache.maven.model.management.DependencyManagementInjector;
+import org.apache.maven.model.management.PluginManagementInjector;
+import org.apache.maven.model.normalization.ModelNormalizer;
+import org.apache.maven.model.path.ModelPathTranslator;
+import org.apache.maven.model.path.ModelUrlNormalizer;
+import org.apache.maven.model.plugin.LifecycleBindingsInjector;
+import org.apache.maven.model.plugin.PluginConfigurationExpander;
+import org.apache.maven.model.plugin.ReportConfigurationExpander;
+import org.apache.maven.model.plugin.ReportingConverter;
+import org.apache.maven.model.profile.DefaultProfileActivationContext;
+import org.apache.maven.model.profile.ProfileInjector;
+import org.apache.maven.model.profile.ProfileSelector;
+import org.apache.maven.model.resolution.InvalidRepositoryException;
+import org.apache.maven.model.resolution.ModelResolver;
+import org.apache.maven.model.resolution.UnresolvableModelException;
+import org.apache.maven.model.resolution.WorkspaceModelResolver;
+import org.apache.maven.model.superpom.SuperPomProvider;
+import org.apache.maven.model.validation.ModelValidator;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+/**
+ * @author Benjamin Bentmann
+ */
+@Component( role = ModelBuilder.class )
+public class DefaultModelBuilder
+ implements ModelBuilder
+{
+ @Requirement
+ private ModelProcessor modelProcessor;
+
+ @Requirement
+ private ModelValidator modelValidator;
+
+ @Requirement
+ private ModelNormalizer modelNormalizer;
+
+ @Requirement
+ private ModelInterpolator modelInterpolator;
+
+ @Requirement
+ private ModelPathTranslator modelPathTranslator;
+
+ @Requirement
+ private ModelUrlNormalizer modelUrlNormalizer;
+
+ @Requirement
+ private SuperPomProvider superPomProvider;
+
+ @Requirement
+ private InheritanceAssembler inheritanceAssembler;
+
+ @Requirement
+ private ProfileSelector profileSelector;
+
+ @Requirement
+ private ProfileInjector profileInjector;
+
+ @Requirement
+ private PluginManagementInjector pluginManagementInjector;
+
+ @Requirement
+ private DependencyManagementInjector dependencyManagementInjector;
+
+ @Requirement
+ private DependencyManagementImporter dependencyManagementImporter;
+
+ @Requirement( optional = true )
+ private LifecycleBindingsInjector lifecycleBindingsInjector;
+
+ @Requirement
+ private PluginConfigurationExpander pluginConfigurationExpander;
+
+ @Requirement
+ private ReportConfigurationExpander reportConfigurationExpander;
+
+ @Requirement
+ private ReportingConverter reportingConverter;
+
+ public DefaultModelBuilder setModelProcessor( ModelProcessor modelProcessor )
+ {
+ this.modelProcessor = modelProcessor;
+ return this;
+ }
+
+ public DefaultModelBuilder setModelValidator( ModelValidator modelValidator )
+ {
+ this.modelValidator = modelValidator;
+ return this;
+ }
+
+ public DefaultModelBuilder setModelNormalizer( ModelNormalizer modelNormalizer )
+ {
+ this.modelNormalizer = modelNormalizer;
+ return this;
+ }
+
+ public DefaultModelBuilder setModelInterpolator( ModelInterpolator modelInterpolator )
+ {
+ this.modelInterpolator = modelInterpolator;
+ return this;
+ }
+
+ public DefaultModelBuilder setModelPathTranslator( ModelPathTranslator modelPathTranslator )
+ {
+ this.modelPathTranslator = modelPathTranslator;
+ return this;
+ }
+
+ public DefaultModelBuilder setModelUrlNormalizer( ModelUrlNormalizer modelUrlNormalizer )
+ {
+ this.modelUrlNormalizer = modelUrlNormalizer;
+ return this;
+ }
+
+ public DefaultModelBuilder setSuperPomProvider( SuperPomProvider superPomProvider )
+ {
+ this.superPomProvider = superPomProvider;
+ return this;
+ }
+
+ public DefaultModelBuilder setProfileSelector( ProfileSelector profileSelector )
+ {
+ this.profileSelector = profileSelector;
+ return this;
+ }
+
+ public DefaultModelBuilder setProfileInjector( ProfileInjector profileInjector )
+ {
+ this.profileInjector = profileInjector;
+ return this;
+ }
+
+ public DefaultModelBuilder setInheritanceAssembler( InheritanceAssembler inheritanceAssembler )
+ {
+ this.inheritanceAssembler = inheritanceAssembler;
+ return this;
+ }
+
+ public DefaultModelBuilder setDependencyManagementImporter( DependencyManagementImporter depMngmntImporter )
+ {
+ this.dependencyManagementImporter = depMngmntImporter;
+ return this;
+ }
+
+ public DefaultModelBuilder setDependencyManagementInjector( DependencyManagementInjector depMngmntInjector )
+ {
+ this.dependencyManagementInjector = depMngmntInjector;
+ return this;
+ }
+
+ public DefaultModelBuilder setLifecycleBindingsInjector( LifecycleBindingsInjector lifecycleBindingsInjector )
+ {
+ this.lifecycleBindingsInjector = lifecycleBindingsInjector;
+ return this;
+ }
+
+ public DefaultModelBuilder setPluginConfigurationExpander( PluginConfigurationExpander pluginConfigurationExpander )
+ {
+ this.pluginConfigurationExpander = pluginConfigurationExpander;
+ return this;
+ }
+
+ public DefaultModelBuilder setPluginManagementInjector( PluginManagementInjector pluginManagementInjector )
+ {
+ this.pluginManagementInjector = pluginManagementInjector;
+ return this;
+ }
+
+ public DefaultModelBuilder setReportConfigurationExpander( ReportConfigurationExpander reportConfigurationExpander )
+ {
+ this.reportConfigurationExpander = reportConfigurationExpander;
+ return this;
+ }
+
+ public DefaultModelBuilder setReportingConverter( ReportingConverter reportingConverter )
+ {
+ this.reportingConverter = reportingConverter;
+ return this;
+ }
+
+ @Override
+ public ModelBuildingResult build( ModelBuildingRequest request )
+ throws ModelBuildingException
+ {
+ // phase 1
+ DefaultModelBuildingResult result = new DefaultModelBuildingResult();
+
+ DefaultModelProblemCollector problems = new DefaultModelProblemCollector( result );
+
+ // profile activation
+ DefaultProfileActivationContext profileActivationContext = getProfileActivationContext( request );
+
+ problems.setSource( "(external profiles)" );
+ List<Profile> activeExternalProfiles = profileSelector.getActiveProfiles( request.getProfiles(),
+ profileActivationContext, problems );
+
+ result.setActiveExternalProfiles( activeExternalProfiles );
+
+ if ( !activeExternalProfiles.isEmpty() )
+ {
+ Properties profileProps = new Properties();
+ for ( Profile profile : activeExternalProfiles )
+ {
+ profileProps.putAll( profile.getProperties() );
+ }
+ profileProps.putAll( profileActivationContext.getUserProperties() );
+ profileActivationContext.setUserProperties( profileProps );
+ }
+
+ // read and validate raw model
+ Model inputModel = request.getRawModel();
+ if ( inputModel == null )
+ {
+ inputModel = readModel( request.getModelSource(), request.getPomFile(), request, problems );
+ }
+
+ problems.setRootModel( inputModel );
+
+ ModelData resultData = new ModelData( request.getModelSource(), inputModel );
+ ModelData superData = new ModelData( null, getSuperModel() );
+
+ Collection<String> parentIds = new LinkedHashSet<String>();
+ List<ModelData> lineage = new ArrayList<ModelData>();
+
+ for ( ModelData currentData = resultData; currentData != null; )
+ {
+ lineage.add( currentData );
+
+ Model rawModel = currentData.getModel();
+ currentData.setRawModel( rawModel );
+
+ Model tmpModel = rawModel.clone();
+ currentData.setModel( tmpModel );
+
+ problems.setSource( tmpModel );
+
+ // model normalization
+ modelNormalizer.mergeDuplicates( tmpModel, request, problems );
+
+ profileActivationContext.setProjectProperties( tmpModel.getProperties() );
+
+ List<Profile> activePomProfiles = profileSelector.getActiveProfiles( rawModel.getProfiles(),
+ profileActivationContext, problems );
+ currentData.setActiveProfiles( activePomProfiles );
+
+ Map<String, Activation> interpolatedActivations = getProfileActivations( rawModel, false );
+ injectProfileActivations( tmpModel, interpolatedActivations );
+
+ // profile injection
+ for ( Profile activeProfile : activePomProfiles )
+ {
+ profileInjector.injectProfile( tmpModel, activeProfile, request, problems );
+ }
+
+ if ( currentData == resultData )
+ {
+ for ( Profile activeProfile : activeExternalProfiles )
+ {
+ profileInjector.injectProfile( tmpModel, activeProfile, request, problems );
+ }
+ }
+
+ if ( currentData == superData )
+ {
+ break;
+ }
+
+ configureResolver( request.getModelResolver(), tmpModel, problems );
+
+ ModelData parentData = readParent( tmpModel, currentData.getSource(), request, problems );
+
+ if ( parentData == null )
+ {
+ currentData = superData;
+ }
+ else if ( currentData == resultData )
+ { // First iteration - add initial parent id after version resolution.
+ currentData.setGroupId( currentData.getRawModel().getGroupId() == null ? parentData.getGroupId()
+ : currentData.getRawModel()
+ .getGroupId() );
+
+ currentData.setVersion( currentData.getRawModel().getVersion() == null ? parentData.getVersion()
+ : currentData.getRawModel()
+ .getVersion() );
+
+ currentData.setArtifactId( currentData.getRawModel().getArtifactId() );
+ parentIds.add( currentData.getId() );
+ // Reset - only needed for 'getId'.
+ currentData.setGroupId( null );
+ currentData.setArtifactId( null );
+ currentData.setVersion( null );
+ currentData = parentData;
+ }
+ else if ( !parentIds.add( parentData.getId() ) )
+ {
+ String message = "The parents form a cycle: ";
+ for ( String modelId : parentIds )
+ {
+ message += modelId + " -> ";
+ }
+ message += parentData.getId();
+
+ problems.add( new ModelProblemCollectorRequest( ModelProblem.Severity.FATAL, ModelProblem.Version.BASE )
+ .setMessage( message ) );
+
+ throw problems.newModelBuildingException();
+ }
+ else
+ {
+ currentData = parentData;
+ }
+ }
+
+ problems.setSource( inputModel );
+ checkPluginVersions( lineage, request, problems );
+
+ // inheritance assembly
+ assembleInheritance( lineage, request, problems );
+
+ Model resultModel = resultData.getModel();
+
+ problems.setSource( resultModel );
+ problems.setRootModel( resultModel );
+
+ // model interpolation
+ resultModel = interpolateModel( resultModel, request, problems );
+ resultData.setModel( resultModel );
+
+ // url normalization
+ modelUrlNormalizer.normalize( resultModel, request );
+
+ // Now the fully interpolated model is available: reconfigure the resolver
+ configureResolver( request.getModelResolver(), resultModel, problems, true );
+
+ resultData.setGroupId( resultModel.getGroupId() );
+ resultData.setArtifactId( resultModel.getArtifactId() );
+ resultData.setVersion( resultModel.getVersion() );
+
+ result.setEffectiveModel( resultModel );
+
+ for ( ModelData currentData : lineage )
+ {
+ String modelId = ( currentData != superData ) ? currentData.getId() : "";
+
+ result.addModelId( modelId );
+ result.setActivePomProfiles( modelId, currentData.getActiveProfiles() );
+ result.setRawModel( modelId, currentData.getRawModel() );
+ }
+
+ if ( !request.isTwoPhaseBuilding() )
+ {
+ build( request, result );
+ }
+
+ return result;
+ }
+
+ @Override
+ public ModelBuildingResult build( ModelBuildingRequest request, ModelBuildingResult result )
+ throws ModelBuildingException
+ {
+ return build( request, result, new LinkedHashSet<String>() );
+ }
+
+ private ModelBuildingResult build( ModelBuildingRequest request, ModelBuildingResult result,
+ Collection<String> imports )
+ throws ModelBuildingException
+ {
+ // phase 2
+ Model resultModel = result.getEffectiveModel();
+
+ DefaultModelProblemCollector problems = new DefaultModelProblemCollector( result );
+ problems.setSource( resultModel );
+ problems.setRootModel( resultModel );
+
+ // model path translation
+ modelPathTranslator.alignToBaseDirectory( resultModel, resultModel.getProjectDirectory(), request );
+
+ // plugin management injection
+ pluginManagementInjector.injectManagement( resultModel, request, problems );
+
+ fireEvent( resultModel, request, problems, ModelBuildingEventCatapult.BUILD_EXTENSIONS_ASSEMBLED );
+
+ if ( request.isProcessPlugins() )
+ {
+ if ( lifecycleBindingsInjector == null )
+ {
+ throw new IllegalStateException( "lifecycle bindings injector is missing" );
+ }
+
+ // lifecycle bindings injection
+ lifecycleBindingsInjector.injectLifecycleBindings( resultModel, request, problems );
+ }
+
+ // dependency management import
+ importDependencyManagement( resultModel, request, problems, imports );
+
+ // dependency management injection
+ dependencyManagementInjector.injectManagement( resultModel, request, problems );
+
+ modelNormalizer.injectDefaultValues( resultModel, request, problems );
+
+ if ( request.isProcessPlugins() )
+ {
+ // reports configuration
+ reportConfigurationExpander.expandPluginConfiguration( resultModel, request, problems );
+
+ // reports conversion to decoupled site plugin
+ reportingConverter.convertReporting( resultModel, request, problems );
+
+ // plugins configuration
+ pluginConfigurationExpander.expandPluginConfiguration( resultModel, request, problems );
+ }
+
+ // effective model validation
+ modelValidator.validateEffectiveModel( resultModel, request, problems );
+
+ if ( hasModelErrors( problems ) )
+ {
+ throw problems.newModelBuildingException();
+ }
+
+ return result;
+ }
+
+ @Override
+ public Result<? extends Model> buildRawModel( File pomFile, int validationLevel, boolean locationTracking )
+ {
+ final ModelBuildingRequest request = new DefaultModelBuildingRequest().setValidationLevel( validationLevel )
+ .setLocationTracking( locationTracking );
+ final DefaultModelProblemCollector collector =
+ new DefaultModelProblemCollector( new DefaultModelBuildingResult() );
+ try
+ {
+ return newResult( readModel( null, pomFile, request, collector ), collector.getProblems() );
+ }
+ catch ( ModelBuildingException e )
+ {
+ return error( collector.getProblems() );
+ }
+ }
+
+ private Model readModel( ModelSource modelSource, File pomFile, ModelBuildingRequest request,
+ DefaultModelProblemCollector problems )
+ throws ModelBuildingException
+ {
+ Model model;
+
+ if ( modelSource == null )
+ {
+ if ( pomFile != null )
+ {
+ modelSource = new FileModelSource( pomFile );
+ }
+ else
+ {
+ throw new IllegalArgumentException( "neither model source nor input file are specified" );
+ }
+ }
+
+ problems.setSource( modelSource.getLocation() );
+ try
+ {
+ boolean strict = request.getValidationLevel() >= ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0;
+ InputSource source = request.isLocationTracking() ? new InputSource() : null;
+
+ Map<String, Object> options = new HashMap<String, Object>();
+ options.put( ModelProcessor.IS_STRICT, strict );
+ options.put( ModelProcessor.INPUT_SOURCE, source );
+ options.put( ModelProcessor.SOURCE, modelSource );
+
+ try
+ {
+ model = modelProcessor.read( modelSource.getInputStream(), options );
+ }
+ catch ( ModelParseException e )
+ {
+ if ( !strict )
+ {
+ throw e;
+ }
+
+ options.put( ModelProcessor.IS_STRICT, Boolean.FALSE );
+
+ try
+ {
+ model = modelProcessor.read( modelSource.getInputStream(), options );
+ }
+ catch ( ModelParseException ne )
+ {
+ // still unreadable even in non-strict mode, rethrow original error
+ throw e;
+ }
+
+ if ( pomFile != null )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.V20 )
+ .setMessage( "Malformed POM " + modelSource.getLocation() + ": " + e.getMessage() )
+ .setException( e ) );
+ }
+ else
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.WARNING, Version.V20 )
+ .setMessage( "Malformed POM " + modelSource.getLocation() + ": " + e.getMessage() )
+ .setException( e ) );
+ }
+ }
+
+ if ( source != null )
+ {
+ source.setModelId( ModelProblemUtils.toId( model ) );
+ source.setLocation( modelSource.getLocation() );
+ }
+ }
+ catch ( ModelParseException e )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.BASE )
+ .setMessage( "Non-parseable POM " + modelSource.getLocation() + ": " + e.getMessage() )
+ .setException( e ) );
+ throw problems.newModelBuildingException();
+ }
+ catch ( IOException e )
+ {
+ String msg = e.getMessage();
+ if ( msg == null || msg.length() <= 0 )
+ {
+ // NOTE: There's java.nio.charset.MalformedInputException and sun.io.MalformedInputException
+ if ( e.getClass().getName().endsWith( "MalformedInputException" ) )
+ {
+ msg = "Some input bytes do not match the file encoding.";
+ }
+ else
+ {
+ msg = e.getClass().getSimpleName();
+ }
+ }
+ problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.BASE )
+ .setMessage( "Non-readable POM " + modelSource.getLocation() + ": " + msg ).setException( e ) );
+ throw problems.newModelBuildingException();
+ }
+
+ model.setPomFile( pomFile );
+
+ problems.setSource( model );
+ modelValidator.validateRawModel( model, request, problems );
+
+ if ( hasFatalErrors( problems ) )
+ {
+ throw problems.newModelBuildingException();
+ }
+
+ return model;
+ }
+
+ private DefaultProfileActivationContext getProfileActivationContext( ModelBuildingRequest request )
+ {
+ DefaultProfileActivationContext context = new DefaultProfileActivationContext();
+
+ context.setActiveProfileIds( request.getActiveProfileIds() );
+ context.setInactiveProfileIds( request.getInactiveProfileIds() );
+ context.setSystemProperties( request.getSystemProperties() );
+ context.setUserProperties( request.getUserProperties() );
+ context.setProjectDirectory( ( request.getPomFile() != null ) ? request.getPomFile().getParentFile() : null );
+
+ return context;
+ }
+
+ private void configureResolver( ModelResolver modelResolver, Model model, DefaultModelProblemCollector problems )
+ {
+ configureResolver( modelResolver, model, problems, false );
+ }
+
+ private void configureResolver( ModelResolver modelResolver, Model model, DefaultModelProblemCollector problems,
+ boolean replaceRepositories )
+ {
+ if ( modelResolver == null )
+ {
+ return;
+ }
+
+ problems.setSource( model );
+
+ List<Repository> repositories = model.getRepositories();
+
+ for ( Repository repository : repositories )
+ {
+ try
+ {
+ modelResolver.addRepository( repository, replaceRepositories );
+ }
+ catch ( InvalidRepositoryException e )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( "Invalid repository " + repository.getId() + ": " + e.getMessage() )
+ .setLocation( repository.getLocation( "" ) ).setException( e ) );
+ }
+ }
+ }
+
+ private void checkPluginVersions( List<ModelData> lineage, ModelBuildingRequest request,
+ ModelProblemCollector problems )
+ {
+ if ( request.getValidationLevel() < ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 )
+ {
+ return;
+ }
+
+ Map<String, Plugin> plugins = new HashMap<String, Plugin>();
+ Map<String, String> versions = new HashMap<String, String>();
+ Map<String, String> managedVersions = new HashMap<String, String>();
+
+ for ( int i = lineage.size() - 1; i >= 0; i-- )
+ {
+ Model model = lineage.get( i ).getModel();
+ Build build = model.getBuild();
+ if ( build != null )
+ {
+ for ( Plugin plugin : build.getPlugins() )
+ {
+ String key = plugin.getKey();
+ if ( versions.get( key ) == null )
+ {
+ versions.put( key, plugin.getVersion() );
+ plugins.put( key, plugin );
+ }
+ }
+ PluginManagement mngt = build.getPluginManagement();
+ if ( mngt != null )
+ {
+ for ( Plugin plugin : mngt.getPlugins() )
+ {
+ String key = plugin.getKey();
+ if ( managedVersions.get( key ) == null )
+ {
+ managedVersions.put( key, plugin.getVersion() );
+ }
+ }
+ }
+ }
+ }
+
+ for ( String key : versions.keySet() )
+ {
+ if ( versions.get( key ) == null && managedVersions.get( key ) == null )
+ {
+ InputLocation location = plugins.get( key ).getLocation( "" );
+ problems
+ .add( new ModelProblemCollectorRequest( Severity.WARNING, Version.V20 )
+ .setMessage( "'build.plugins.plugin.version' for " + key + " is missing." )
+ .setLocation( location ) );
+ }
+ }
+ }
+
+ private void assembleInheritance( List<ModelData> lineage, ModelBuildingRequest request,
+ ModelProblemCollector problems )
+ {
+ for ( int i = lineage.size() - 2; i >= 0; i-- )
+ {
+ Model parent = lineage.get( i + 1 ).getModel();
+ Model child = lineage.get( i ).getModel();
+ inheritanceAssembler.assembleModelInheritance( child, parent, request, problems );
+ }
+ }
+
+ private Map<String, Activation> getProfileActivations( Model model, boolean clone )
+ {
+ Map<String, Activation> activations = new HashMap<String, Activation>();
+ for ( Profile profile : model.getProfiles() )
+ {
+ Activation activation = profile.getActivation();
+
+ if ( activation == null )
+ {
+ continue;
+ }
+
+ if ( clone )
+ {
+ activation = activation.clone();
+ }
+
+ activations.put( profile.getId(), activation );
+ }
+
+ return activations;
+ }
+
+ private void injectProfileActivations( Model model, Map<String, Activation> activations )
+ {
+ for ( Profile profile : model.getProfiles() )
+ {
+ Activation activation = profile.getActivation();
+
+ if ( activation == null )
+ {
+ continue;
+ }
+
+ // restore activation
+ profile.setActivation( activations.get( profile.getId() ) );
+ }
+ }
+
+ private Model interpolateModel( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
+ {
+ // save profile activations before interpolation, since they are evaluated with limited scope
+ Map<String, Activation> originalActivations = getProfileActivations( model, true );
+
+ Model result = modelInterpolator.interpolateModel( model, model.getProjectDirectory(), request, problems );
+ result.setPomFile( model.getPomFile() );
+
+ // restore profiles with file activation to their value before full interpolation
+ injectProfileActivations( model, originalActivations );
+
+ return result;
+ }
+
+ private ModelData readParent( Model childModel, ModelSource childSource, ModelBuildingRequest request,
+ DefaultModelProblemCollector problems )
+ throws ModelBuildingException
+ {
+ ModelData parentData;
+
+ Parent parent = childModel.getParent();
+
+ if ( parent != null )
+ {
+ String groupId = parent.getGroupId();
+ String artifactId = parent.getArtifactId();
+ String version = parent.getVersion();
+
+ parentData = getCache( request.getModelCache(), groupId, artifactId, version, ModelCacheTag.RAW );
+
+ if ( parentData == null )
+ {
+ parentData = readParentLocally( childModel, childSource, request, problems );
+
+ if ( parentData == null )
+ {
+ parentData = readParentExternally( childModel, request, problems );
+ }
+
+ putCache( request.getModelCache(), groupId, artifactId, version, ModelCacheTag.RAW, parentData );
+ }
+ else
+ {
+ /*
+ * NOTE: This is a sanity check of the cache hit. If the cached parent POM was locally resolved, the
+ * child's <relativePath> should point at that parent, too. If it doesn't, we ignore the cache and
+ * resolve externally, to mimic the behavior if the cache didn't exist in the first place. Otherwise,
+ * the cache would obscure a bad POM.
+ */
+
+ File pomFile = parentData.getModel().getPomFile();
+ if ( pomFile != null )
+ {
+ ModelSource expectedParentSource = getParentPomFile( childModel, childSource );
+
+ if ( expectedParentSource instanceof ModelSource2
+ && !pomFile.toURI().equals( ( (ModelSource2) expectedParentSource ).getLocationURI() ) )
+ {
+ parentData = readParentExternally( childModel, request, problems );
+ }
+ }
+ }
+
+ Model parentModel = parentData.getModel();
+
+ if ( !"pom".equals( parentModel.getPackaging() ) )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( "Invalid packaging for parent POM " + ModelProblemUtils.toSourceHint( parentModel )
+ + ", must be \"pom\" but is \"" + parentModel.getPackaging() + "\"" )
+ .setLocation( parentModel.getLocation( "packaging" ) ) );
+ }
+ }
+ else
+ {
+ parentData = null;
+ }
+
+ return parentData;
+ }
+
+ private ModelData readParentLocally( Model childModel, ModelSource childSource, ModelBuildingRequest request,
+ DefaultModelProblemCollector problems )
+ throws ModelBuildingException
+ {
+ final Parent parent = childModel.getParent();
+ final ModelSource candidateSource;
+ final Model candidateModel;
+ final WorkspaceModelResolver resolver = request.getWorkspaceModelResolver();
+ if ( resolver == null )
+ {
+ candidateSource = getParentPomFile( childModel, childSource );
+
+ if ( candidateSource == null )
+ {
+ return null;
+ }
+
+ File pomFile = null;
+ if ( candidateSource instanceof FileModelSource )
+ {
+ pomFile = ( (FileModelSource) candidateSource ).getPomFile();
+ }
+
+ candidateModel = readModel( candidateSource, pomFile, request, problems );
+ }
+ else
+ {
+ try
+ {
+ candidateModel =
+ resolver.resolveRawModel( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
+ }
+ catch ( UnresolvableModelException e )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.BASE ) //
+ .setMessage( e.getMessage().toString() ).setLocation( parent.getLocation( "" ) ).setException( e ) );
+ throw problems.newModelBuildingException();
+ }
+ if ( candidateModel == null )
+ {
+ return null;
+ }
+ candidateSource = new FileModelSource( candidateModel.getPomFile() );
+ }
+
+ //
+ // TODO:jvz Why isn't all this checking the job of the duty of the workspace resolver, we know that we
+ // have a model that is suitable, yet more checks are done here and the one for the version is problematic
+ // before because with parents as ranges it will never work in this scenario.
+ //
+
+ String groupId = candidateModel.getGroupId();
+ if ( groupId == null && candidateModel.getParent() != null )
+ {
+ groupId = candidateModel.getParent().getGroupId();
+ }
+ String artifactId = candidateModel.getArtifactId();
+ String version = candidateModel.getVersion();
+ if ( version == null && candidateModel.getParent() != null )
+ {
+ version = candidateModel.getParent().getVersion();
+ }
+
+ if ( groupId == null || !groupId.equals( parent.getGroupId() ) || artifactId == null
+ || !artifactId.equals( parent.getArtifactId() ) )
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+ buffer.append( "'parent.relativePath'" );
+ if ( childModel != problems.getRootModel() )
+ {
+ buffer.append( " of POM " ).append( ModelProblemUtils.toSourceHint( childModel ) );
+ }
+ buffer.append( " points at " ).append( groupId ).append( ":" ).append( artifactId );
+ buffer.append( " instead of " ).append( parent.getGroupId() ).append( ":" );
+ buffer.append( parent.getArtifactId() ).append( ", please verify your project structure" );
+
+ problems.setSource( childModel );
+ problems.add( new ModelProblemCollectorRequest( Severity.WARNING, Version.BASE )
+ .setMessage( buffer.toString() ).setLocation( parent.getLocation( "" ) ) );
+ return null;
+ }
+
+ //
+ // Here we just need to know that a version is fine to use but this validation we can do in our workspace
+ // resolver.
+ //
+
+ /*
+ * if ( version == null || !version.equals( parent.getVersion() ) ) { return null; }
+ */
+
+ ModelData parentData = new ModelData( candidateSource, candidateModel, groupId, artifactId, version );
+
+ return parentData;
+ }
+
+ private ModelSource getParentPomFile( Model childModel, ModelSource source )
+ {
+ if ( !( source instanceof ModelSource2 ) )
+ {
+ return null;
+ }
+
+ String parentPath = childModel.getParent().getRelativePath();
+
+ if ( parentPath == null || parentPath.length() <= 0 )
+ {
+ return null;
+ }
+
+ return ( (ModelSource2) source ).getRelatedSource( parentPath );
+ }
+
+ private ModelData readParentExternally( Model childModel, ModelBuildingRequest request,
+ DefaultModelProblemCollector problems )
+ throws ModelBuildingException
+ {
+ problems.setSource( childModel );
+
+ Parent parent = childModel.getParent().clone();
+
+ String groupId = parent.getGroupId();
+ String artifactId = parent.getArtifactId();
+ String version = parent.getVersion();
+
+ ModelResolver modelResolver = request.getModelResolver();
+
+ if ( modelResolver == null )
+ {
+ throw new IllegalArgumentException( "no model resolver provided, cannot resolve parent POM "
+ + ModelProblemUtils.toId( groupId, artifactId, version ) + " for POM "
+ + ModelProblemUtils.toSourceHint( childModel ) );
+ }
+
+ ModelSource modelSource;
+ try
+ {
+ modelSource = modelResolver.resolveModel( parent );
+ }
+ catch ( UnresolvableModelException e )
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+ buffer.append( "Non-resolvable parent POM" );
+ if ( !containsCoordinates( e.getMessage(), groupId, artifactId, version ) )
+ {
+ buffer.append( " " ).append( ModelProblemUtils.toId( groupId, artifactId, version ) );
+ }
+ if ( childModel != problems.getRootModel() )
+ {
+ buffer.append( " for " ).append( ModelProblemUtils.toId( childModel ) );
+ }
+ buffer.append( ": " ).append( e.getMessage() );
+ if ( childModel.getProjectDirectory() != null )
+ {
+ if ( parent.getRelativePath() == null || parent.getRelativePath().length() <= 0 )
+ {
+ buffer.append( " and 'parent.relativePath' points at no local POM" );
+ }
+ else
+ {
+ buffer.append( " and 'parent.relativePath' points at wrong local POM" );
+ }
+ }
+
+ problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.BASE )
+ .setMessage( buffer.toString() ).setLocation( parent.getLocation( "" ) ).setException( e ) );
+ throw problems.newModelBuildingException();
+ }
+
+ ModelBuildingRequest lenientRequest = request;
+ if ( request.getValidationLevel() > ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 )
+ {
+ lenientRequest = new FilterModelBuildingRequest( request )
+ {
+ @Override
+ public int getValidationLevel()
+ {
+ return ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0;
+ }
+ };
+ }
+
+ Model parentModel = readModel( modelSource, null, lenientRequest, problems );
+
+ if ( !parent.getVersion().equals( version ) )
+ {
+ if ( childModel.getVersion() == null )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.V31 )
+ .setMessage( "Version must be a constant" ).setLocation( childModel.getLocation( "" ) ) );
+
+ }
+ else
+ {
+ if ( childModel.getVersion().indexOf( "${" ) > -1 )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.V31 )
+ .setMessage( "Version must be a constant" )
+ .setLocation( childModel.getLocation( "version" ) ) );
+
+ }
+ }
+
+ // MNG-2199: What else to check here ?
+ }
+
+ ModelData parentData = new ModelData( modelSource, parentModel, parent.getGroupId(), parent.getArtifactId(),
+ parent.getVersion() );
+
+ return parentData;
+ }
+
+ private Model getSuperModel()
+ {
+ return superPomProvider.getSuperModel( "4.0.0" ).clone();
+ }
+
+ private void importDependencyManagement( Model model, ModelBuildingRequest request,
+ DefaultModelProblemCollector problems, Collection<String> importIds )
+ {
+ DependencyManagement depMngt = model.getDependencyManagement();
+
+ if ( depMngt == null )
+ {
+ return;
+ }
+
+ String importing = model.getGroupId() + ':' + model.getArtifactId() + ':' + model.getVersion();
+
+ importIds.add( importing );
+
+ final WorkspaceModelResolver workspaceResolver = request.getWorkspaceModelResolver();
+ final ModelResolver modelResolver = request.getModelResolver();
+
+ ModelBuildingRequest importRequest = null;
+
+ List<DependencyManagement> importMngts = null;
+
+ for ( Iterator<Dependency> it = depMngt.getDependencies().iterator(); it.hasNext(); )
+ {
+ Dependency dependency = it.next();
+
+ if ( !"pom".equals( dependency.getType() ) || !"import".equals( dependency.getScope() ) )
+ {
+ continue;
+ }
+
+ it.remove();
+
+ String groupId = dependency.getGroupId();
+ String artifactId = dependency.getArtifactId();
+ String version = dependency.getVersion();
+
+ if ( groupId == null || groupId.length() <= 0 )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( "'dependencyManagement.dependencies.dependency.groupId' for "
+ + dependency.getManagementKey() + " is missing." )
+ .setLocation( dependency.getLocation( "" ) ) );
+ continue;
+ }
+ if ( artifactId == null || artifactId.length() <= 0 )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( "'dependencyManagement.dependencies.dependency.artifactId' for "
+ + dependency.getManagementKey() + " is missing." )
+ .setLocation( dependency.getLocation( "" ) ) );
+ continue;
+ }
+ if ( version == null || version.length() <= 0 )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( "'dependencyManagement.dependencies.dependency.version' for "
+ + dependency.getManagementKey() + " is missing." )
+ .setLocation( dependency.getLocation( "" ) ) );
+ continue;
+ }
+
+ String imported = groupId + ':' + artifactId + ':' + version;
+
+ if ( importIds.contains( imported ) )
+ {
+ String message = "The dependencies of type=pom and with scope=import form a cycle: ";
+ for ( String modelId : importIds )
+ {
+ message += modelId + " -> ";
+ }
+ message += imported;
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE ).setMessage( message ) );
+
+ continue;
+ }
+
+ DependencyManagement importMngt = getCache( request.getModelCache(), groupId, artifactId, version,
+ ModelCacheTag.IMPORT );
+
+ if ( importMngt == null )
+ {
+ if ( workspaceResolver == null && modelResolver == null )
+ {
+ throw new IllegalArgumentException( "no model resolver provided, cannot resolve import POM "
+ + ModelProblemUtils.toId( groupId, artifactId, version ) + " for POM "
+ + ModelProblemUtils.toSourceHint( model ) );
+ }
+
+ Model importModel = null;
+ if ( workspaceResolver != null )
+ {
+ try
+ {
+ importModel = workspaceResolver.resolveEffectiveModel( groupId, artifactId, version );
+ }
+ catch ( UnresolvableModelException e )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.BASE )
+ .setMessage( e.getMessage().toString() ).setException( e ) );
+ continue;
+ }
+ }
+
+ // no workspace resolver or workspace resolver returned null (i.e. model not in workspace)
+ if ( importModel == null )
+ {
+ final ModelSource importSource;
+ try
+ {
+ importSource = modelResolver.resolveModel( groupId, artifactId, version );
+ }
+ catch ( UnresolvableModelException e )
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+ buffer.append( "Non-resolvable import POM" );
+ if ( !containsCoordinates( e.getMessage(), groupId, artifactId, version ) )
+ {
+ buffer.append( " " ).append( ModelProblemUtils.toId( groupId, artifactId, version ) );
+ }
+ buffer.append( ": " ).append( e.getMessage() );
+
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( buffer.toString() ).setLocation( dependency.getLocation( "" ) )
+ .setException( e ) );
+ continue;
+ }
+
+ if ( importRequest == null )
+ {
+ importRequest = new DefaultModelBuildingRequest();
+ importRequest.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL );
+ importRequest.setModelCache( request.getModelCache() );
+ importRequest.setSystemProperties( request.getSystemProperties() );
+ importRequest.setUserProperties( request.getUserProperties() );
+ importRequest.setLocationTracking( request.isLocationTracking() );
+ }
+
+ importRequest.setModelSource( importSource );
+ importRequest.setModelResolver( modelResolver.newCopy() );
+
+ final ModelBuildingResult importResult;
+ try
+ {
+ importResult = build( importRequest );
+ }
+ catch ( ModelBuildingException e )
+ {
+ problems.addAll( e.getProblems() );
+ continue;
+ }
+
+ problems.addAll( importResult.getProblems() );
+
+ importModel = importResult.getEffectiveModel();
+ }
+
+ importMngt = importModel.getDependencyManagement();
+
+ if ( importMngt == null )
+ {
+ importMngt = new DependencyManagement();
+ }
+
+ putCache( request.getModelCache(), groupId, artifactId, version, ModelCacheTag.IMPORT, importMngt );
+ }
+
+ if ( importMngts == null )
+ {
+ importMngts = new ArrayList<DependencyManagement>();
+ }
+
+ importMngts.add( importMngt );
+ }
+
+ importIds.remove( importing );
+
+ dependencyManagementImporter.importManagement( model, importMngts, request, problems );
+ }
+
+ private <T> void putCache( ModelCache modelCache, String groupId, String artifactId, String version,
+ ModelCacheTag<T> tag, T data )
+ {
+ if ( modelCache != null )
+ {
+ modelCache.put( groupId, artifactId, version, tag.getName(), tag.intoCache( data ) );
+ }
+ }
+
+ private <T> T getCache( ModelCache modelCache, String groupId, String artifactId, String version,
+ ModelCacheTag<T> tag )
+ {
+ if ( modelCache != null )
+ {
+ Object data = modelCache.get( groupId, artifactId, version, tag.getName() );
+ if ( data != null )
+ {
+ return tag.fromCache( tag.getType().cast( data ) );
+ }
+ }
+ return null;
+ }
+
+ private void fireEvent( Model model, ModelBuildingRequest request, ModelProblemCollector problems,
+ ModelBuildingEventCatapult catapult )
+ throws ModelBuildingException
+ {
+ ModelBuildingListener listener = request.getModelBuildingListener();
+
+ if ( listener != null )
+ {
+ ModelBuildingEvent event = new DefaultModelBuildingEvent( model, request, problems );
+
+ catapult.fire( listener, event );
+ }
+ }
+
+ private boolean containsCoordinates( String message, String groupId, String artifactId, String version )
+ {
+ return message != null && ( groupId == null || message.contains( groupId ) )
+ && ( artifactId == null || message.contains( artifactId ) )
+ && ( version == null || message.contains( version ) );
+ }
+
+ protected boolean hasModelErrors( ModelProblemCollectorExt problems )
+ {
+ if ( problems instanceof DefaultModelProblemCollector )
+ {
+ return ( (DefaultModelProblemCollector) problems ).hasErrors();
+ }
+ else
+ {
+ // the default execution path only knows the DefaultModelProblemCollector,
+ // only reason it's not in signature is because it's package private
+ throw new IllegalStateException();
+ }
+ }
+
+ protected boolean hasFatalErrors( ModelProblemCollectorExt problems )
+ {
+ if ( problems instanceof DefaultModelProblemCollector )
+ {
+ return ( (DefaultModelProblemCollector) problems ).hasFatalErrors();
+ }
+ else
+ {
+ // the default execution path only knows the DefaultModelProblemCollector,
+ // only reason it's not in signature is because it's package private
+ throw new IllegalStateException();
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java
new file mode 100644
index 00000000..36a0f46a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java
@@ -0,0 +1,243 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.composition.DefaultDependencyManagementImporter;
+import org.apache.maven.model.composition.DependencyManagementImporter;
+import org.apache.maven.model.inheritance.DefaultInheritanceAssembler;
+import org.apache.maven.model.inheritance.InheritanceAssembler;
+import org.apache.maven.model.interpolation.ModelInterpolator;
+import org.apache.maven.model.interpolation.StringSearchModelInterpolator;
+import org.apache.maven.model.io.DefaultModelReader;
+import org.apache.maven.model.io.ModelReader;
+import org.apache.maven.model.locator.DefaultModelLocator;
+import org.apache.maven.model.locator.ModelLocator;
+import org.apache.maven.model.management.DefaultDependencyManagementInjector;
+import org.apache.maven.model.management.DefaultPluginManagementInjector;
+import org.apache.maven.model.management.DependencyManagementInjector;
+import org.apache.maven.model.management.PluginManagementInjector;
+import org.apache.maven.model.normalization.DefaultModelNormalizer;
+import org.apache.maven.model.normalization.ModelNormalizer;
+import org.apache.maven.model.path.DefaultModelPathTranslator;
+import org.apache.maven.model.path.DefaultModelUrlNormalizer;
+import org.apache.maven.model.path.DefaultPathTranslator;
+import org.apache.maven.model.path.DefaultUrlNormalizer;
+import org.apache.maven.model.path.ModelPathTranslator;
+import org.apache.maven.model.path.ModelUrlNormalizer;
+import org.apache.maven.model.path.PathTranslator;
+import org.apache.maven.model.path.UrlNormalizer;
+import org.apache.maven.model.plugin.DefaultPluginConfigurationExpander;
+import org.apache.maven.model.plugin.DefaultReportConfigurationExpander;
+import org.apache.maven.model.plugin.DefaultReportingConverter;
+import org.apache.maven.model.plugin.LifecycleBindingsInjector;
+import org.apache.maven.model.plugin.PluginConfigurationExpander;
+import org.apache.maven.model.plugin.ReportConfigurationExpander;
+import org.apache.maven.model.plugin.ReportingConverter;
+import org.apache.maven.model.profile.DefaultProfileInjector;
+import org.apache.maven.model.profile.DefaultProfileSelector;
+import org.apache.maven.model.profile.ProfileInjector;
+import org.apache.maven.model.profile.ProfileSelector;
+import org.apache.maven.model.profile.activation.FileProfileActivator;
+import org.apache.maven.model.profile.activation.JdkVersionProfileActivator;
+import org.apache.maven.model.profile.activation.OperatingSystemProfileActivator;
+import org.apache.maven.model.profile.activation.ProfileActivator;
+import org.apache.maven.model.profile.activation.PropertyProfileActivator;
+import org.apache.maven.model.superpom.DefaultSuperPomProvider;
+import org.apache.maven.model.superpom.SuperPomProvider;
+import org.apache.maven.model.validation.DefaultModelValidator;
+import org.apache.maven.model.validation.ModelValidator;
+
+/**
+ * A factory to create model builder instances when no dependency injection is available. <em>Note:</em> This class is
+ * only meant as a utility for developers that want to employ the model builder outside of the Maven build system, Maven
+ * plugins should always acquire model builder instances via dependency injection. Developers might want to subclass
+ * this factory to provide custom implementations for some of the components used by the model builder.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DefaultModelBuilderFactory
+{
+
+ protected ModelProcessor newModelProcessor()
+ {
+ DefaultModelProcessor processor = new DefaultModelProcessor();
+ processor.setModelLocator( newModelLocator() );
+ processor.setModelReader( newModelReader() );
+ return processor;
+ }
+
+ protected ModelLocator newModelLocator()
+ {
+ return new DefaultModelLocator();
+ }
+
+ protected ModelReader newModelReader()
+ {
+ return new DefaultModelReader();
+ }
+
+ protected ProfileSelector newProfileSelector()
+ {
+ DefaultProfileSelector profileSelector = new DefaultProfileSelector();
+
+ for ( ProfileActivator activator : newProfileActivators() )
+ {
+ profileSelector.addProfileActivator( activator );
+ }
+
+ return profileSelector;
+ }
+
+ protected ProfileActivator[] newProfileActivators()
+ {
+ return new ProfileActivator[] { new JdkVersionProfileActivator(), new OperatingSystemProfileActivator(),
+ new PropertyProfileActivator(), new FileProfileActivator().setPathTranslator( newPathTranslator() ) };
+ }
+
+ protected UrlNormalizer newUrlNormalizer()
+ {
+ return new DefaultUrlNormalizer();
+ }
+
+ protected PathTranslator newPathTranslator()
+ {
+ return new DefaultPathTranslator();
+ }
+
+ protected ModelInterpolator newModelInterpolator()
+ {
+ UrlNormalizer normalizer = newUrlNormalizer();
+ PathTranslator pathTranslator = newPathTranslator();
+ return new StringSearchModelInterpolator().setPathTranslator( pathTranslator ).setUrlNormalizer( normalizer );
+ }
+
+ protected ModelValidator newModelValidator()
+ {
+ return new DefaultModelValidator();
+ }
+
+ protected ModelNormalizer newModelNormalizer()
+ {
+ return new DefaultModelNormalizer();
+ }
+
+ protected ModelPathTranslator newModelPathTranslator()
+ {
+ return new DefaultModelPathTranslator().setPathTranslator( newPathTranslator() );
+ }
+
+ protected ModelUrlNormalizer newModelUrlNormalizer()
+ {
+ return new DefaultModelUrlNormalizer().setUrlNormalizer( newUrlNormalizer() );
+ }
+
+ protected InheritanceAssembler newInheritanceAssembler()
+ {
+ return new DefaultInheritanceAssembler();
+ }
+
+ protected ProfileInjector newProfileInjector()
+ {
+ return new DefaultProfileInjector();
+ }
+
+ protected SuperPomProvider newSuperPomProvider()
+ {
+ return new DefaultSuperPomProvider().setModelProcessor( newModelProcessor() );
+ }
+
+ protected DependencyManagementImporter newDependencyManagementImporter()
+ {
+ return new DefaultDependencyManagementImporter();
+ }
+
+ protected DependencyManagementInjector newDependencyManagementInjector()
+ {
+ return new DefaultDependencyManagementInjector();
+ }
+
+ protected LifecycleBindingsInjector newLifecycleBindingsInjector()
+ {
+ return new StubLifecycleBindingsInjector();
+ }
+
+ protected PluginManagementInjector newPluginManagementInjector()
+ {
+ return new DefaultPluginManagementInjector();
+ }
+
+ protected PluginConfigurationExpander newPluginConfigurationExpander()
+ {
+ return new DefaultPluginConfigurationExpander();
+ }
+
+ protected ReportConfigurationExpander newReportConfigurationExpander()
+ {
+ return new DefaultReportConfigurationExpander();
+ }
+
+ protected ReportingConverter newReportingConverter()
+ {
+ return new DefaultReportingConverter();
+ }
+
+ /**
+ * Creates a new model builder instance.
+ *
+ * @return The new model builder instance, never {@code null}.
+ */
+ public DefaultModelBuilder newInstance()
+ {
+ DefaultModelBuilder modelBuilder = new DefaultModelBuilder();
+
+ modelBuilder.setModelProcessor( newModelProcessor() );
+ modelBuilder.setModelValidator( newModelValidator() );
+ modelBuilder.setModelNormalizer( newModelNormalizer() );
+ modelBuilder.setModelPathTranslator( newModelPathTranslator() );
+ modelBuilder.setModelUrlNormalizer( newModelUrlNormalizer() );
+ modelBuilder.setModelInterpolator( newModelInterpolator() );
+ modelBuilder.setInheritanceAssembler( newInheritanceAssembler() );
+ modelBuilder.setProfileInjector( newProfileInjector() );
+ modelBuilder.setProfileSelector( newProfileSelector() );
+ modelBuilder.setSuperPomProvider( newSuperPomProvider() );
+ modelBuilder.setDependencyManagementImporter( newDependencyManagementImporter() );
+ modelBuilder.setDependencyManagementInjector( newDependencyManagementInjector() );
+ modelBuilder.setLifecycleBindingsInjector( newLifecycleBindingsInjector() );
+ modelBuilder.setPluginManagementInjector( newPluginManagementInjector() );
+ modelBuilder.setPluginConfigurationExpander( newPluginConfigurationExpander() );
+ modelBuilder.setReportConfigurationExpander( newReportConfigurationExpander() );
+ modelBuilder.setReportingConverter( newReportingConverter() );
+
+ return modelBuilder;
+ }
+
+ private static class StubLifecycleBindingsInjector
+ implements LifecycleBindingsInjector
+ {
+
+ @Override
+ public void injectLifecycleBindings( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
+ {
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingEvent.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingEvent.java
new file mode 100644
index 00000000..f72403b2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingEvent.java
@@ -0,0 +1,64 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+
+/**
+ * Holds data relevant for a model building event.
+ *
+ * @author Benjamin Bentmann
+ */
+class DefaultModelBuildingEvent
+ implements ModelBuildingEvent
+{
+
+ private final Model model;
+
+ private final ModelBuildingRequest request;
+
+ private final ModelProblemCollector problems;
+
+ public DefaultModelBuildingEvent( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
+ {
+ this.model = model;
+ this.request = request;
+ this.problems = problems;
+ }
+
+ @Override
+ public Model getModel()
+ {
+ return model;
+ }
+
+ @Override
+ public ModelBuildingRequest getRequest()
+ {
+ return request;
+ }
+
+ @Override
+ public ModelProblemCollector getProblems()
+ {
+ return problems;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java
new file mode 100644
index 00000000..8b4a01b3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java
@@ -0,0 +1,408 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.resolution.ModelResolver;
+import org.apache.maven.model.resolution.WorkspaceModelResolver;
+
+/**
+ * Collects settings that control building of effective models.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DefaultModelBuildingRequest
+ implements ModelBuildingRequest
+{
+
+ private Model rawModel;
+
+ private File pomFile;
+
+ private ModelSource modelSource;
+
+ private int validationLevel = VALIDATION_LEVEL_STRICT;
+
+ private boolean processPlugins;
+
+ private boolean twoPhaseBuilding;
+
+ private boolean locationTracking;
+
+ private List<Profile> profiles;
+
+ private List<String> activeProfileIds;
+
+ private List<String> inactiveProfileIds;
+
+ private Properties systemProperties;
+
+ private Properties userProperties;
+
+ private Date buildStartTime;
+
+ private ModelResolver modelResolver;
+
+ private ModelBuildingListener modelBuildingListener;
+
+ private ModelCache modelCache;
+
+ private WorkspaceModelResolver workspaceResolver;
+
+ /**
+ * Creates an empty request.
+ */
+ public DefaultModelBuildingRequest()
+ {
+ }
+
+ /**
+ * Creates a shallow copy of the specified request.
+ *
+ * @param request The request to copy, must not be {@code null}.
+ */
+ public DefaultModelBuildingRequest( ModelBuildingRequest request )
+ {
+ setPomFile( request.getPomFile() );
+ setModelSource( request.getModelSource() );
+ setValidationLevel( request.getValidationLevel() );
+ setProcessPlugins( request.isProcessPlugins() );
+ setTwoPhaseBuilding( request.isTwoPhaseBuilding() );
+ setProfiles( request.getProfiles() );
+ setActiveProfileIds( request.getActiveProfileIds() );
+ setInactiveProfileIds( request.getInactiveProfileIds() );
+ setSystemProperties( request.getSystemProperties() );
+ setUserProperties( request.getUserProperties() );
+ setBuildStartTime( request.getBuildStartTime() );
+ setModelResolver( request.getModelResolver() );
+ setModelBuildingListener( request.getModelBuildingListener() );
+ setModelCache( request.getModelCache() );
+ }
+
+ @Override
+ public File getPomFile()
+ {
+ return pomFile;
+ }
+
+ @Override
+ public DefaultModelBuildingRequest setPomFile( File pomFile )
+ {
+ this.pomFile = ( pomFile != null ) ? pomFile.getAbsoluteFile() : null;
+
+ return this;
+ }
+
+ @Override
+ public synchronized ModelSource getModelSource()
+ {
+ if ( modelSource == null && pomFile != null )
+ {
+ modelSource = new FileModelSource( pomFile );
+ }
+ return modelSource;
+ }
+
+ @Override
+ public DefaultModelBuildingRequest setModelSource( ModelSource modelSource )
+ {
+ this.modelSource = modelSource;
+
+ return this;
+ }
+
+ @Override
+ public int getValidationLevel()
+ {
+ return validationLevel;
+ }
+
+ @Override
+ public DefaultModelBuildingRequest setValidationLevel( int validationLevel )
+ {
+ this.validationLevel = validationLevel;
+
+ return this;
+ }
+
+ @Override
+ public boolean isProcessPlugins()
+ {
+ return processPlugins;
+ }
+
+ @Override
+ public DefaultModelBuildingRequest setProcessPlugins( boolean processPlugins )
+ {
+ this.processPlugins = processPlugins;
+
+ return this;
+ }
+
+ @Override
+ public boolean isTwoPhaseBuilding()
+ {
+ return twoPhaseBuilding;
+ }
+
+ @Override
+ public DefaultModelBuildingRequest setTwoPhaseBuilding( boolean twoPhaseBuilding )
+ {
+ this.twoPhaseBuilding = twoPhaseBuilding;
+
+ return this;
+ }
+
+ @Override
+ public boolean isLocationTracking()
+ {
+ return locationTracking;
+ }
+
+ @Override
+ public DefaultModelBuildingRequest setLocationTracking( boolean locationTracking )
+ {
+ this.locationTracking = locationTracking;
+
+ return this;
+ }
+
+ @Override
+ public List<Profile> getProfiles()
+ {
+ if ( profiles == null )
+ {
+ profiles = new ArrayList<Profile>();
+ }
+
+ return profiles;
+ }
+
+ @Override
+ public DefaultModelBuildingRequest setProfiles( List<Profile> profiles )
+ {
+ if ( profiles != null )
+ {
+ this.profiles = new ArrayList<Profile>( profiles );
+ }
+ else
+ {
+ this.profiles = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public List<String> getActiveProfileIds()
+ {
+ if ( activeProfileIds == null )
+ {
+ activeProfileIds = new ArrayList<String>();
+ }
+
+ return activeProfileIds;
+ }
+
+ @Override
+ public DefaultModelBuildingRequest setActiveProfileIds( List<String> activeProfileIds )
+ {
+ if ( activeProfileIds != null )
+ {
+ this.activeProfileIds = new ArrayList<String>( activeProfileIds );
+ }
+ else
+ {
+ this.activeProfileIds = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public List<String> getInactiveProfileIds()
+ {
+ if ( inactiveProfileIds == null )
+ {
+ inactiveProfileIds = new ArrayList<String>();
+ }
+
+ return inactiveProfileIds;
+ }
+
+ @Override
+ public DefaultModelBuildingRequest setInactiveProfileIds( List<String> inactiveProfileIds )
+ {
+ if ( inactiveProfileIds != null )
+ {
+ this.inactiveProfileIds = new ArrayList<String>( inactiveProfileIds );
+ }
+ else
+ {
+ this.inactiveProfileIds = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public Properties getSystemProperties()
+ {
+ if ( systemProperties == null )
+ {
+ systemProperties = new Properties();
+ }
+
+ return systemProperties;
+ }
+
+ @Override
+ public DefaultModelBuildingRequest setSystemProperties( Properties systemProperties )
+ {
+ if ( systemProperties != null )
+ {
+ this.systemProperties = new Properties();
+ this.systemProperties.putAll( systemProperties );
+ }
+ else
+ {
+ this.systemProperties = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public Properties getUserProperties()
+ {
+ if ( userProperties == null )
+ {
+ userProperties = new Properties();
+ }
+
+ return userProperties;
+ }
+
+ @Override
+ public DefaultModelBuildingRequest setUserProperties( Properties userProperties )
+ {
+ if ( userProperties != null )
+ {
+ this.userProperties = new Properties();
+ this.userProperties.putAll( userProperties );
+ }
+ else
+ {
+ this.userProperties = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public Date getBuildStartTime()
+ {
+ return buildStartTime;
+ }
+
+ @Override
+ public ModelBuildingRequest setBuildStartTime( Date buildStartTime )
+ {
+ this.buildStartTime = buildStartTime;
+
+ return this;
+ }
+
+ @Override
+ public ModelResolver getModelResolver()
+ {
+ return this.modelResolver;
+ }
+
+ @Override
+ public DefaultModelBuildingRequest setModelResolver( ModelResolver modelResolver )
+ {
+ this.modelResolver = modelResolver;
+
+ return this;
+ }
+
+ @Override
+ public ModelBuildingListener getModelBuildingListener()
+ {
+ return modelBuildingListener;
+ }
+
+ @Override
+ public ModelBuildingRequest setModelBuildingListener( ModelBuildingListener modelBuildingListener )
+ {
+ this.modelBuildingListener = modelBuildingListener;
+
+ return this;
+ }
+
+ @Override
+ public ModelCache getModelCache()
+ {
+ return this.modelCache;
+ }
+
+ @Override
+ public DefaultModelBuildingRequest setModelCache( ModelCache modelCache )
+ {
+ this.modelCache = modelCache;
+
+ return this;
+ }
+
+ @Override
+ public Model getRawModel()
+ {
+ return rawModel;
+ }
+
+ @Override
+ public ModelBuildingRequest setRawModel( Model rawModel )
+ {
+ this.rawModel = rawModel;
+ return this;
+ }
+
+ @Override
+ public WorkspaceModelResolver getWorkspaceModelResolver()
+ {
+ return workspaceResolver;
+ }
+
+ @Override
+ public ModelBuildingRequest setWorkspaceModelResolver( WorkspaceModelResolver workspaceResolver )
+ {
+ this.workspaceResolver = workspaceResolver;
+ return this;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingResult.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingResult.java
new file mode 100644
index 00000000..61fb434a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingResult.java
@@ -0,0 +1,180 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Profile;
+
+/**
+ * Collects the output of the model builder.
+ *
+ * @author Benjamin Bentmann
+ */
+class DefaultModelBuildingResult
+ implements ModelBuildingResult
+{
+
+ private Model effectiveModel;
+
+ private List<String> modelIds;
+
+ private Map<String, Model> rawModels;
+
+ private Map<String, List<Profile>> activePomProfiles;
+
+ private List<Profile> activeExternalProfiles;
+
+ private List<ModelProblem> problems;
+
+ public DefaultModelBuildingResult()
+ {
+ modelIds = new ArrayList<String>();
+ rawModels = new HashMap<String, Model>();
+ activePomProfiles = new HashMap<String, List<Profile>>();
+ activeExternalProfiles = new ArrayList<Profile>();
+ problems = new ArrayList<ModelProblem>();
+ }
+
+ @Override
+ public Model getEffectiveModel()
+ {
+ return effectiveModel;
+ }
+
+ public DefaultModelBuildingResult setEffectiveModel( Model model )
+ {
+ this.effectiveModel = model;
+
+ return this;
+ }
+
+ @Override
+ public List<String> getModelIds()
+ {
+ return modelIds;
+ }
+
+ public DefaultModelBuildingResult addModelId( String modelId )
+ {
+ if ( modelId == null )
+ {
+ throw new IllegalArgumentException( "no model identifier specified" );
+ }
+
+ modelIds.add( modelId );
+
+ return this;
+ }
+
+ @Override
+ public Model getRawModel()
+ {
+ return rawModels.get( modelIds.get( 0 ) );
+ }
+
+ @Override
+ public Model getRawModel( String modelId )
+ {
+ return rawModels.get( modelId );
+ }
+
+ public DefaultModelBuildingResult setRawModel( String modelId, Model rawModel )
+ {
+ if ( modelId == null )
+ {
+ throw new IllegalArgumentException( "no model identifier specified" );
+ }
+
+ rawModels.put( modelId, rawModel );
+
+ return this;
+ }
+
+ @Override
+ public List<Profile> getActivePomProfiles( String modelId )
+ {
+ return activePomProfiles.get( modelId );
+ }
+
+ public DefaultModelBuildingResult setActivePomProfiles( String modelId, List<Profile> activeProfiles )
+ {
+ if ( modelId == null )
+ {
+ throw new IllegalArgumentException( "no model identifier specified" );
+ }
+
+ if ( activeProfiles != null )
+ {
+ this.activePomProfiles.put( modelId, new ArrayList<Profile>( activeProfiles ) );
+ }
+ else
+ {
+ this.activePomProfiles.remove( modelId );
+ }
+
+ return this;
+ }
+
+ @Override
+ public List<Profile> getActiveExternalProfiles()
+ {
+ return activeExternalProfiles;
+ }
+
+ public DefaultModelBuildingResult setActiveExternalProfiles( List<Profile> activeProfiles )
+ {
+ if ( activeProfiles != null )
+ {
+ this.activeExternalProfiles = new ArrayList<Profile>( activeProfiles );
+ }
+ else
+ {
+ this.activeExternalProfiles.clear();
+ }
+
+ return this;
+ }
+
+ @Override
+ public List<ModelProblem> getProblems()
+ {
+ return problems;
+ }
+
+ public DefaultModelBuildingResult setProblems( List<ModelProblem> problems )
+ {
+ if ( problems != null )
+ {
+ this.problems = new ArrayList<ModelProblem>( problems );
+ }
+ else
+ {
+ this.problems.clear();
+ }
+
+ return this;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblem.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblem.java
new file mode 100644
index 00000000..0892f0a5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblem.java
@@ -0,0 +1,175 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+
+/**
+ * Describes a problem that was encountered during model building. A problem can either be an exception that was thrown
+ * or a simple string message. In addition, a problem carries a hint about its source, e.g. the POM file that exhibits
+ * the problem.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DefaultModelProblem
+ implements ModelProblem
+{
+
+ private final String source;
+
+ private final int lineNumber;
+
+ private final int columnNumber;
+
+ private final String modelId;
+
+ private final String message;
+
+ private final Exception exception;
+
+ private final Severity severity;
+
+ private final Version version;
+
+
+ /**
+ * Creates a new problem with the specified message and exception.
+ *
+ * @param message The message describing the problem, may be {@code null}.
+ * @param severity The severity level of the problem, may be {@code null} to default to
+ * {@link ModelProblem.Severity#ERROR}.
+ * @param source The source of the problem, may be {@code null}.
+ * @param lineNumber The one-based index of the line containing the error or {@code -1} if unknown.
+ * @param columnNumber The one-based index of the column containing the error or {@code -1} if unknown.
+ * @param exception The exception that caused this problem, may be {@code null}.
+ */
+ //mkleint: does this need to be public?
+ public DefaultModelProblem( String message, Severity severity, Version version, Model source, int lineNumber,
+ int columnNumber, Exception exception )
+ {
+ this( message, severity, version, ModelProblemUtils.toPath( source ), lineNumber, columnNumber,
+ ModelProblemUtils.toId( source ), exception );
+ }
+
+ /**
+ * Creates a new problem with the specified message and exception.
+ *
+ * @param message The message describing the problem, may be {@code null}.
+ * @param severity The severity level of the problem, may be {@code null} to default to
+ * {@link ModelProblem.Severity#ERROR}.
+ * @param version The version since the problem is relevant
+ * @param source A hint about the source of the problem like a file path, may be {@code null}.
+ * @param lineNumber The one-based index of the line containing the problem or {@code -1} if unknown.
+ * @param columnNumber The one-based index of the column containing the problem or {@code -1} if unknown.
+ * @param modelId The identifier of the model that exhibits the problem, may be {@code null}.
+ * @param exception The exception that caused this problem, may be {@code null}.
+ */
+ //mkleint: does this need to be public?
+ public DefaultModelProblem( String message, Severity severity, Version version, String source, int lineNumber,
+ int columnNumber, String modelId, Exception exception )
+ {
+ this.message = message;
+ this.severity = ( severity != null ) ? severity : Severity.ERROR;
+ this.source = ( source != null ) ? source : "";
+ this.lineNumber = lineNumber;
+ this.columnNumber = columnNumber;
+ this.modelId = ( modelId != null ) ? modelId : "";
+ this.exception = exception;
+ this.version = version;
+ }
+
+ @Override
+ public String getSource()
+ {
+ return source;
+ }
+
+ @Override
+ public int getLineNumber()
+ {
+ return lineNumber;
+ }
+
+ @Override
+ public int getColumnNumber()
+ {
+ return columnNumber;
+ }
+
+ @Override
+ public String getModelId()
+ {
+ return modelId;
+ }
+
+ @Override
+ public Exception getException()
+ {
+ return exception;
+ }
+
+ @Override
+ public String getMessage()
+ {
+ String msg;
+
+ if ( message != null && message.length() > 0 )
+ {
+ msg = message;
+ }
+ else
+ {
+ msg = exception.getMessage();
+
+ if ( msg == null )
+ {
+ msg = "";
+ }
+ }
+
+ return msg;
+ }
+
+ @Override
+ public Severity getSeverity()
+ {
+ return severity;
+ }
+
+ @Override
+ public Version getVersion()
+ {
+ return version;
+ }
+
+
+ @Override
+ public String toString()
+ {
+ StringBuilder buffer = new StringBuilder( 128 );
+
+ buffer.append( "[" ).append( getSeverity() ).append( "] " );
+ buffer.append( getMessage() );
+ buffer.append( " @ " ).append( ModelProblemUtils.formatLocation( this, null ) );
+
+ return buffer.toString();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java
new file mode 100644
index 00000000..89d5cb21
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java
@@ -0,0 +1,200 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.EnumSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.ModelParseException;
+
+/**
+ * Collects problems that are encountered during model building. The primary purpose of this component is to account for
+ * the fact that the problem reporter has/should not have information about the calling context and hence cannot provide
+ * an expressive source hint for the model problem. Instead, the source hint is configured by the model builder before
+ * it delegates to other components that potentially encounter problems. Then, the problem reporter can focus on
+ * providing a simple error message, leaving the donkey work of creating a nice model problem to this component.
+ *
+ * @author Benjamin Bentmann
+ */
+class DefaultModelProblemCollector
+ implements ModelProblemCollectorExt
+{
+
+ private final ModelBuildingResult result;
+
+ private List<ModelProblem> problems;
+
+ private String source;
+
+ private Model sourceModel;
+
+ private Model rootModel;
+
+ private Set<ModelProblem.Severity> severities = EnumSet.noneOf( ModelProblem.Severity.class );
+
+ public DefaultModelProblemCollector( ModelBuildingResult result )
+ {
+ this.result = result;
+ this.problems = result.getProblems();
+
+ for ( ModelProblem problem : this.problems )
+ {
+ severities.add( problem.getSeverity() );
+ }
+ }
+
+ public boolean hasFatalErrors()
+ {
+ return severities.contains( ModelProblem.Severity.FATAL );
+ }
+
+ public boolean hasErrors()
+ {
+ return severities.contains( ModelProblem.Severity.ERROR ) || severities.contains( ModelProblem.Severity.FATAL );
+ }
+
+ @Override
+ public List<ModelProblem> getProblems()
+ {
+ return problems;
+ }
+
+ public void setSource( String source )
+ {
+ this.source = source;
+ this.sourceModel = null;
+ }
+
+ public void setSource( Model source )
+ {
+ this.sourceModel = source;
+ this.source = null;
+
+ if ( rootModel == null )
+ {
+ rootModel = source;
+ }
+ }
+
+ private String getSource()
+ {
+ if ( source == null && sourceModel != null )
+ {
+ source = ModelProblemUtils.toPath( sourceModel );
+ }
+ return source;
+ }
+
+ private String getModelId()
+ {
+ return ModelProblemUtils.toId( sourceModel );
+ }
+
+ public void setRootModel( Model rootModel )
+ {
+ this.rootModel = rootModel;
+ }
+
+ public Model getRootModel()
+ {
+ return rootModel;
+ }
+
+ public String getRootModelId()
+ {
+ return ModelProblemUtils.toId( rootModel );
+ }
+
+ public void add( ModelProblem problem )
+ {
+ problems.add( problem );
+
+ severities.add( problem.getSeverity() );
+ }
+
+ public void addAll( List<ModelProblem> problems )
+ {
+ this.problems.addAll( problems );
+
+ for ( ModelProblem problem : problems )
+ {
+ severities.add( problem.getSeverity() );
+ }
+ }
+
+ @Override
+ public void add( ModelProblemCollectorRequest req )
+ {
+ int line = -1;
+ int column = -1;
+ String source = null;
+ String modelId = null;
+
+ if ( req.getLocation() != null )
+ {
+ line = req.getLocation().getLineNumber();
+ column = req.getLocation().getColumnNumber();
+ if ( req.getLocation().getSource() != null )
+ {
+ modelId = req.getLocation().getSource().getModelId();
+ source = req.getLocation().getSource().getLocation();
+ }
+ }
+
+ if ( modelId == null )
+ {
+ modelId = getModelId();
+ source = getSource();
+ }
+
+ if ( line <= 0 && column <= 0 && req.getException() instanceof ModelParseException )
+ {
+ ModelParseException e = (ModelParseException) req.getException();
+ line = e.getLineNumber();
+ column = e.getColumnNumber();
+ }
+
+ ModelProblem problem =
+ new DefaultModelProblem( req.getMessage(), req.getSeverity(), req.getVersion(), source, line, column,
+ modelId, req.getException() );
+
+ add( problem );
+ }
+
+ public ModelBuildingException newModelBuildingException()
+ {
+ ModelBuildingResult result = this.result;
+ if ( result.getModelIds().isEmpty() )
+ {
+ DefaultModelBuildingResult tmp = new DefaultModelBuildingResult();
+ tmp.setEffectiveModel( result.getEffectiveModel() );
+ tmp.setProblems( getProblems() );
+ tmp.setActiveExternalProfiles( result.getActiveExternalProfiles() );
+ String id = getRootModelId();
+ tmp.addModelId( id );
+ tmp.setRawModel( id, getRootModel() );
+ result = tmp;
+ }
+ return new ModelBuildingException( result );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java
new file mode 100644
index 00000000..a4d5fa93
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java
@@ -0,0 +1,84 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.Map;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.ModelReader;
+import org.apache.maven.model.locator.ModelLocator;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+@Component( role = ModelProcessor.class )
+public class DefaultModelProcessor
+ implements ModelProcessor
+{
+
+ @Requirement
+ private ModelLocator locator;
+
+ @Requirement
+ private ModelReader reader;
+
+ public DefaultModelProcessor setModelLocator( ModelLocator locator )
+ {
+ this.locator = locator;
+ return this;
+ }
+
+ public DefaultModelProcessor setModelReader( ModelReader reader )
+ {
+ this.reader = reader;
+ return this;
+ }
+
+ @Override
+ public File locatePom( File projectDirectory )
+ {
+ return locator.locatePom( projectDirectory );
+ }
+
+ @Override
+ public Model read( File input, Map<String, ?> options )
+ throws IOException
+ {
+ return reader.read( input, options );
+ }
+
+ @Override
+ public Model read( Reader input, Map<String, ?> options )
+ throws IOException
+ {
+ return reader.read( input, options );
+ }
+
+ @Override
+ public Model read( InputStream input, Map<String, ?> options )
+ throws IOException
+ {
+ return reader.read( input, options );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/FileModelSource.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/FileModelSource.java
new file mode 100644
index 00000000..a2e11417
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/FileModelSource.java
@@ -0,0 +1,83 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.net.URI;
+
+import org.apache.maven.building.FileSource;
+
+/**
+ * Wraps an ordinary {@link File} as a model source.
+ *
+ * @author Benjamin Bentmann
+ */
+public class FileModelSource extends FileSource implements ModelSource2
+{
+
+ /**
+ * Creates a new model source backed by the specified file.
+ *
+ * @param pomFile The POM file, must not be {@code null}.
+ */
+ public FileModelSource( File pomFile )
+ {
+ super( pomFile );
+ }
+
+ /**
+ *
+ * @return the file of this source
+ *
+ * @deprecated instead use {@link #getFile()}
+ */
+ @Deprecated
+ public File getPomFile()
+ {
+ return getFile();
+ }
+
+ @Override
+ public ModelSource2 getRelatedSource( String relPath )
+ {
+ relPath = relPath.replace( '\\', File.separatorChar ).replace( '/', File.separatorChar );
+
+ File relatedPom = new File( getFile().getParentFile(), relPath );
+
+ if ( relatedPom.isDirectory() )
+ {
+ // TODO figure out how to reuse ModelLocator.locatePom(File) here
+ relatedPom = new File( relatedPom, "pom.xml" );
+ }
+
+ if ( relatedPom.isFile() && relatedPom.canRead() )
+ {
+ return new FileModelSource( new File( relatedPom.toURI().normalize() ) );
+ }
+
+ return null;
+ }
+
+ @Override
+ public URI getLocationURI()
+ {
+ return getFile().toURI();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java
new file mode 100644
index 00000000..c5c2cbfa
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java
@@ -0,0 +1,285 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.resolution.ModelResolver;
+import org.apache.maven.model.resolution.WorkspaceModelResolver;
+
+/**
+ * A model building request that delegates all methods invocations to another request, meant for easy transformations by
+ * subclassing.
+ *
+ * @author Benjamin Bentmann
+ */
+class FilterModelBuildingRequest
+ implements ModelBuildingRequest
+{
+
+ protected ModelBuildingRequest request;
+
+ public FilterModelBuildingRequest( ModelBuildingRequest request )
+ {
+ this.request = request;
+ }
+
+ @Override
+ public File getPomFile()
+ {
+ return request.getPomFile();
+ }
+
+ @Override
+ public FilterModelBuildingRequest setPomFile( File pomFile )
+ {
+ request.setPomFile( pomFile );
+
+ return this;
+ }
+
+ @Override
+ public ModelSource getModelSource()
+ {
+ return request.getModelSource();
+ }
+
+ @Override
+ public FilterModelBuildingRequest setModelSource( ModelSource modelSource )
+ {
+ request.setModelSource( modelSource );
+
+ return this;
+ }
+
+ @Override
+ public int getValidationLevel()
+ {
+ return request.getValidationLevel();
+ }
+
+ @Override
+ public FilterModelBuildingRequest setValidationLevel( int validationLevel )
+ {
+ request.setValidationLevel( validationLevel );
+
+ return this;
+ }
+
+ @Override
+ public boolean isProcessPlugins()
+ {
+ return request.isProcessPlugins();
+ }
+
+ @Override
+ public FilterModelBuildingRequest setProcessPlugins( boolean processPlugins )
+ {
+ request.setProcessPlugins( processPlugins );
+
+ return this;
+ }
+
+ @Override
+ public boolean isTwoPhaseBuilding()
+ {
+ return request.isTwoPhaseBuilding();
+ }
+
+ @Override
+ public FilterModelBuildingRequest setTwoPhaseBuilding( boolean twoPhaseBuilding )
+ {
+ request.setTwoPhaseBuilding( twoPhaseBuilding );
+
+ return this;
+ }
+
+ @Override
+ public boolean isLocationTracking()
+ {
+ return request.isLocationTracking();
+ }
+
+ @Override
+ public FilterModelBuildingRequest setLocationTracking( boolean locationTracking )
+ {
+ request.setLocationTracking( locationTracking );
+
+ return this;
+ }
+
+ @Override
+ public List<Profile> getProfiles()
+ {
+ return request.getProfiles();
+ }
+
+ @Override
+ public FilterModelBuildingRequest setProfiles( List<Profile> profiles )
+ {
+ request.setProfiles( profiles );
+
+ return this;
+ }
+
+ @Override
+ public List<String> getActiveProfileIds()
+ {
+ return request.getActiveProfileIds();
+ }
+
+ @Override
+ public FilterModelBuildingRequest setActiveProfileIds( List<String> activeProfileIds )
+ {
+ request.setActiveProfileIds( activeProfileIds );
+
+ return this;
+ }
+
+ @Override
+ public List<String> getInactiveProfileIds()
+ {
+ return request.getInactiveProfileIds();
+ }
+
+ @Override
+ public FilterModelBuildingRequest setInactiveProfileIds( List<String> inactiveProfileIds )
+ {
+ request.setInactiveProfileIds( inactiveProfileIds );
+
+ return this;
+ }
+
+ @Override
+ public Properties getSystemProperties()
+ {
+ return request.getSystemProperties();
+ }
+
+ @Override
+ public FilterModelBuildingRequest setSystemProperties( Properties systemProperties )
+ {
+ request.setSystemProperties( systemProperties );
+
+ return this;
+ }
+
+ @Override
+ public Properties getUserProperties()
+ {
+ return request.getUserProperties();
+ }
+
+ @Override
+ public FilterModelBuildingRequest setUserProperties( Properties userProperties )
+ {
+ request.setUserProperties( userProperties );
+
+ return this;
+ }
+
+ @Override
+ public Date getBuildStartTime()
+ {
+ return request.getBuildStartTime();
+ }
+
+ @Override
+ public ModelBuildingRequest setBuildStartTime( Date buildStartTime )
+ {
+ request.setBuildStartTime( buildStartTime );
+
+ return this;
+ }
+
+ @Override
+ public ModelResolver getModelResolver()
+ {
+ return request.getModelResolver();
+ }
+
+ @Override
+ public FilterModelBuildingRequest setModelResolver( ModelResolver modelResolver )
+ {
+ request.setModelResolver( modelResolver );
+
+ return this;
+ }
+
+ @Override
+ public ModelBuildingListener getModelBuildingListener()
+ {
+ return request.getModelBuildingListener();
+ }
+
+ @Override
+ public ModelBuildingRequest setModelBuildingListener( ModelBuildingListener modelBuildingListener )
+ {
+ request.setModelBuildingListener( modelBuildingListener );
+
+ return this;
+ }
+
+ @Override
+ public ModelCache getModelCache()
+ {
+ return request.getModelCache();
+ }
+
+ @Override
+ public FilterModelBuildingRequest setModelCache( ModelCache modelCache )
+ {
+ request.setModelCache( modelCache );
+
+ return this;
+ }
+
+ @Override
+ public Model getRawModel()
+ {
+ return request.getRawModel();
+ }
+
+ @Override
+ public ModelBuildingRequest setRawModel( Model rawModel )
+ {
+ request.setRawModel( rawModel );
+ return this;
+ }
+
+ @Override
+ public WorkspaceModelResolver getWorkspaceModelResolver()
+ {
+ return request.getWorkspaceModelResolver();
+ }
+
+ @Override
+ public ModelBuildingRequest setWorkspaceModelResolver( WorkspaceModelResolver workspaceResolver )
+ {
+ request.setWorkspaceModelResolver( workspaceResolver );
+ return this;
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuilder.java
new file mode 100644
index 00000000..2a49a213
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuilder.java
@@ -0,0 +1,67 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.model.Model;
+
+/**
+ * Builds the effective model from a POM.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ModelBuilder
+{
+
+ /**
+ * Builds the effective model of the specified POM.
+ *
+ * @param request The model building request that holds the parameters, must not be {@code null}.
+ * @return The result of the model building, never {@code null}.
+ * @throws ModelBuildingException If the effective model could not be built.
+ */
+ ModelBuildingResult build( ModelBuildingRequest request )
+ throws ModelBuildingException;
+
+ /**
+ * Builds the effective model by completing the specified interim result which was produced by a previous call to
+ * {@link #build(ModelBuildingRequest)} with {@link ModelBuildingRequest#isTwoPhaseBuilding()} being {@code true}.
+ * The model building request passed to this method must be the same as the one used for the first phase of the
+ * model building.
+ *
+ * @param request The model building request that holds the parameters, must not be {@code null}.
+ * @param result The interim result of the first phase of model building, must not be {@code null}.
+ * @return The result of the model building, never {@code null}.
+ * @throws ModelBuildingException If the effective model could not be built.
+ */
+ ModelBuildingResult build( ModelBuildingRequest request, ModelBuildingResult result )
+ throws ModelBuildingException;
+
+ /**
+ * Performs only the part of {@link ModelBuilder#build(ModelBuildingRequest)} that loads the raw model
+ *
+ * @param request
+ * @return
+ * @throws ModelBuildingException
+ */
+ Result<? extends Model> buildRawModel( File pomFile, int validationLevel, boolean locationTracking );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingEvent.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingEvent.java
new file mode 100644
index 00000000..2995b1bf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingEvent.java
@@ -0,0 +1,53 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+
+/**
+ * Holds data relevant for a model building event.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ModelBuildingEvent
+{
+
+ /**
+ * Gets the model being built. The precise state of this model depends on the event being fired.
+ *
+ * @return The model being built, never {@code null}.
+ */
+ Model getModel();
+
+ /**
+ * Gets the model building request being processed.
+ *
+ * @return The model building request being processed, never {@code null}.
+ */
+ ModelBuildingRequest getRequest();
+
+ /**
+ * Gets the container used to collect problems that were encountered while processing the event.
+ *
+ * @return The container used to collect problems that were encountered, never {@code null}.
+ */
+ ModelProblemCollector getProblems();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingEventCatapult.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingEventCatapult.java
new file mode 100644
index 00000000..092dc4e0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingEventCatapult.java
@@ -0,0 +1,48 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Assists in firing events from a generic method by abstracting from the actual callback method to be called on the
+ * listener.
+ *
+ * @author Benjamin Bentmann
+ */
+interface ModelBuildingEventCatapult
+{
+
+ /**
+ * Notifies the specified listener of the given event.
+ *
+ * @param listener The listener to notify, must not be {@code null}.
+ * @param event The event to fire, must not be {@code null}.
+ */
+ void fire( ModelBuildingListener listener, ModelBuildingEvent event );
+
+ ModelBuildingEventCatapult BUILD_EXTENSIONS_ASSEMBLED = new ModelBuildingEventCatapult()
+ {
+ @Override
+ public void fire( ModelBuildingListener listener, ModelBuildingEvent event )
+ {
+ listener.buildExtensionsAssembled( event );
+ }
+ };
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingException.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingException.java
new file mode 100644
index 00000000..434cb591
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingException.java
@@ -0,0 +1,180 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.model.Model;
+
+/**
+ * Signals one ore more errors during model building. The model builder tries to collect as many problems as possible
+ * before eventually failing to provide callers with rich error information. Use {@link #getProblems()} to query the
+ * details of the failure.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ModelBuildingException
+ extends Exception
+{
+
+ private final ModelBuildingResult result;
+
+ /**
+ * Creates a new exception with the specified problems.
+ *
+ * @param model The model that could not be built, may be {@code null}.
+ * @param modelId The identifier of the model that could not be built, may be {@code null}.
+ * @param problems The problems that causes this exception, may be {@code null}.
+ * @deprecated Use {@link #ModelBuildingException(ModelBuildingResult)} instead.
+ */
+ @Deprecated
+ public ModelBuildingException( Model model, String modelId, List<ModelProblem> problems )
+ {
+ super( toMessage( modelId, problems ) );
+
+ if ( model != null )
+ {
+ DefaultModelBuildingResult tmp = new DefaultModelBuildingResult();
+ if ( modelId == null )
+ {
+ modelId = "";
+ }
+ tmp.addModelId( modelId );
+ tmp.setRawModel( modelId, model );
+ tmp.setProblems( problems );
+ result = tmp;
+ }
+ else
+ {
+ result = null;
+ }
+ }
+
+ /**
+ * Creates a new exception from the specified interim result and its associated problems.
+ *
+ * @param result The interim result, may be {@code null}.
+ */
+ public ModelBuildingException( ModelBuildingResult result )
+ {
+ super( toMessage( result ) );
+ this.result = result;
+ }
+
+ /**
+ * Gets the interim result of the model building up to the point where it failed.
+ *
+ * @return The interim model building result or {@code null} if not available.
+ */
+ public ModelBuildingResult getResult()
+ {
+ return result;
+ }
+
+ /**
+ * Gets the model that could not be built properly.
+ *
+ * @return The erroneous model or {@code null} if not available.
+ */
+ public Model getModel()
+ {
+ if ( result == null )
+ {
+ return null;
+ }
+ if ( result.getEffectiveModel() != null )
+ {
+ return result.getEffectiveModel();
+ }
+ return result.getRawModel();
+ }
+
+ /**
+ * Gets the identifier of the POM whose effective model could not be built. The general format of the identifier is
+ * {@code <groupId>:<artifactId>:<version>} but some of these coordinates may still be unknown at the point the
+ * exception is thrown so this information is merely meant to assist the user.
+ *
+ * @return The identifier of the POM or an empty string if not known, never {@code null}.
+ */
+ public String getModelId()
+ {
+ if ( result == null || result.getModelIds().isEmpty() )
+ {
+ return "";
+ }
+ return result.getModelIds().get( 0 );
+ }
+
+ /**
+ * Gets the problems that caused this exception.
+ *
+ * @return The problems that caused this exception, never {@code null}.
+ */
+ public List<ModelProblem> getProblems()
+ {
+ if ( result == null )
+ {
+ return Collections.emptyList();
+ }
+ return result.getProblems();
+ }
+
+ private static String toMessage( ModelBuildingResult result )
+ {
+ if ( result != null && !result.getModelIds().isEmpty() )
+ {
+ return toMessage( result.getModelIds().get( 0 ), result.getProblems() );
+ }
+ return null;
+ }
+
+ private static String toMessage( String modelId, List<ModelProblem> problems )
+ {
+ StringWriter buffer = new StringWriter( 1024 );
+
+ PrintWriter writer = new PrintWriter( buffer );
+
+ writer.print( problems.size() );
+ writer.print( ( problems.size() == 1 ) ? " problem was " : " problems were " );
+ writer.print( "encountered while building the effective model" );
+ if ( modelId != null && modelId.length() > 0 )
+ {
+ writer.print( " for " );
+ writer.print( modelId );
+ }
+ writer.println();
+
+ for ( ModelProblem problem : problems )
+ {
+ writer.print( "[" );
+ writer.print( problem.getSeverity() );
+ writer.print( "] " );
+ writer.print( problem.getMessage() );
+ writer.print( " @ " );
+ writer.println( ModelProblemUtils.formatLocation( problem, modelId ) );
+ }
+
+ return buffer.toString();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingListener.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingListener.java
new file mode 100644
index 00000000..21029cc8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingListener.java
@@ -0,0 +1,40 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Defines events that the model builder fires during construction of the effective model. When a listener encounteres
+ * errors while processing the event, it can report these problems via {@link ModelBuildingEvent#getProblems()}.
+ * <em>Note:</em> To cope with future extensions to this interface, it is strongly recommended to extend
+ * {@link AbstractModelBuildingListener} rather than to directly implement this interface.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ModelBuildingListener
+{
+
+ /**
+ * Notifies the listener that the model has been constructed to the extent where build extensions can be processed.
+ *
+ * @param event The details about the event.
+ */
+ void buildExtensionsAssembled( ModelBuildingEvent event );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java
new file mode 100644
index 00000000..c10274db
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java
@@ -0,0 +1,338 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.resolution.ModelResolver;
+import org.apache.maven.model.resolution.WorkspaceModelResolver;
+
+/**
+ * Collects settings that control the building of effective models.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ModelBuildingRequest
+{
+
+ /**
+ * Denotes minimal validation of POMs. This validation level is meant for processing of POMs from repositories
+ * during metadata retrieval.
+ */
+ int VALIDATION_LEVEL_MINIMAL = 0;
+
+ /**
+ * Denotes validation as performed by Maven 2.0. This validation level is meant as a compatibility mode to allow
+ * users to migrate their projects.
+ */
+ int VALIDATION_LEVEL_MAVEN_2_0 = 20;
+
+ /**
+ * Denotes validation as performed by Maven 3.0. This validation level is meant for existing projects.
+ */
+ int VALIDATION_LEVEL_MAVEN_3_0 = 30;
+
+ /**
+ * Denotes validation as performed by Maven 3.1. This validation level is meant for new projects.
+ */
+ int VALIDATION_LEVEL_MAVEN_3_1 = 31;
+
+ /**
+ * Denotes strict validation as recommended by the current Maven version.
+ */
+ int VALIDATION_LEVEL_STRICT = VALIDATION_LEVEL_MAVEN_3_0;
+
+ /**
+ * Gets the raw model to build. If not set, model source will be used to load raw model.
+ *
+ * @return The raw model to build or {@code null} if not set.
+ */
+ Model getRawModel();
+
+ /**
+ * Set raw model.
+ *
+ * @param model
+ */
+ ModelBuildingRequest setRawModel( Model rawModel );
+
+ /**
+ * Gets the source of the POM to process.
+ *
+ * @return The source of the POM or {@code null} if not set.
+ */
+ ModelSource getModelSource();
+
+ /**
+ * Sets the source of the POM to process. Eventually, either {@link #setModelSource(ModelSource)} or
+ * {@link #setPomFile(File)} must be set.
+ *
+ * @param modelSource The source of the POM to process, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ ModelBuildingRequest setModelSource( ModelSource modelSource );
+
+ /**
+ * Gets the POM file of the project to build.
+ *
+ * @return The POM file of the project or {@code null} if not applicable (i.e. when processing a POM from the
+ * repository).
+ */
+ File getPomFile();
+
+ /**
+ * Sets the POM file of the project to build. Note that providing the path to a POM file via this method will make
+ * the model builder operate in project mode. This mode is meant for effective models that are employed during the
+ * build process of a local project. Hence the effective model will support the notion of a project directory. To
+ * build the model for a POM from the repository, use {@link #setModelSource(ModelSource)} in combination with a
+ * {@link FileModelSource} instead.
+ *
+ * @param pomFile The POM file of the project to build the effective model for, may be {@code null} to build the
+ * model of some POM from the repository.
+ * @return This request, never {@code null}.
+ */
+ ModelBuildingRequest setPomFile( File pomFile );
+
+ /**
+ * Gets the level of validation to perform on processed models.
+ *
+ * @return The level of validation to perform on processed models.
+ */
+ int getValidationLevel();
+
+ /**
+ * Sets the level of validation to perform on processed models. For building of projects,
+ * {@link #VALIDATION_LEVEL_STRICT} should be used to ensure proper building. For the mere retrievel of dependencies
+ * during artifact resolution, {@link #VALIDATION_LEVEL_MINIMAL} should be used to account for models of poor
+ * quality. By default, models are validated in strict mode.
+ *
+ * @param validationLevel The level of validation to perform on processed models.
+ * @return This request, never {@code null}.
+ */
+ ModelBuildingRequest setValidationLevel( int validationLevel );
+
+ /**
+ * Indicates whether plugin executions and configurations should be processed. If enabled, lifecycle-induced plugin
+ * executions will be injected into the model and common plugin configuration will be propagated to individual
+ * executions.
+ *
+ * @return {@code true} if plugins should be processed, {@code false} otherwise.
+ */
+ boolean isProcessPlugins();
+
+ /**
+ * Controls the processing of plugin executions and configurations.
+ *
+ * @param processPlugins {@code true} to enable plugin processing, {@code false} otherwise.
+ * @return This request, never {@code null}.
+ */
+ ModelBuildingRequest setProcessPlugins( boolean processPlugins );
+
+ /**
+ * Indicates whether the model building should happen in two phases. If enabled, the initial invocation of the model
+ * builder will only produce an interim result which may be used to analyze inter-model dependencies before the
+ * final invocation of the model builder is performed.
+ *
+ * @return {@code true} if two-phase building is enabled, {@code false} if the model should be build in a single
+ * step.
+ */
+ boolean isTwoPhaseBuilding();
+
+ /**
+ * Enables/disables two-phase building. If enabled, the initial invocation of the model builder will only produce an
+ * interim result which may be used to analyze inter-model dependencies before the final invocation of the model
+ * builder is performed.
+ *
+ * @param twoPhaseBuilding {@code true} to enable two-phase building, {@code false} if the model should be build in
+ * a single step.
+ * @return This request, never {@code null}.
+ */
+ ModelBuildingRequest setTwoPhaseBuilding( boolean twoPhaseBuilding );
+
+ /**
+ * Indicates whether the model should track the line/column number of the model source from which it was parsed.
+ *
+ * @return {@code true} if location tracking is enabled, {@code false} otherwise.
+ */
+ boolean isLocationTracking();
+
+ /**
+ * Enables/disables the tracking of line/column numbers for the model source being parsed. By default, input
+ * locations are not tracked.
+ *
+ * @param locationTracking {@code true} to enable location tracking, {@code false} to disable it.
+ * @return This request, never {@code null}.
+ */
+ ModelBuildingRequest setLocationTracking( boolean locationTracking );
+
+ /**
+ * Gets the external profiles that should be considered for model building.
+ *
+ * @return The external profiles that should be considered for model building, never {@code null}.
+ */
+ List<Profile> getProfiles();
+
+ /**
+ * Sets the external profiles that should be considered for model building.
+ *
+ * @param profiles The external profiles that should be considered for model building, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ ModelBuildingRequest setProfiles( List<Profile> profiles );
+
+ /**
+ * Gets the identifiers of those profiles that should be activated by explicit demand.
+ *
+ * @return The identifiers of those profiles to activate, never {@code null}.
+ */
+ List<String> getActiveProfileIds();
+
+ /**
+ * Sets the identifiers of those profiles that should be activated by explicit demand.
+ *
+ * @param activeProfileIds The identifiers of those profiles to activate, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ ModelBuildingRequest setActiveProfileIds( List<String> activeProfileIds );
+
+ /**
+ * Gets the identifiers of those profiles that should be deactivated by explicit demand.
+ *
+ * @return The identifiers of those profiles to deactivate, never {@code null}.
+ */
+ List<String> getInactiveProfileIds();
+
+ /**
+ * Sets the identifiers of those profiles that should be deactivated by explicit demand.
+ *
+ * @param inactiveProfileIds The identifiers of those profiles to deactivate, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ ModelBuildingRequest setInactiveProfileIds( List<String> inactiveProfileIds );
+
+ /**
+ * Gets the system properties to use for interpolation and profile activation. The system properties are collected
+ * from the runtime environment like {@link System#getProperties()} and environment variables.
+ *
+ * @return The system properties, never {@code null}.
+ */
+ Properties getSystemProperties();
+
+ /**
+ * Sets the system properties to use for interpolation and profile activation. The system properties are collected
+ * from the runtime environment like {@link System#getProperties()} and environment variables.
+ *
+ * @param systemProperties The system properties, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ ModelBuildingRequest setSystemProperties( Properties systemProperties );
+
+ /**
+ * Gets the user properties to use for interpolation and profile activation. The user properties have been
+ * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
+ * line.
+ *
+ * @return The user properties, never {@code null}.
+ */
+ Properties getUserProperties();
+
+ /**
+ * Sets the user properties to use for interpolation and profile activation. The user properties have been
+ * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
+ * line.
+ *
+ * @param userProperties The user properties, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ ModelBuildingRequest setUserProperties( Properties userProperties );
+
+ /**
+ * Gets the start time of the build.
+ *
+ * @return The start time of the build or {@code null} if unknown.
+ */
+ Date getBuildStartTime();
+
+ /**
+ * Sets the start time of the build.
+ *
+ * @param buildStartTime The start time of the build, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ ModelBuildingRequest setBuildStartTime( Date buildStartTime );
+
+ /**
+ * Gets the model resolver to use for resolution of mixins or parents that are not locally reachable from the
+ * project directory.
+ *
+ * @return The model resolver or {@code null} if not set.
+ */
+ ModelResolver getModelResolver();
+
+ /**
+ * Sets the model resolver to use for resolution of mixins or parents that are not locally reachable from the
+ * project directory.
+ *
+ * @param modelResolver The model resolver to use, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ ModelBuildingRequest setModelResolver( ModelResolver modelResolver );
+
+ /**
+ * Gets the model building listener to notify during the build process.
+ *
+ * @return The model building listener to notify or {@code null} if none.
+ */
+ ModelBuildingListener getModelBuildingListener();
+
+ /**
+ * Sets the model building listener to notify during the build process.
+ *
+ * @param modelBuildingListener The model building listener to notify, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ ModelBuildingRequest setModelBuildingListener( ModelBuildingListener modelBuildingListener );
+
+ /**
+ * Gets the model cache to use for reuse of previously built models.
+ *
+ * @return The model cache or {@code null} if not set.
+ */
+ ModelCache getModelCache();
+
+ /**
+ * Sets the model cache to use for reuse of previously built models. This is an optional component that serves
+ * performance optimizations.
+ *
+ * @param modelCache The model cache to use, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ ModelBuildingRequest setModelCache( ModelCache modelCache );
+
+ WorkspaceModelResolver getWorkspaceModelResolver();
+
+ ModelBuildingRequest setWorkspaceModelResolver( WorkspaceModelResolver workspaceResolver );
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingResult.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingResult.java
new file mode 100644
index 00000000..44b12958
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingResult.java
@@ -0,0 +1,99 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Profile;
+
+/**
+ * Collects the output of the model builder.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ModelBuildingResult
+{
+
+ /**
+ * Gets the sequence of model identifiers that denote the lineage of models from which the effective model was
+ * constructed. Model identifiers have the form {@code <groupId>:<artifactId>:<version>}. The first identifier from
+ * the list denotes the model on which the model builder was originally invoked. The last identifier will always be
+ * an empty string that by definition denotes the super POM.
+ *
+ * @return The model identifiers from the lineage of models, never {@code null}.
+ */
+ List<String> getModelIds();
+
+ /**
+ * Gets the assembled model.
+ *
+ * @return The assembled model, never {@code null}.
+ */
+ Model getEffectiveModel();
+
+ /**
+ * Gets the raw model as it was read from the input model source. Apart from basic validation, the raw model has not
+ * undergone any updates by the model builder, e.g. reflects neither inheritance nor interpolation.
+ *
+ * @return The raw model, never {@code null}.
+ */
+ Model getRawModel();
+
+ /**
+ * Gets the specified raw model as it was read from a model source. Apart from basic validation, a raw model has not
+ * undergone any updates by the model builder, e.g. reflects neither inheritance nor interpolation. The model
+ * identifier should be from the collection obtained by {@link #getModelIds()}. As a special case, an empty string
+ * can be used as the identifier for the super POM.
+ *
+ * @param modelId The identifier of the desired raw model, must not be {@code null}.
+ * @return The raw model or {@code null} if the specified model id does not refer to a known model.
+ */
+ Model getRawModel( String modelId );
+
+ /**
+ * Gets the profiles from the specified model that were active during model building. The model identifier should be
+ * from the collection obtained by {@link #getModelIds()}. As a special case, an empty string can be used as the
+ * identifier for the super POM.
+ *
+ * @param modelId The identifier of the model whose active profiles should be retrieved, must not be {@code null}.
+ * @return The active profiles of the model or an empty list if none or {@code null} if the specified model id does
+ * not refer to a known model.
+ */
+ List<Profile> getActivePomProfiles( String modelId );
+
+ /**
+ * Gets the external profiles that were active during model building. External profiles are those that were
+ * contributed by {@link ModelBuildingRequest#getProfiles()}.
+ *
+ * @return The active external profiles or an empty list if none, never {@code null}.
+ */
+ List<Profile> getActiveExternalProfiles();
+
+ /**
+ * Gets the problems that were encountered during the model building. Note that only problems of severity
+ * {@link ModelProblem.Severity#WARNING} and below are reported here. Problems with a higher severity level cause
+ * the model builder to fail with a {@link ModelBuildingException}.
+ *
+ * @return The problems that were encountered during the model building, can be empty but never {@code null}.
+ */
+ List<ModelProblem> getProblems();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelCache.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelCache.java
new file mode 100644
index 00000000..132a5113
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelCache.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Caches auxiliary data used during model building like already processed raw/effective models. The data in the cache
+ * is meant for exclusive consumption by the model builder and is opaque to the cache implementation. The cache key is
+ * formed by a combination of group id, artifact id, version and tag. The first three components generally refer to the
+ * identify of a model. The tag allows for further classification of the associated data on the sole discretion of the
+ * model builder.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ModelCache
+{
+
+ /**
+ * Puts the specified data into the cache.
+ *
+ * @param groupId The group id of the cache record, must not be {@code null}.
+ * @param artifactId The artifact id of the cache record, must not be {@code null}.
+ * @param version The version of the cache record, must not be {@code null}.
+ * @param tag The tag of the cache record, must not be {@code null}.
+ * @param data The data to store in the cache, must not be {@code null}.
+ */
+ void put( String groupId, String artifactId, String version, String tag, Object data );
+
+ /**
+ * Gets the specified data from the cache.
+ *
+ * @param groupId The group id of the cache record, must not be {@code null}.
+ * @param artifactId The artifact id of the cache record, must not be {@code null}.
+ * @param version The version of the cache record, must not be {@code null}.
+ * @param tag The tag of the cache record, must not be {@code null}.
+ * @return The requested data or {@code null} if none was present in the cache.
+ */
+ Object get( String groupId, String artifactId, String version, String tag );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelCacheTag.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelCacheTag.java
new file mode 100644
index 00000000..8452f967
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelCacheTag.java
@@ -0,0 +1,132 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.Model;
+
+/**
+ * Describes a tag used by the model builder to access a {@link ModelCache}. This interface basically aggregates a name
+ * and a class to provide some type safety when working with the otherwise untyped cache.
+ *
+ * @author Benjamin Bentmann
+ * @param <T> The type of data associated with the tag.
+ */
+interface ModelCacheTag<T>
+{
+
+ /**
+ * Gets the name of the tag.
+ *
+ * @return The name of the tag, must not be {@code null}.
+ */
+ String getName();
+
+ /**
+ * Gets the type of data associated with this tag.
+ *
+ * @return The type of data, must not be {@code null}.
+ */
+ Class<T> getType();
+
+ /**
+ * Creates a copy of the data suitable for storage in the cache. The original data to store can be mutated after the
+ * cache is populated but the state of the cache must not change so we need to make a copy.
+ *
+ * @param data The data to store in the cache, must not be {@code null}.
+ * @return The data being stored in the cache, never {@code null}.
+ */
+ T intoCache( T data );
+
+ /**
+ * Creates a copy of the data suitable for retrieval from the cache. The retrieved data can be mutated after the
+ * cache is queried but the state of the cache must not change so we need to make a copy.
+ *
+ * @param data The data to retrieve from the cache, must not be {@code null}.
+ * @return The data being retrieved from the cache, never {@code null}.
+ */
+ T fromCache( T data );
+
+ /**
+ * The tag used to denote raw model data.
+ */
+ ModelCacheTag<ModelData> RAW = new ModelCacheTag<ModelData>()
+ {
+
+ @Override
+ public String getName()
+ {
+ return "raw";
+ }
+
+ @Override
+ public Class<ModelData> getType()
+ {
+ return ModelData.class;
+ }
+
+ @Override
+ public ModelData intoCache( ModelData data )
+ {
+ Model model = ( data.getModel() != null ) ? data.getModel().clone() : null;
+ return new ModelData( data.getSource(), model, data.getGroupId(), data.getArtifactId(), data.getVersion() );
+ }
+
+ @Override
+ public ModelData fromCache( ModelData data )
+ {
+ return intoCache( data );
+ }
+
+ };
+
+ /**
+ * The tag used to denote an effective dependency management section from an imported model.
+ */
+ ModelCacheTag<DependencyManagement> IMPORT = new ModelCacheTag<DependencyManagement>()
+ {
+
+ @Override
+ public String getName()
+ {
+ return "import";
+ }
+
+ @Override
+ public Class<DependencyManagement> getType()
+ {
+ return DependencyManagement.class;
+ }
+
+ @Override
+ public DependencyManagement intoCache( DependencyManagement data )
+ {
+ return ( data != null ) ? data.clone() : null;
+ }
+
+ @Override
+ public DependencyManagement fromCache( DependencyManagement data )
+ {
+ return intoCache( data );
+ }
+
+ };
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelData.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelData.java
new file mode 100644
index 00000000..4fefe0df
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelData.java
@@ -0,0 +1,222 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Profile;
+
+/**
+ * Holds a model along with some auxiliary information. This internal utility class assists the model builder during POM
+ * processing by providing a means to transport information that cannot be (easily) extracted from the model itself.
+ *
+ * @author Benjamin Bentmann
+ */
+class ModelData
+{
+ private final ModelSource source;
+
+ private Model model;
+
+ private Model rawModel;
+
+ private List<Profile> activeProfiles;
+
+ private String groupId;
+
+ private String artifactId;
+
+ private String version;
+
+ /**
+ * Creates a new container for the specified model.
+ *
+ * @param model The model to wrap, may be {@code null}.
+ */
+ public ModelData( ModelSource source, Model model )
+ {
+ this.source = source;
+ this.model = model;
+ }
+
+ /**
+ * Creates a new container for the specified model.
+ *
+ * @param model The model to wrap, may be {@code null}.
+ * @param groupId The effective group identifier of the model, may be {@code null}.
+ * @param artifactId The effective artifact identifier of the model, may be {@code null}.
+ * @param version The effective version of the model, may be {@code null}.
+ */
+ public ModelData( ModelSource source, Model model, String groupId, String artifactId, String version )
+ {
+ this.source = source;
+ this.model = model;
+ setGroupId( groupId );
+ setArtifactId( artifactId );
+ setVersion( version );
+ }
+
+ public ModelSource getSource()
+ {
+ return source;
+ }
+
+ /**
+ * Gets the model being wrapped.
+ *
+ * @return The model or {@code null} if not set.
+ */
+ public Model getModel()
+ {
+ return model;
+ }
+
+ /**
+ * Sets the model being wrapped.
+ *
+ * @param model The model, may be {@code null}.
+ */
+ public void setModel( Model model )
+ {
+ this.model = model;
+ }
+
+ /**
+ * Gets the raw model being wrapped.
+ *
+ * @return The raw model or {@code null} if not set.
+ */
+ public Model getRawModel()
+ {
+ return rawModel;
+ }
+
+ /**
+ * Sets the raw model being wrapped.
+ *
+ * @param rawModel The raw model, may be {@code null}.
+ */
+ public void setRawModel( Model rawModel )
+ {
+ this.rawModel = rawModel;
+ }
+
+ /**
+ * Gets the active profiles from the model.
+ *
+ * @return The active profiles or {@code null} if not set.
+ */
+ public List<Profile> getActiveProfiles()
+ {
+ return activeProfiles;
+ }
+
+ /**
+ * Sets the active profiles from the model.
+ *
+ * @param activeProfiles The active profiles, may be {@code null}.
+ */
+ public void setActiveProfiles( List<Profile> activeProfiles )
+ {
+ this.activeProfiles = activeProfiles;
+ }
+
+ /**
+ * Gets the effective group identifier of the model.
+ *
+ * @return The effective group identifier of the model or an empty string if unknown, never {@code null}.
+ */
+ public String getGroupId()
+ {
+ return ( groupId != null ) ? groupId : "";
+ }
+
+ /**
+ * Sets the effective group identifier of the model.
+ *
+ * @param groupId The effective group identifier of the model, may be {@code null}.
+ */
+ public void setGroupId( String groupId )
+ {
+ this.groupId = groupId;
+ }
+
+ /**
+ * Gets the effective artifact identifier of the model.
+ *
+ * @return The effective artifact identifier of the model or an empty string if unknown, never {@code null}.
+ */
+ public String getArtifactId()
+ {
+ return ( artifactId != null ) ? artifactId : "";
+ }
+
+ /**
+ * Sets the effective artifact identifier of the model.
+ *
+ * @param artifactId The effective artifact identifier of the model, may be {@code null}.
+ */
+ public void setArtifactId( String artifactId )
+ {
+ this.artifactId = artifactId;
+ }
+
+ /**
+ * Gets the effective version of the model.
+ *
+ * @return The effective version of the model or an empty string if unknown, never {@code null}.
+ */
+ public String getVersion()
+ {
+ return ( version != null ) ? version : "";
+ }
+
+ /**
+ * Sets the effective version of the model.
+ *
+ * @param version The effective version of the model, may be {@code null}.
+ */
+ public void setVersion( String version )
+ {
+ this.version = version;
+ }
+
+ /**
+ * Gets the effective identifier of the model in the form {@code <groupId>:<artifactId>:<version>}.
+ *
+ * @return The effective identifier of the model, never {@code null}.
+ */
+ public String getId()
+ {
+ StringBuilder buffer = new StringBuilder( 96 );
+
+ buffer.append( getGroupId() ).append( ':' ).append( getArtifactId() ).append( ':' ).append( getVersion() );
+
+ return buffer.toString();
+ }
+
+ @Override
+ public String toString()
+ {
+ return String.valueOf( model );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblem.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblem.java
new file mode 100644
index 00000000..43272bac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblem.java
@@ -0,0 +1,117 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Describes a problem that was encountered during model building. A problem can either be an exception that was thrown
+ * or a simple string message. In addition, a problem carries a hint about its source, e.g. the POM file that exhibits
+ * the problem.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ModelProblem
+{
+
+ /**
+ * The different severity levels for a problem, in decreasing order.
+ */
+ enum Severity
+ {
+
+ FATAL, //
+ ERROR, //
+ WARNING //
+
+ }
+
+ enum Version
+ {
+ //based on ModeBuildingResult.validationLevel
+ BASE,
+ V20,
+ V30,
+ V31
+ }
+
+ /**
+ * Gets the hint about the source of the problem. While the syntax of this hint is unspecified and depends on the
+ * creator of the problem, the general expectation is that the hint provides sufficient information to the user to
+ * track the problem back to its origin. A concrete example for such a source hint can be the file path or URL from
+ * which a POM was read.
+ *
+ * @return The hint about the source of the problem or an empty string if unknown, never {@code null}.
+ */
+ String getSource();
+
+ /**
+ * Gets the one-based index of the line containing the problem. The line number should refer to some text file that
+ * is given by {@link #getSource()}.
+ *
+ * @return The one-based index of the line containing the problem or a non-positive value if unknown.
+ */
+ int getLineNumber();
+
+ /**
+ * Gets the one-based index of the column containing the problem. The column number should refer to some text file
+ * that is given by {@link #getSource()}.
+ *
+ * @return The one-based index of the column containing the problem or non-positive value if unknown.
+ */
+ int getColumnNumber();
+
+ /**
+ * Gets the identifier of the model from which the problem originated. While the general form of this identifier is
+ * <code>groupId:artifactId:version</code> the returned identifier need not be complete. The identifier is derived
+ * from the information that is available at the point the problem occurs and as such merely serves as a best effort
+ * to provide information to the user to track the problem back to its origin.
+ *
+ * @return The identifier of the model from which the problem originated or an empty string if unknown, never
+ * {@code null}.
+ */
+ String getModelId();
+
+ /**
+ * Gets the exception that caused this problem (if any).
+ *
+ * @return The exception that caused this problem or {@code null} if not applicable.
+ */
+ Exception getException();
+
+ /**
+ * Gets the message that describes this problem.
+ *
+ * @return The message describing this problem, never {@code null}.
+ */
+ String getMessage();
+
+ /**
+ * Gets the severity level of this problem.
+ *
+ * @return The severity level of this problem, never {@code null}.
+ */
+ Severity getSeverity();
+
+ /**
+ * Gets the applicable maven version/validation level of this problem
+ * @return The version, never {@code null}.
+ */
+ Version getVersion();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollector.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollector.java
new file mode 100644
index 00000000..e9561e54
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollector.java
@@ -0,0 +1,41 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Collects problems that are encountered during model building. The primary purpose of this component is to account for
+ * the fact that the problem reporter has/should not have information about the calling context and hence cannot provide
+ * an expressive source hint for the model problem. Instead, the source hint is configured by the model builder before
+ * it delegates to other components that potentially encounter problems. Then, the problem reporter can focus on
+ * providing a simple error message, leaving the donkey work of creating a nice model problem to this component.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ModelProblemCollector
+{
+
+ /**
+ * Adds the specified problem.
+ *
+ * @param req must not be null
+ */
+ void add( ModelProblemCollectorRequest req );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorExt.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorExt.java
new file mode 100644
index 00000000..7977d3a6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorExt.java
@@ -0,0 +1,37 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+/**
+ * Extends the ModelproblemCollector by the capacity of returning the collected problems.
+ * @author Milos Kleint
+ */
+public interface ModelProblemCollectorExt extends ModelProblemCollector
+{
+
+ /**
+ * The collected problems.
+ * @return a list of model problems encountered, never {@code null}
+ */
+ List<ModelProblem> getProblems();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorRequest.java
new file mode 100644
index 00000000..d213cc48
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorRequest.java
@@ -0,0 +1,101 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.InputLocation;
+import org.apache.maven.model.building.ModelProblem.Severity;
+import org.apache.maven.model.building.ModelProblem.Version;
+
+/**
+ * Class to wrap request parameters to ModelProblemCollector.addProblem
+ *
+ * @author mkleint
+ */
+public final class ModelProblemCollectorRequest
+{
+
+ private final ModelProblem.Severity severity;
+ private final ModelProblem.Version version;
+ private Exception exception;
+ private String message;
+ private InputLocation location;
+
+ /**
+ * Create a new request with mandatory parameters.
+ * @param severity
+ * @param version
+ */
+ public ModelProblemCollectorRequest( Severity severity, Version version )
+ {
+ this.severity = severity;
+ this.version = version;
+ if ( severity == null )
+ {
+ throw new IllegalStateException( "No severity declared" );
+ }
+ if ( version == null )
+ {
+ throw new IllegalStateException( "No version declared." );
+ }
+ }
+
+ public Severity getSeverity()
+ {
+ return severity;
+ }
+
+ public Version getVersion()
+ {
+ return version;
+ }
+
+ public Exception getException()
+ {
+ return exception;
+ }
+
+ public ModelProblemCollectorRequest setException( Exception exception )
+ {
+ this.exception = exception;
+ return this;
+ }
+
+ public String getMessage()
+ {
+ return message;
+ }
+
+ public ModelProblemCollectorRequest setMessage( String message )
+ {
+ this.message = message;
+ return this;
+ }
+
+ public InputLocation getLocation()
+ {
+ return location;
+ }
+
+ public ModelProblemCollectorRequest setLocation( InputLocation location )
+ {
+ this.location = location;
+ return this;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java
new file mode 100644
index 00000000..806c28d4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java
@@ -0,0 +1,171 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.model.Model;
+
+/**
+ * Assists in the handling of model problems.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ModelProblemUtils
+{
+
+ /**
+ * Creates a user-friendly source hint for the specified model.
+ *
+ * @param model The model to create a source hint for, may be {@code null}.
+ * @return The user-friendly source hint, never {@code null}.
+ */
+ static String toSourceHint( Model model )
+ {
+ if ( model == null )
+ {
+ return "";
+ }
+
+ StringBuilder buffer = new StringBuilder( 192 );
+
+ buffer.append( toId( model ) );
+
+ File pomFile = model.getPomFile();
+ if ( pomFile != null )
+ {
+ buffer.append( " (" ).append( pomFile ).append( ")" );
+ }
+
+ return buffer.toString();
+ }
+
+ static String toPath( Model model )
+ {
+ String path = "";
+
+ if ( model != null )
+ {
+ File pomFile = model.getPomFile();
+
+ if ( pomFile != null )
+ {
+ path = pomFile.getAbsolutePath();
+ }
+ }
+
+ return path;
+ }
+
+ static String toId( Model model )
+ {
+ if ( model == null )
+ {
+ return "";
+ }
+
+ String groupId = model.getGroupId();
+ if ( groupId == null && model.getParent() != null )
+ {
+ groupId = model.getParent().getGroupId();
+ }
+
+ String artifactId = model.getArtifactId();
+
+ String version = model.getVersion();
+ if ( version == null )
+ {
+ version = "[unknown-version]";
+ }
+
+ return toId( groupId, artifactId, version );
+ }
+
+ /**
+ * Creates a user-friendly artifact id from the specified coordinates.
+ *
+ * @param groupId The group id, may be {@code null}.
+ * @param artifactId The artifact id, may be {@code null}.
+ * @param version The version, may be {@code null}.
+ * @return The user-friendly artifact id, never {@code null}.
+ */
+ static String toId( String groupId, String artifactId, String version )
+ {
+ StringBuilder buffer = new StringBuilder( 96 );
+
+ buffer.append( ( groupId != null && groupId.length() > 0 ) ? groupId : "[unknown-group-id]" );
+ buffer.append( ':' );
+ buffer.append( ( artifactId != null && artifactId.length() > 0 ) ? artifactId : "[unknown-artifact-id]" );
+ buffer.append( ':' );
+ buffer.append( ( version != null && version.length() > 0 ) ? version : "[unknown-version]" );
+
+ return buffer.toString();
+ }
+
+ /**
+ * Creates a string with all location details for the specified model problem. If the project identifier is
+ * provided, the generated location will omit the model id and source information and only give line/column
+ * information for problems originating directly from this POM.
+ *
+ * @param problem The problem whose location should be formatted, must not be {@code null}.
+ * @param projectId The {@code <groupId>:<artifactId>:<version>} of the corresponding project, may be {@code null}
+ * to force output of model id and source.
+ * @return The formatted problem location or an empty string if unknown, never {@code null}.
+ */
+ public static String formatLocation( ModelProblem problem, String projectId )
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+
+ if ( !problem.getModelId().equals( projectId ) )
+ {
+ buffer.append( problem.getModelId() );
+
+ if ( problem.getSource().length() > 0 )
+ {
+ if ( buffer.length() > 0 )
+ {
+ buffer.append( ", " );
+ }
+ buffer.append( problem.getSource() );
+ }
+ }
+
+ if ( problem.getLineNumber() > 0 )
+ {
+ if ( buffer.length() > 0 )
+ {
+ buffer.append( ", " );
+ }
+ buffer.append( "line " ).append( problem.getLineNumber() );
+ }
+
+ if ( problem.getColumnNumber() > 0 )
+ {
+ if ( buffer.length() > 0 )
+ {
+ buffer.append( ", " );
+ }
+ buffer.append( "column " ).append( problem.getColumnNumber() );
+ }
+
+ return buffer.toString();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProcessor.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProcessor.java
new file mode 100644
index 00000000..ca34845c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProcessor.java
@@ -0,0 +1,32 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.io.ModelReader;
+import org.apache.maven.model.locator.ModelLocator;
+
+@SuppressWarnings( "checkstyle:interfaceistype" )
+public interface ModelProcessor
+ extends ModelLocator, ModelReader
+{
+
+ String SOURCE = "org.apache.maven.model.building.source";
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelSource.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelSource.java
new file mode 100644
index 00000000..5db8edba
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelSource.java
@@ -0,0 +1,38 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.building.Source;
+
+/**
+ * Provides access to the contents of a POM independently of the backing store (e.g. file system, database, memory).
+ * <p>
+ * This interface does not support loading of parent POM(s) from the same backing store, integrators are strongly
+ * encouraged to implement {@link ModelSource2} instead of implementing this interface directly.
+ *
+ * @author Benjamin Bentmann
+ * @see ModelSource2
+ * @deprecated instead use {@link Source}
+ */
+@Deprecated
+public interface ModelSource extends Source
+{
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelSource2.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelSource2.java
new file mode 100644
index 00000000..3e123d08
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelSource2.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.net.URI;
+
+/**
+ * Provides access to the contents of a POM independently of the backing store (e.g. file system, database, memory).
+ * <p>
+ * Unlike {@link ModelSource}, this interface supports loading of parent POM(s) from the same backing store and allows
+ * construction of MavenProject instances without the need to have parent POM(s) available from local or remote
+ * repositories.
+ * <p>
+ * ModelSource2 instances are cached in {@link ModelBuildingRequest#getModelCache()}. Implementations must guarantee
+ * that the connection to the backing store remains active until request's {@link ModelCache} is discarded or flushed.
+ */
+public interface ModelSource2
+ extends ModelSource
+{
+ /**
+ * Returns model source identified by a path relative to this model source POM. Implementation <strong>MUST</strong>
+ * be able to accept <code>relPath</code> parameter values that
+ * <ul>
+ * <li>use either / or \ file path separator</li>
+ * <li>have .. parent directory references</li>
+ * <li>point either at file or directory, in the latter case POM file name 'pom.xml' needs to be used by the
+ * requested model source.</li>
+ * </ul>
+ *
+ * @param relPath is the path of the requested model source relative to this model source POM.
+ * @return related model source or <code>null</code> if no such model source.
+ */
+ ModelSource2 getRelatedSource( String relPath );
+
+ /**
+ * Returns location of the POM, never <code>null</code>.
+ */
+ URI getLocationURI();
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/Result.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/Result.java
new file mode 100644
index 00000000..a9628977
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/Result.java
@@ -0,0 +1,255 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static com.google.common.base.Predicates.in;
+import static com.google.common.collect.Iterables.any;
+import static com.google.common.collect.Iterables.concat;
+import static com.google.common.collect.Iterables.transform;
+import static java.util.Collections.singleton;
+import static java.util.EnumSet.of;
+import static org.apache.maven.model.building.ModelProblem.Severity.ERROR;
+import static org.apache.maven.model.building.ModelProblem.Severity.FATAL;
+
+import java.util.Arrays;
+import java.util.Collections;
+
+import org.apache.maven.model.building.ModelProblem.Severity;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Iterables;
+
+/**
+ * There are various forms of results that are represented by this class:
+ * <ol>
+ * <li>success - in which case only the model field is set
+ * <li>success with warnings - model field + non-error model problems
+ * <li>error - no model, but diagnostics
+ * <li>error - (partial) model and diagnostics
+ * </ol>
+ * Could encode these variants as subclasses, but kept in one for now
+ *
+ * @author bbusjaeger
+ * @param <T>
+ */
+public class Result<T>
+{
+
+ /**
+ * Success without warnings
+ *
+ * @param model
+ * @return
+ */
+ public static <T> Result<T> success( T model )
+ {
+ return success( model, Collections.<ModelProblem>emptyList() );
+ }
+
+ /**
+ * Success with warnings
+ *
+ * @param model
+ * @param problems
+ * @return
+ */
+ public static <T> Result<T> success( T model, Iterable<? extends ModelProblem> problems )
+ {
+ assert !hasErrors( problems );
+ return new Result<T>( false, model, problems );
+ }
+
+ /**
+ * Success with warnings
+ *
+ * @param model
+ * @param results
+ * @return
+ */
+ public static <T> Result<T> success( T model, Result<?>... results )
+ {
+ return success( model, Iterables.concat( Iterables.transform( Arrays.asList( results ), GET_PROBLEMS ) ) );
+ }
+
+ /**
+ * Error with problems describing the cause
+ *
+ * @param problems
+ * @return
+ */
+ public static <T> Result<T> error( Iterable<? extends ModelProblem> problems )
+ {
+ return error( null, problems );
+ }
+
+ public static <T> Result<T> error( T model )
+ {
+ return error( model, Collections.<ModelProblem>emptyList() );
+ }
+
+ public static <T> Result<T> error( Result<?> result )
+ {
+ return error( result.getProblems() );
+ }
+
+ public static <T> Result<T> error( Result<?>... results )
+ {
+ return error( Iterables.concat( Iterables.transform( Arrays.asList( results ), GET_PROBLEMS ) ) );
+ }
+
+ /**
+ * Error with partial result and problems describing the cause
+ *
+ * @param model
+ * @param problems
+ * @return
+ */
+ public static <T> Result<T> error( T model, Iterable<? extends ModelProblem> problems )
+ {
+ return new Result<T>( true, model, problems );
+ }
+
+ /**
+ * New result - determine whether error or success by checking problems for errors
+ *
+ * @param model
+ * @param problems
+ * @return
+ */
+ public static <T> Result<T> newResult( T model, Iterable<? extends ModelProblem> problems )
+ {
+ return new Result<T>( hasErrors( problems ), model, problems );
+ }
+
+ /**
+ * New result consisting of given result and new problem. Convenience for newResult(result.get(),
+ * concat(result.getProblems(),problems)).
+ *
+ * @param result
+ * @param problem
+ * @return
+ */
+ public static <T> Result<T> addProblem( Result<T> result, ModelProblem problem )
+ {
+ return addProblems( result, singleton( problem ) );
+ }
+
+ /**
+ * New result that includes the given
+ *
+ * @param result
+ * @param problems
+ * @return
+ */
+ public static <T> Result<T> addProblems( Result<T> result, Iterable<? extends ModelProblem> problems )
+ {
+ return new Result<T>( result.hasErrors() || hasErrors( problems ), result.get(), concat( result.getProblems(),
+ problems ) );
+ }
+
+ public static <T> Result<T> addProblems( Result<T> result, Result<?>... results )
+ {
+ return addProblems( result, Iterables.concat( Iterables.transform( Arrays.asList( results ), GET_PROBLEMS ) ) );
+ }
+
+ /**
+ * Turns the given results into a single result by combining problems and models into single collection.
+ *
+ * @param results
+ * @return
+ */
+ public static <T> Result<Iterable<T>> newResultSet( Iterable<? extends Result<? extends T>> results )
+ {
+ final boolean hasErrors = any( transform( results, new Function<Result<?>, Boolean>()
+ {
+ @Override
+ public Boolean apply( Result<?> input )
+ {
+ return input.hasErrors();
+ }
+ } ), Predicates.equalTo( true ) );
+ final Iterable<T> models = transform( results, new Function<Result<? extends T>, T>()
+ {
+ @Override
+ public T apply( Result<? extends T> input )
+ {
+ return input.get();
+ }
+ } );
+ final Iterable<ModelProblem> problems = concat( transform( results, GET_PROBLEMS ) );
+ return new Result<Iterable<T>>( hasErrors, models, problems );
+ }
+
+ // helper to determine if problems contain error
+ private static boolean hasErrors( Iterable<? extends ModelProblem> problems )
+ {
+ return any( transform( problems, new Function<ModelProblem, Severity>()
+ {
+ @Override
+ public Severity apply( ModelProblem input )
+ {
+ return input.getSeverity();
+ }
+ } ), in( of( ERROR, FATAL ) ) );
+ }
+
+ /**
+ * Class definition
+ */
+
+ private final boolean errors;
+
+ private final T value;
+
+ private final Iterable<? extends ModelProblem> problems;
+
+ private Result( boolean errors, T model, Iterable<? extends ModelProblem> problems )
+ {
+ this.errors = errors;
+ this.value = model;
+ this.problems = problems;
+ }
+
+ public Iterable<? extends ModelProblem> getProblems()
+ {
+ return problems;
+ }
+
+ public T get()
+ {
+ return value;
+ }
+
+ public boolean hasErrors()
+ {
+ return errors;
+ }
+
+ private static final Function<Result<?>, Iterable<? extends ModelProblem>> GET_PROBLEMS =
+ new Function<Result<?>, Iterable<? extends ModelProblem>>()
+ {
+ @Override
+ public Iterable<? extends ModelProblem> apply( Result<?> input )
+ {
+ return input.getProblems();
+ }
+ };
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/StringModelSource.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/StringModelSource.java
new file mode 100644
index 00000000..cf9c4ce1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/StringModelSource.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.building.StringSource;
+
+/**
+ * Wraps an ordinary {@link CharSequence} as a model source.
+ *
+ * @author Benjamin Bentmann
+ *
+ * @deprecated instead use {@link StringSource}
+ */
+@Deprecated
+public class StringModelSource extends StringSource
+ implements ModelSource
+{
+
+ /**
+ * Creates a new model source backed by the specified string.
+ *
+ * @param pom The POM's string representation, may be empty or {@code null}.
+ */
+ public StringModelSource( CharSequence pom )
+ {
+ this( pom, null );
+ }
+
+ /**
+ * Creates a new model source backed by the specified string.
+ *
+ * @param pom The POM's string representation, may be empty or {@code null}.
+ * @param location The location to report for this use, may be {@code null}.
+ */
+ public StringModelSource( CharSequence pom, String location )
+ {
+ super( pom, location );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/UrlModelSource.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/UrlModelSource.java
new file mode 100644
index 00000000..e41d74b3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/UrlModelSource.java
@@ -0,0 +1,46 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.net.URL;
+
+import org.apache.maven.building.UrlSource;
+
+/**
+ * Wraps an ordinary {@link URL} as a model source.
+ *
+ * @author Benjamin Bentmann
+ *
+ * @deprecated instead use {@link UrlSource}
+ */
+@Deprecated
+public class UrlModelSource extends UrlSource
+ implements ModelSource
+{
+ /**
+ * Creates a new model source backed by the specified URL.
+ *
+ * @param pomUrl The POM file, must not be {@code null}.
+ */
+ public UrlModelSource( URL pomUrl )
+ {
+ super( pomUrl );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/composition/DefaultDependencyManagementImporter.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/composition/DefaultDependencyManagementImporter.java
new file mode 100644
index 00000000..5860af65
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/composition/DefaultDependencyManagementImporter.java
@@ -0,0 +1,83 @@
+package org.apache.maven.model.composition;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Handles the import of dependency management from other models into the target model.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = DependencyManagementImporter.class )
+public class DefaultDependencyManagementImporter
+ implements DependencyManagementImporter
+{
+
+ @Override
+ public void importManagement( Model target, List<? extends DependencyManagement> sources,
+ ModelBuildingRequest request, ModelProblemCollector problems )
+ {
+ if ( sources != null && !sources.isEmpty() )
+ {
+ Map<String, Dependency> dependencies = new LinkedHashMap<String, Dependency>();
+
+ DependencyManagement depMngt = target.getDependencyManagement();
+
+ if ( depMngt != null )
+ {
+ for ( Dependency dependency : depMngt.getDependencies() )
+ {
+ dependencies.put( dependency.getManagementKey(), dependency );
+ }
+ }
+ else
+ {
+ depMngt = new DependencyManagement();
+ target.setDependencyManagement( depMngt );
+ }
+
+ for ( DependencyManagement source : sources )
+ {
+ for ( Dependency dependency : source.getDependencies() )
+ {
+ String key = dependency.getManagementKey();
+ if ( !dependencies.containsKey( key ) )
+ {
+ dependencies.put( key, dependency );
+ }
+ }
+ }
+
+ depMngt.setDependencies( new ArrayList<Dependency>( dependencies.values() ) );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/composition/DependencyManagementImporter.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/composition/DependencyManagementImporter.java
new file mode 100644
index 00000000..06496429
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/composition/DependencyManagementImporter.java
@@ -0,0 +1,48 @@
+package org.apache.maven.model.composition;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+
+/**
+ * Handles the import of dependency management from other models into the target model.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface DependencyManagementImporter
+{
+
+ /**
+ * Imports the specified dependency management sections into the given target model.
+ *
+ * @param target The model into which to import the dependency management section, must not be <code>null</code>.
+ * @param sources The dependency management sections to import, may be <code>null</code>.
+ * @param request The model building request that holds further settings, must not be {@code null}.
+ * @param problems The container used to collect problems that were encountered, must not be {@code null}.
+ */
+ void importManagement( Model target, List<? extends DependencyManagement> sources, ModelBuildingRequest request,
+ ModelProblemCollector problems );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java
new file mode 100644
index 00000000..609f441e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java
@@ -0,0 +1,255 @@
+package org.apache.maven.model.inheritance;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginContainer;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.Reporting;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.merge.MavenModelMerger;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Handles inheritance of model values.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = InheritanceAssembler.class )
+public class DefaultInheritanceAssembler
+ implements InheritanceAssembler
+{
+
+ private InheritanceModelMerger merger = new InheritanceModelMerger();
+
+ @Override
+ public void assembleModelInheritance( Model child, Model parent, ModelBuildingRequest request,
+ ModelProblemCollector problems )
+ {
+ Map<Object, Object> hints = new HashMap<Object, Object>();
+ hints.put( MavenModelMerger.CHILD_PATH_ADJUSTMENT, getChildPathAdjustment( child, parent ) );
+ merger.merge( child, parent, false, hints );
+ }
+
+ /**
+ * Calculates the relative path from the base directory of the parent to the parent directory of the base directory
+ * of the child. The general idea is to adjust inherited URLs to match the project layout (in SCM).
+ *
+ * <p>This calculation is only a heuristic based on our conventions.
+ * In detail, the algo relies on the following assumptions: <ul>
+ * <li>The parent uses aggregation and refers to the child via the modules section</li>
+ * <li>The module path to the child is considered to
+ * point at the POM rather than its base directory if the path ends with ".xml" (ignoring case)</li>
+ * <li>The name of the child's base directory matches the artifact id of the child.</li>
+ * </ul>
+ * Note that for the sake of independence from the user
+ * environment, the filesystem is intentionally not used for the calculation.</p>
+ *
+ * @param child The child model, must not be <code>null</code>.
+ * @param parent The parent model, may be <code>null</code>.
+ * @return The path adjustment, can be empty but never <code>null</code>.
+ */
+ private String getChildPathAdjustment( Model child, Model parent )
+ {
+ String adjustment = "";
+
+ if ( parent != null )
+ {
+ String childName = child.getArtifactId();
+
+ /*
+ * This logic exists only for the sake of backward-compat with 2.x (MNG-5000). In generally, it is wrong to
+ * base URL inheritance on the project directory names as this information is unavailable for POMs in the
+ * repository. In other words, projects where artifactId != projectDirName will see different effective URLs
+ * depending on how the POM was constructed.
+ */
+ File childDirectory = child.getProjectDirectory();
+ if ( childDirectory != null )
+ {
+ childName = childDirectory.getName();
+ }
+
+ for ( String module : parent.getModules() )
+ {
+ module = module.replace( '\\', '/' );
+
+ if ( module.regionMatches( true, module.length() - 4, ".xml", 0, 4 ) )
+ {
+ module = module.substring( 0, module.lastIndexOf( '/' ) + 1 );
+ }
+
+ String moduleName = module;
+ if ( moduleName.endsWith( "/" ) )
+ {
+ moduleName = moduleName.substring( 0, moduleName.length() - 1 );
+ }
+
+ int lastSlash = moduleName.lastIndexOf( '/' );
+
+ moduleName = moduleName.substring( lastSlash + 1 );
+
+ if ( moduleName.equals( childName ) && lastSlash >= 0 )
+ {
+ adjustment = module.substring( 0, lastSlash );
+ break;
+ }
+ }
+ }
+
+ return adjustment;
+ }
+
+ protected static class InheritanceModelMerger
+ extends MavenModelMerger
+ {
+
+ @Override
+ protected void mergePluginContainer_Plugins( PluginContainer target, PluginContainer source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ List<Plugin> src = source.getPlugins();
+ if ( !src.isEmpty() )
+ {
+ List<Plugin> tgt = target.getPlugins();
+ Map<Object, Plugin> master = new LinkedHashMap<Object, Plugin>( src.size() * 2 );
+
+ for ( Plugin element : src )
+ {
+ if ( element.isInherited() || !element.getExecutions().isEmpty() )
+ {
+ // NOTE: Enforce recursive merge to trigger merging/inheritance logic for executions
+ Plugin plugin = new Plugin();
+ plugin.setLocation( "", element.getLocation( "" ) );
+ plugin.setGroupId( null );
+ mergePlugin( plugin, element, sourceDominant, context );
+
+ Object key = getPluginKey( element );
+
+ master.put( key, plugin );
+ }
+ }
+
+ Map<Object, List<Plugin>> predecessors = new LinkedHashMap<Object, List<Plugin>>();
+ List<Plugin> pending = new ArrayList<Plugin>();
+ for ( Plugin element : tgt )
+ {
+ Object key = getPluginKey( element );
+ Plugin existing = master.get( key );
+ if ( existing != null )
+ {
+ mergePlugin( element, existing, sourceDominant, context );
+
+ master.put( key, element );
+
+ if ( !pending.isEmpty() )
+ {
+ predecessors.put( key, pending );
+ pending = new ArrayList<Plugin>();
+ }
+ }
+ else
+ {
+ pending.add( element );
+ }
+ }
+
+ List<Plugin> result = new ArrayList<Plugin>( src.size() + tgt.size() );
+ for ( Map.Entry<Object, Plugin> entry : master.entrySet() )
+ {
+ List<Plugin> pre = predecessors.get( entry.getKey() );
+ if ( pre != null )
+ {
+ result.addAll( pre );
+ }
+ result.add( entry.getValue() );
+ }
+ result.addAll( pending );
+
+ target.setPlugins( result );
+ }
+ }
+
+ @Override
+ protected void mergePlugin( Plugin target, Plugin source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ if ( source.isInherited() )
+ {
+ mergeConfigurationContainer( target, source, sourceDominant, context );
+ }
+ mergePlugin_GroupId( target, source, sourceDominant, context );
+ mergePlugin_ArtifactId( target, source, sourceDominant, context );
+ mergePlugin_Version( target, source, sourceDominant, context );
+ mergePlugin_Extensions( target, source, sourceDominant, context );
+ mergePlugin_Dependencies( target, source, sourceDominant, context );
+ mergePlugin_Executions( target, source, sourceDominant, context );
+ }
+
+ @Override
+ protected void mergeReporting_Plugins( Reporting target, Reporting source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<ReportPlugin> src = source.getPlugins();
+ if ( !src.isEmpty() )
+ {
+ List<ReportPlugin> tgt = target.getPlugins();
+ Map<Object, ReportPlugin> merged =
+ new LinkedHashMap<Object, ReportPlugin>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( ReportPlugin element : src )
+ {
+ Object key = getReportPluginKey( element );
+ if ( element.isInherited() )
+ {
+ // NOTE: Enforce recursive merge to trigger merging/inheritance logic for executions as well
+ ReportPlugin plugin = new ReportPlugin();
+ plugin.setLocation( "", element.getLocation( "" ) );
+ plugin.setGroupId( null );
+ mergeReportPlugin( plugin, element, sourceDominant, context );
+
+ merged.put( key, plugin );
+ }
+ }
+
+ for ( ReportPlugin element : tgt )
+ {
+ Object key = getReportPluginKey( element );
+ ReportPlugin existing = merged.get( key );
+ if ( existing != null )
+ {
+ mergeReportPlugin( element, existing, sourceDominant, context );
+ }
+ merged.put( key, element );
+ }
+
+ target.setPlugins( new ArrayList<ReportPlugin>( merged.values() ) );
+ }
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/InheritanceAssembler.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/InheritanceAssembler.java
new file mode 100644
index 00000000..a191e52d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/InheritanceAssembler.java
@@ -0,0 +1,48 @@
+package org.apache.maven.model.inheritance;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+
+/**
+ * Handles inheritance of model values.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface InheritanceAssembler
+{
+
+ /**
+ * Merges values from the specified parent model into the given child model. Implementations are expected to keep
+ * parent and child completely decoupled by injecting deep copies of objects into the child rather than the original
+ * objects from the parent.
+ *
+ * @param child The child model into which to merge the values inherited from the parent, must not be
+ * <code>null</code>.
+ * @param parent The (read-only) parent model from which to inherit the values, may be <code>null</code>.
+ * @param request The model building request that holds further settings, must not be {@code null}.
+ * @param problems The container used to collect problems that were encountered, must not be {@code null}.
+ */
+ void assembleModelInheritance( Model child, Model parent, ModelBuildingRequest request,
+ ModelProblemCollector problems );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
new file mode 100644
index 00000000..1390a4ed
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
@@ -0,0 +1,271 @@
+package org.apache.maven.model.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblem.Severity;
+import org.apache.maven.model.building.ModelProblem.Version;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.building.ModelProblemCollectorRequest;
+import org.apache.maven.model.path.PathTranslator;
+import org.apache.maven.model.path.UrlNormalizer;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.interpolation.AbstractValueSource;
+import org.codehaus.plexus.interpolation.InterpolationException;
+import org.codehaus.plexus.interpolation.InterpolationPostProcessor;
+import org.codehaus.plexus.interpolation.Interpolator;
+import org.codehaus.plexus.interpolation.MapBasedValueSource;
+import org.codehaus.plexus.interpolation.ObjectBasedValueSource;
+import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor;
+import org.codehaus.plexus.interpolation.PrefixedObjectValueSource;
+import org.codehaus.plexus.interpolation.PrefixedValueSourceWrapper;
+import org.codehaus.plexus.interpolation.RecursionInterceptor;
+import org.codehaus.plexus.interpolation.ValueSource;
+
+/**
+ * Use a regular expression search to find and resolve expressions within the POM.
+ *
+ * @author jdcasey Created on Feb 3, 2005
+ */
+public abstract class AbstractStringBasedModelInterpolator
+ implements ModelInterpolator
+{
+ private static final List<String> PROJECT_PREFIXES = Arrays.asList( "pom.", "project." );
+
+ private static final Collection<String> TRANSLATED_PATH_EXPRESSIONS;
+
+ static
+ {
+ Collection<String> translatedPrefixes = new HashSet<String>();
+
+ // MNG-1927, MNG-2124, MNG-3355:
+ // If the build section is present and the project directory is non-null, we should make
+ // sure interpolation of the directories below uses translated paths.
+ // Afterward, we'll double back and translate any paths that weren't covered during interpolation via the
+ // code below...
+ translatedPrefixes.add( "build.directory" );
+ translatedPrefixes.add( "build.outputDirectory" );
+ translatedPrefixes.add( "build.testOutputDirectory" );
+ translatedPrefixes.add( "build.sourceDirectory" );
+ translatedPrefixes.add( "build.testSourceDirectory" );
+ translatedPrefixes.add( "build.scriptSourceDirectory" );
+ translatedPrefixes.add( "reporting.outputDirectory" );
+
+ TRANSLATED_PATH_EXPRESSIONS = translatedPrefixes;
+ }
+
+ @Requirement
+ private PathTranslator pathTranslator;
+
+ @Requirement
+ private UrlNormalizer urlNormalizer;
+
+ private Interpolator interpolator;
+
+ private RecursionInterceptor recursionInterceptor;
+
+ public AbstractStringBasedModelInterpolator()
+ {
+ interpolator = createInterpolator();
+ recursionInterceptor = new PrefixAwareRecursionInterceptor( PROJECT_PREFIXES );
+ }
+
+ public AbstractStringBasedModelInterpolator setPathTranslator( PathTranslator pathTranslator )
+ {
+ this.pathTranslator = pathTranslator;
+ return this;
+ }
+
+ public AbstractStringBasedModelInterpolator setUrlNormalizer( UrlNormalizer urlNormalizer )
+ {
+ this.urlNormalizer = urlNormalizer;
+ return this;
+ }
+
+ protected List<ValueSource> createValueSources( final Model model, final File projectDir,
+ final ModelBuildingRequest config,
+ final ModelProblemCollector problems )
+ {
+ Properties modelProperties = model.getProperties();
+
+ ValueSource modelValueSource1 = new PrefixedObjectValueSource( PROJECT_PREFIXES, model, false );
+ if ( config.getValidationLevel() >= ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 )
+ {
+ modelValueSource1 = new ProblemDetectingValueSource( modelValueSource1, "pom.", "project.", problems );
+ }
+
+ ValueSource modelValueSource2 = new ObjectBasedValueSource( model );
+ if ( config.getValidationLevel() >= ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 )
+ {
+ modelValueSource2 = new ProblemDetectingValueSource( modelValueSource2, "", "project.", problems );
+ }
+
+ // NOTE: Order counts here!
+ List<ValueSource> valueSources = new ArrayList<ValueSource>( 9 );
+
+ if ( projectDir != null )
+ {
+ ValueSource basedirValueSource = new PrefixedValueSourceWrapper( new AbstractValueSource( false )
+ {
+ @Override
+ public Object getValue( String expression )
+ {
+ if ( "basedir".equals( expression ) )
+ {
+ return projectDir.getAbsolutePath();
+ }
+ return null;
+ }
+ }, PROJECT_PREFIXES, true );
+ valueSources.add( basedirValueSource );
+
+ ValueSource baseUriValueSource = new PrefixedValueSourceWrapper( new AbstractValueSource( false )
+ {
+ @Override
+ public Object getValue( String expression )
+ {
+ if ( "baseUri".equals( expression ) )
+ {
+ return projectDir.getAbsoluteFile().toURI().toString();
+ }
+ return null;
+ }
+ }, PROJECT_PREFIXES, false );
+ valueSources.add( baseUriValueSource );
+ valueSources.add( new BuildTimestampValueSource( config.getBuildStartTime(), modelProperties ) );
+ }
+
+ valueSources.add( modelValueSource1 );
+
+ valueSources.add( new MapBasedValueSource( config.getUserProperties() ) );
+
+ valueSources.add( new MapBasedValueSource( modelProperties ) );
+
+ valueSources.add( new MapBasedValueSource( config.getSystemProperties() ) );
+
+ valueSources.add( new AbstractValueSource( false )
+ {
+ @Override
+ public Object getValue( String expression )
+ {
+ return config.getSystemProperties().getProperty( "env." + expression );
+ }
+ } );
+
+ valueSources.add( modelValueSource2 );
+
+ return valueSources;
+ }
+
+ protected List<? extends InterpolationPostProcessor> createPostProcessors( final Model model,
+ final File projectDir,
+ final ModelBuildingRequest config )
+ {
+ List<InterpolationPostProcessor> processors = new ArrayList<InterpolationPostProcessor>( 2 );
+ if ( projectDir != null )
+ {
+ processors.add( new PathTranslatingPostProcessor( PROJECT_PREFIXES, TRANSLATED_PATH_EXPRESSIONS,
+ projectDir, pathTranslator ) );
+ }
+ processors.add( new UrlNormalizingPostProcessor( urlNormalizer ) );
+ return processors;
+ }
+
+ protected String interpolateInternal( String src, List<? extends ValueSource> valueSources,
+ List<? extends InterpolationPostProcessor> postProcessors,
+ ModelProblemCollector problems )
+ {
+ if ( !src.contains( "${" ) )
+ {
+ return src;
+ }
+
+ String result = src;
+ synchronized ( this )
+ {
+
+ for ( ValueSource vs : valueSources )
+ {
+ interpolator.addValueSource( vs );
+ }
+
+ for ( InterpolationPostProcessor postProcessor : postProcessors )
+ {
+ interpolator.addPostProcessor( postProcessor );
+ }
+
+ try
+ {
+ try
+ {
+ result = interpolator.interpolate( result, recursionInterceptor );
+ }
+ catch ( InterpolationException e )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( e.getMessage() ).setException( e ) );
+ }
+
+ interpolator.clearFeedback();
+ }
+ finally
+ {
+ for ( ValueSource vs : valueSources )
+ {
+ interpolator.removeValuesSource( vs );
+ }
+
+ for ( InterpolationPostProcessor postProcessor : postProcessors )
+ {
+ interpolator.removePostProcessor( postProcessor );
+ }
+ }
+ }
+
+ return result;
+ }
+
+ protected RecursionInterceptor getRecursionInterceptor()
+ {
+ return recursionInterceptor;
+ }
+
+ protected void setRecursionInterceptor( RecursionInterceptor recursionInterceptor )
+ {
+ this.recursionInterceptor = recursionInterceptor;
+ }
+
+ protected abstract Interpolator createInterpolator();
+
+ protected final Interpolator getInterpolator()
+ {
+ return interpolator;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/BuildTimestampValueSource.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/BuildTimestampValueSource.java
new file mode 100644
index 00000000..30809b85
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/BuildTimestampValueSource.java
@@ -0,0 +1,47 @@
+package org.apache.maven.model.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Date;
+import java.util.Properties;
+
+import org.codehaus.plexus.interpolation.AbstractValueSource;
+
+class BuildTimestampValueSource
+ extends AbstractValueSource
+{
+ private final MavenBuildTimestamp mavenBuildTimestamp;
+
+ public BuildTimestampValueSource( Date startTime, Properties properties )
+ {
+ super( false );
+ this.mavenBuildTimestamp = new MavenBuildTimestamp( startTime, properties );
+ }
+
+ @Override
+ public Object getValue( String expression )
+ {
+ if ( "build.timestamp".equals( expression ) || "maven.build.timestamp".equals( expression ) )
+ {
+ return mavenBuildTimestamp.formattedTimestamp();
+ }
+ return null;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/MavenBuildTimestamp.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/MavenBuildTimestamp.java
new file mode 100644
index 00000000..447f0efe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/MavenBuildTimestamp.java
@@ -0,0 +1,70 @@
+package org.apache.maven.model.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Properties;
+import java.util.TimeZone;
+
+public class MavenBuildTimestamp
+{
+ // ISO 8601-compliant timestamp for machine readability
+ public static final String DEFAULT_BUILD_TIMESTAMP_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
+
+ public static final String BUILD_TIMESTAMP_FORMAT_PROPERTY = "maven.build.timestamp.format";
+
+ private String formattedTimestamp;
+
+ public MavenBuildTimestamp()
+ {
+ this( new Date() );
+ }
+
+ public MavenBuildTimestamp( Date time )
+ {
+ this( time, DEFAULT_BUILD_TIMESTAMP_FORMAT );
+ }
+
+ public MavenBuildTimestamp( Date time, Properties properties )
+ {
+ this( time, properties != null ? properties.getProperty( BUILD_TIMESTAMP_FORMAT_PROPERTY ) : null );
+ }
+
+ public MavenBuildTimestamp( Date time, String timestampFormat )
+ {
+ if ( timestampFormat == null )
+ {
+ timestampFormat = DEFAULT_BUILD_TIMESTAMP_FORMAT;
+ }
+ if ( time == null )
+ {
+ time = new Date();
+ }
+ SimpleDateFormat dateFormat = new SimpleDateFormat( timestampFormat );
+ dateFormat.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
+ formattedTimestamp = dateFormat.format( time );
+ }
+
+ public String formattedTimestamp()
+ {
+ return formattedTimestamp;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ModelInterpolator.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ModelInterpolator.java
new file mode 100644
index 00000000..d2b01c1d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ModelInterpolator.java
@@ -0,0 +1,54 @@
+package org.apache.maven.model.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+
+import java.io.File;
+
+/**
+ * Replaces expressions of the form <tt>${token}</tt> with their effective values. Effective values are basically
+ * calculated from the elements of the model itself and the execution properties from the building request.
+ *
+ * @author jdcasey
+ * <p/>
+ * Created on Feb 2, 2005
+ */
+public interface ModelInterpolator
+{
+
+ /**
+ * Interpolates expressions in the specified model. Note that implementations are free to either interpolate the
+ * provided model directly or to create a clone of the model and interpolate the clone. Callers should always use
+ * the returned model and must not rely on the input model being updated.
+ *
+ * @param model The model to interpolate, must not be {@code null}.
+ * @param projectDir The project directory, may be {@code null} if the model does not belong to a local project but
+ * to some artifact's metadata.
+ * @param request The model building request that holds further settings, must not be {@code null}.
+ * @param problems The container used to collect problems that were encountered, must not be {@code null}.
+ * @return The interpolated model, never {@code null}.
+ */
+ Model interpolateModel( Model model, File projectDir, ModelBuildingRequest request,
+ ModelProblemCollector problems );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/PathTranslatingPostProcessor.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/PathTranslatingPostProcessor.java
new file mode 100644
index 00000000..1aeafddc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/PathTranslatingPostProcessor.java
@@ -0,0 +1,67 @@
+package org.apache.maven.model.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.path.PathTranslator;
+import org.codehaus.plexus.interpolation.InterpolationPostProcessor;
+import org.codehaus.plexus.interpolation.util.ValueSourceUtils;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ *
+ */
+class PathTranslatingPostProcessor
+ implements InterpolationPostProcessor
+{
+
+ private final Collection<String> unprefixedPathKeys;
+ private final File projectDir;
+ private final PathTranslator pathTranslator;
+ private final List<String> expressionPrefixes;
+
+ public PathTranslatingPostProcessor( List<String> expressionPrefixes, Collection<String> unprefixedPathKeys,
+ File projectDir, PathTranslator pathTranslator )
+ {
+ this.expressionPrefixes = expressionPrefixes;
+ this.unprefixedPathKeys = unprefixedPathKeys;
+ this.projectDir = projectDir;
+ this.pathTranslator = pathTranslator;
+ }
+
+ @Override
+ public Object execute( String expression, Object value )
+ {
+ if ( value != null )
+ {
+ expression = ValueSourceUtils.trimPrefix( expression, expressionPrefixes, true );
+
+ if ( unprefixedPathKeys.contains( expression ) )
+ {
+ return pathTranslator.alignToBaseDirectory( String.valueOf( value ), projectDir );
+ }
+ }
+
+ return null;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ProblemDetectingValueSource.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ProblemDetectingValueSource.java
new file mode 100644
index 00000000..be5b227e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ProblemDetectingValueSource.java
@@ -0,0 +1,87 @@
+package org.apache.maven.model.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.building.ModelProblem.Severity;
+import org.apache.maven.model.building.ModelProblem.Version;
+import org.apache.maven.model.building.ModelProblemCollectorRequest;
+import org.codehaus.plexus.interpolation.ValueSource;
+
+/**
+ * Wraps another value source and intercepts interpolated expressions, checking for problems.
+ *
+ * @author Benjamin Bentmann
+ */
+class ProblemDetectingValueSource
+ implements ValueSource
+{
+
+ private final ValueSource valueSource;
+
+ private final String bannedPrefix;
+
+ private final String newPrefix;
+
+ private final ModelProblemCollector problems;
+
+ public ProblemDetectingValueSource( ValueSource valueSource, String bannedPrefix, String newPrefix,
+ ModelProblemCollector problems )
+ {
+ this.valueSource = valueSource;
+ this.bannedPrefix = bannedPrefix;
+ this.newPrefix = newPrefix;
+ this.problems = problems;
+ }
+
+ @Override
+ public Object getValue( String expression )
+ {
+ Object value = valueSource.getValue( expression );
+
+ if ( value != null && expression.startsWith( bannedPrefix ) )
+ {
+ String msg = "The expression ${" + expression + "} is deprecated.";
+ if ( newPrefix != null && newPrefix.length() > 0 )
+ {
+ msg += " Please use ${" + newPrefix + expression.substring( bannedPrefix.length() ) + "} instead.";
+ }
+ problems.add( new ModelProblemCollectorRequest( Severity.WARNING, Version.V20 ).setMessage( msg ) );
+ }
+
+ return value;
+ }
+
+ @Override
+ @SuppressWarnings( "unchecked" )
+ public List getFeedback()
+ {
+ return valueSource.getFeedback();
+ }
+
+ @Override
+ public void clearFeedback()
+ {
+ valueSource.clearFeedback();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java
new file mode 100644
index 00000000..c40f9bd5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java
@@ -0,0 +1,504 @@
+package org.apache.maven.model.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblem.Severity;
+import org.apache.maven.model.building.ModelProblem.Version;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.building.ModelProblemCollectorRequest;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.interpolation.InterpolationPostProcessor;
+import org.codehaus.plexus.interpolation.Interpolator;
+import org.codehaus.plexus.interpolation.StringSearchInterpolator;
+import org.codehaus.plexus.interpolation.ValueSource;
+
+import java.io.File;
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Component( role = ModelInterpolator.class )
+public class StringSearchModelInterpolator
+ extends AbstractStringBasedModelInterpolator
+{
+
+ private static final Map<Class<?>, InterpolateObjectAction.CacheItem> CACHED_ENTRIES =
+ new ConcurrentHashMap<Class<?>, InterpolateObjectAction.CacheItem>( 80, 0.75f, 2 );
+ // Empirical data from 3.x, actual =40
+
+
+ @Override
+ public Model interpolateModel( Model model, File projectDir, ModelBuildingRequest config,
+ ModelProblemCollector problems )
+ {
+ interpolateObject( model, model, projectDir, config, problems );
+
+ return model;
+ }
+
+ protected void interpolateObject( Object obj, Model model, File projectDir, ModelBuildingRequest config,
+ ModelProblemCollector problems )
+ {
+ try
+ {
+ List<? extends ValueSource> valueSources = createValueSources( model, projectDir, config, problems );
+ List<? extends InterpolationPostProcessor> postProcessors =
+ createPostProcessors( model, projectDir, config );
+
+ InterpolateObjectAction action =
+ new InterpolateObjectAction( obj, valueSources, postProcessors, this, problems );
+
+ AccessController.doPrivileged( action );
+ }
+ finally
+ {
+ getInterpolator().clearAnswers();
+ }
+ }
+
+ @Override
+ protected Interpolator createInterpolator()
+ {
+ StringSearchInterpolator interpolator = new StringSearchInterpolator();
+ interpolator.setCacheAnswers( true );
+
+ return interpolator;
+ }
+
+ private static final class InterpolateObjectAction
+ implements PrivilegedAction<Object>
+ {
+
+ private final LinkedList<Object> interpolationTargets;
+
+ private final StringSearchModelInterpolator modelInterpolator;
+
+ private final List<? extends ValueSource> valueSources;
+
+ private final List<? extends InterpolationPostProcessor> postProcessors;
+
+ private final ModelProblemCollector problems;
+
+ public InterpolateObjectAction( Object target, List<? extends ValueSource> valueSources,
+ List<? extends InterpolationPostProcessor> postProcessors,
+ StringSearchModelInterpolator modelInterpolator,
+ ModelProblemCollector problems )
+ {
+ this.valueSources = valueSources;
+ this.postProcessors = postProcessors;
+
+ this.interpolationTargets = new LinkedList<Object>();
+ interpolationTargets.add( target );
+
+ this.modelInterpolator = modelInterpolator;
+
+ this.problems = problems;
+ }
+
+ @Override
+ public Object run()
+ {
+ while ( !interpolationTargets.isEmpty() )
+ {
+ Object obj = interpolationTargets.removeFirst();
+
+ traverseObjectWithParents( obj.getClass(), obj );
+ }
+
+ return null;
+ }
+
+
+ private String interpolate( String value )
+ {
+ return modelInterpolator.interpolateInternal( value, valueSources, postProcessors, problems );
+ }
+
+ private void traverseObjectWithParents( Class<?> cls, Object target )
+ {
+ if ( cls == null )
+ {
+ return;
+ }
+
+ CacheItem cacheEntry = getCacheEntry( cls );
+ if ( cacheEntry.isArray() )
+ {
+ evaluateArray( target, this );
+ }
+ else if ( cacheEntry.isQualifiedForInterpolation )
+ {
+ cacheEntry.interpolate( target, this );
+
+ traverseObjectWithParents( cls.getSuperclass(), target );
+ }
+ }
+
+
+ private CacheItem getCacheEntry( Class<?> cls )
+ {
+ CacheItem cacheItem = CACHED_ENTRIES.get( cls );
+ if ( cacheItem == null )
+ {
+ cacheItem = new CacheItem( cls );
+ CACHED_ENTRIES.put( cls, cacheItem );
+ }
+ return cacheItem;
+ }
+
+ private static void evaluateArray( Object target, InterpolateObjectAction ctx )
+ {
+ int len = Array.getLength( target );
+ for ( int i = 0; i < len; i++ )
+ {
+ Object value = Array.get( target, i );
+ if ( value != null )
+ {
+ if ( String.class == value.getClass() )
+ {
+ String interpolated = ctx.interpolate( (String) value );
+
+ if ( !interpolated.equals( value ) )
+ {
+ Array.set( target, i, interpolated );
+ }
+ }
+ else
+ {
+ ctx.interpolationTargets.add( value );
+ }
+ }
+ }
+ }
+
+ private static class CacheItem
+ {
+ private final boolean isArray;
+
+ private final boolean isQualifiedForInterpolation;
+
+ private final CacheField[] fields;
+
+ private boolean isQualifiedForInterpolation( Class<?> cls )
+ {
+ return !cls.getName().startsWith( "java" );
+ }
+
+ private boolean isQualifiedForInterpolation( Field field, Class<?> fieldType )
+ {
+ if ( Map.class.equals( fieldType ) && "locations".equals( field.getName() ) )
+ {
+ return false;
+ }
+
+ //noinspection SimplifiableIfStatement
+ if ( fieldType.isPrimitive() )
+ {
+ return false;
+ }
+
+ return !"parent".equals( field.getName() );
+ }
+
+ CacheItem( Class clazz )
+ {
+ this.isQualifiedForInterpolation = isQualifiedForInterpolation( clazz );
+ this.isArray = clazz.isArray();
+ List<CacheField> fields = new ArrayList<CacheField>();
+ for ( Field currentField : clazz.getDeclaredFields() )
+ {
+ Class<?> type = currentField.getType();
+ if ( isQualifiedForInterpolation( currentField, type ) )
+ {
+ if ( String.class == type )
+ {
+ if ( !Modifier.isFinal( currentField.getModifiers() ) )
+ {
+ fields.add( new StringField( currentField ) );
+ }
+ }
+ else if ( List.class.isAssignableFrom( type ) )
+ {
+ fields.add( new ListField( currentField ) );
+ }
+ else if ( Collection.class.isAssignableFrom( type ) )
+ {
+ throw new RuntimeException( "We dont interpolate into collections, use a list instead" );
+ }
+ else if ( Map.class.isAssignableFrom( type ) )
+ {
+ fields.add( new MapField( currentField ) );
+ }
+ else
+ {
+ fields.add( new ObjectField( currentField ) );
+ }
+ }
+
+ }
+ this.fields = fields.toArray( new CacheField[fields.size()] );
+
+ }
+
+ public void interpolate( Object target, InterpolateObjectAction interpolateObjectAction )
+ {
+ for ( CacheField field : fields )
+ {
+ field.interpolate( target, interpolateObjectAction );
+ }
+ }
+
+ public boolean isArray()
+ {
+ return isArray;
+ }
+ }
+
+ abstract static class CacheField
+ {
+ protected final Field field;
+
+ CacheField( Field field )
+ {
+ this.field = field;
+ }
+
+ void interpolate( Object target, InterpolateObjectAction interpolateObjectAction )
+ {
+ synchronized ( field )
+ {
+ boolean isAccessible = field.isAccessible();
+ field.setAccessible( true );
+ try
+ {
+ doInterpolate( target, interpolateObjectAction );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ interpolateObjectAction.problems.add(
+ new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE ).setMessage(
+ "Failed to interpolate field3: " + field + " on class: "
+ + field.getType().getName() ).setException(
+ e ) ); // todo: Not entirely the same message
+ }
+ catch ( IllegalAccessException e )
+ {
+ interpolateObjectAction.problems.add(
+ new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE ).setMessage(
+ "Failed to interpolate field4: " + field + " on class: "
+ + field.getType().getName() ).setException( e ) );
+ }
+ finally
+ {
+ field.setAccessible( isAccessible );
+ }
+ }
+
+
+ }
+
+ abstract void doInterpolate( Object target, InterpolateObjectAction ctx )
+ throws IllegalAccessException;
+ }
+
+ static final class StringField
+ extends CacheField
+ {
+ StringField( Field field )
+ {
+ super( field );
+ }
+
+ @Override
+ void doInterpolate( Object target, InterpolateObjectAction ctx )
+ throws IllegalAccessException
+ {
+ String value = (String) field.get( target );
+ if ( value == null )
+ {
+ return;
+ }
+
+ String interpolated = ctx.interpolate( value );
+
+ if ( !interpolated.equals( value ) )
+ {
+ field.set( target, interpolated );
+ }
+ }
+ }
+
+ static final class ListField
+ extends CacheField
+ {
+ ListField( Field field )
+ {
+ super( field );
+ }
+
+ @Override
+ void doInterpolate( Object target, InterpolateObjectAction ctx )
+ throws IllegalAccessException
+ {
+ @SuppressWarnings( "unchecked" ) List<Object> c = (List<Object>) field.get( target );
+ if ( c == null )
+ {
+ return;
+ }
+
+ int size = c.size();
+ Object value;
+ for ( int i = 0; i < size; i++ )
+ {
+
+ value = c.get( i );
+
+ if ( value != null )
+ {
+ if ( String.class == value.getClass() )
+ {
+ String interpolated = ctx.interpolate( (String) value );
+
+ if ( !interpolated.equals( value ) )
+ {
+ try
+ {
+ c.set( i, interpolated );
+ }
+ catch ( UnsupportedOperationException e )
+ {
+ return;
+ }
+ }
+ }
+ else
+ {
+ if ( value.getClass().isArray() )
+ {
+ evaluateArray( value, ctx );
+ }
+ else
+ {
+ ctx.interpolationTargets.add( value );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ static final class MapField
+ extends CacheField
+ {
+ MapField( Field field )
+ {
+ super( field );
+ }
+
+ @Override
+ void doInterpolate( Object target, InterpolateObjectAction ctx )
+ throws IllegalAccessException
+ {
+ @SuppressWarnings( "unchecked" ) Map<Object, Object> m = (Map<Object, Object>) field.get( target );
+ if ( m == null || m.isEmpty() )
+ {
+ return;
+ }
+
+ for ( Map.Entry<Object, Object> entry : m.entrySet() )
+ {
+ Object value = entry.getValue();
+
+ if ( value == null )
+ {
+ continue;
+ }
+
+ if ( String.class == value.getClass() )
+ {
+ String interpolated = ctx.interpolate( (String) value );
+
+ if ( !interpolated.equals( value ) )
+ {
+ try
+ {
+ entry.setValue( interpolated );
+ }
+ catch ( UnsupportedOperationException ignore )
+ {
+ // nop
+ }
+ }
+ }
+ else if ( value.getClass().isArray() )
+ {
+ evaluateArray( value, ctx );
+ }
+ else
+ {
+ ctx.interpolationTargets.add( value );
+ }
+ }
+ }
+ }
+
+ static final class ObjectField
+ extends CacheField
+ {
+ private final boolean isArray;
+
+ ObjectField( Field field )
+ {
+ super( field );
+ this.isArray = field.getType().isArray();
+ }
+
+ @Override
+ void doInterpolate( Object target, InterpolateObjectAction ctx )
+ throws IllegalAccessException
+ {
+ Object value = field.get( target );
+ if ( value != null )
+ {
+ if ( isArray )
+ {
+ evaluateArray( value, ctx );
+ }
+ else
+ {
+ ctx.interpolationTargets.add( value );
+ }
+ }
+ }
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/UrlNormalizingPostProcessor.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/UrlNormalizingPostProcessor.java
new file mode 100644
index 00000000..63fb82d6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/UrlNormalizingPostProcessor.java
@@ -0,0 +1,69 @@
+package org.apache.maven.model.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.maven.model.path.UrlNormalizer;
+import org.codehaus.plexus.interpolation.InterpolationPostProcessor;
+
+/**
+ * Ensures that expressions referring to URLs evaluate to normalized URLs.
+ *
+ * @author Benjamin Bentmann
+ */
+class UrlNormalizingPostProcessor
+ implements InterpolationPostProcessor
+{
+
+ private static final Set<String> URL_EXPRESSIONS;
+
+ static
+ {
+ Set<String> expressions = new HashSet<String>();
+ expressions.add( "project.url" );
+ expressions.add( "project.scm.url" );
+ expressions.add( "project.scm.connection" );
+ expressions.add( "project.scm.developerConnection" );
+ expressions.add( "project.distributionManagement.site.url" );
+
+ URL_EXPRESSIONS = expressions;
+ }
+
+ private UrlNormalizer normalizer;
+
+ public UrlNormalizingPostProcessor( UrlNormalizer normalizer )
+ {
+ this.normalizer = normalizer;
+ }
+
+ @Override
+ public Object execute( String expression, Object value )
+ {
+ if ( value != null && URL_EXPRESSIONS.contains( expression ) )
+ {
+ return normalizer.normalize( value.toString() );
+ }
+
+ return null;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java
new file mode 100644
index 00000000..c927b60f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java
@@ -0,0 +1,134 @@
+package org.apache.maven.model.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.Map;
+
+import org.apache.maven.model.InputSource;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.apache.maven.model.io.xpp3.MavenXpp3ReaderEx;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * Handles deserialization of a model from some kind of textual format like XML.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = ModelReader.class )
+public class DefaultModelReader
+ implements ModelReader
+{
+
+ @Override
+ public Model read( File input, Map<String, ?> options )
+ throws IOException
+ {
+ if ( input == null )
+ {
+ throw new IllegalArgumentException( "input file missing" );
+ }
+
+ Model model = read( new FileInputStream( input ), options );
+
+ model.setPomFile( input );
+
+ return model;
+ }
+
+ @Override
+ public Model read( Reader input, Map<String, ?> options )
+ throws IOException
+ {
+ if ( input == null )
+ {
+ throw new IllegalArgumentException( "input reader missing" );
+ }
+
+ try
+ {
+ return read( input, isStrict( options ), getSource( options ) );
+ }
+ finally
+ {
+ IOUtil.close( input );
+ }
+ }
+
+ @Override
+ public Model read( InputStream input, Map<String, ?> options )
+ throws IOException
+ {
+ if ( input == null )
+ {
+ throw new IllegalArgumentException( "input stream missing" );
+ }
+
+ try
+ {
+ return read( ReaderFactory.newXmlReader( input ), isStrict( options ), getSource( options ) );
+ }
+ finally
+ {
+ IOUtil.close( input );
+ }
+ }
+
+ private boolean isStrict( Map<String, ?> options )
+ {
+ Object value = ( options != null ) ? options.get( IS_STRICT ) : null;
+ return value == null || Boolean.parseBoolean( value.toString() );
+ }
+
+ private InputSource getSource( Map<String, ?> options )
+ {
+ Object value = ( options != null ) ? options.get( INPUT_SOURCE ) : null;
+ return (InputSource) value;
+ }
+
+ private Model read( Reader reader, boolean strict, InputSource source )
+ throws IOException
+ {
+ try
+ {
+ if ( source != null )
+ {
+ return new MavenXpp3ReaderEx().read( reader, strict, source );
+ }
+ else
+ {
+ return new MavenXpp3Reader().read( reader, strict );
+ }
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new ModelParseException( e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelWriter.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelWriter.java
new file mode 100644
index 00000000..7294de3c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelWriter.java
@@ -0,0 +1,118 @@
+package org.apache.maven.model.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.Map;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.WriterFactory;
+
+/**
+ * Handles serialization of a model into some kind of textual format like XML.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = ModelWriter.class )
+public class DefaultModelWriter
+ implements ModelWriter
+{
+
+ @Override
+ public void write( File output, Map<String, Object> options, Model model )
+ throws IOException
+ {
+ if ( output == null )
+ {
+ throw new IllegalArgumentException( "output file missing" );
+ }
+
+ if ( model == null )
+ {
+ throw new IllegalArgumentException( "model missing" );
+ }
+
+ output.getParentFile().mkdirs();
+
+ write( WriterFactory.newXmlWriter( output ), options, model );
+ }
+
+ @Override
+ public void write( Writer output, Map<String, Object> options, Model model )
+ throws IOException
+ {
+ if ( output == null )
+ {
+ throw new IllegalArgumentException( "output writer missing" );
+ }
+
+ if ( model == null )
+ {
+ throw new IllegalArgumentException( "model missing" );
+ }
+
+ try
+ {
+ MavenXpp3Writer w = new MavenXpp3Writer();
+ w.write( output, model );
+ }
+ finally
+ {
+ IOUtil.close( output );
+ }
+ }
+
+ @Override
+ public void write( OutputStream output, Map<String, Object> options, Model model )
+ throws IOException
+ {
+ if ( output == null )
+ {
+ throw new IllegalArgumentException( "output stream missing" );
+ }
+
+ if ( model == null )
+ {
+ throw new IllegalArgumentException( "model missing" );
+ }
+
+ try
+ {
+ String encoding = model.getModelEncoding();
+ if ( encoding == null || encoding.length() <= 0 )
+ {
+ encoding = "UTF-8";
+ }
+ write( new OutputStreamWriter( output, encoding ), options, model );
+ }
+ finally
+ {
+ IOUtil.close( output );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/ModelParseException.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/ModelParseException.java
new file mode 100644
index 00000000..1b2cbc34
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/ModelParseException.java
@@ -0,0 +1,93 @@
+package org.apache.maven.model.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+
+/**
+ * Signals a failure to parse the POM due to invalid syntax (e.g. non-wellformed XML or unknown elements).
+ *
+ * @author Benjamin Bentmann
+ */
+public class ModelParseException
+ extends IOException
+{
+
+ /**
+ * The one-based index of the line containing the error.
+ */
+ private final int lineNumber;
+
+ /**
+ * The one-based index of the column containing the error.
+ */
+ private final int columnNumber;
+
+ /**
+ * Creates a new parser exception with the specified details.
+ *
+ * @param message The error message, may be {@code null}.
+ * @param lineNumber The one-based index of the line containing the error or {@code -1} if unknown.
+ * @param columnNumber The one-based index of the column containing the error or {@code -1} if unknown.
+ */
+ public ModelParseException( String message, int lineNumber, int columnNumber )
+ {
+ super( message );
+ this.lineNumber = lineNumber;
+ this.columnNumber = columnNumber;
+ }
+
+ /**
+ * Creates a new parser exception with the specified details.
+ *
+ * @param message The error message, may be {@code null}.
+ * @param lineNumber The one-based index of the line containing the error or {@code -1} if unknown.
+ * @param columnNumber The one-based index of the column containing the error or {@code -1} if unknown.
+ * @param cause The nested cause of this error, may be {@code null}.
+ */
+ public ModelParseException( String message, int lineNumber, int columnNumber, Throwable cause )
+ {
+ super( message );
+ initCause( cause );
+ this.lineNumber = lineNumber;
+ this.columnNumber = columnNumber;
+ }
+
+ /**
+ * Gets the one-based index of the line containing the error.
+ *
+ * @return The one-based index of the line containing the error or a non-positive value if unknown.
+ */
+ public int getLineNumber()
+ {
+ return lineNumber;
+ }
+
+ /**
+ * Gets the one-based index of the column containing the error.
+ *
+ * @return The one-based index of the column containing the error or non-positive value if unknown.
+ */
+ public int getColumnNumber()
+ {
+ return columnNumber;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/ModelReader.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/ModelReader.java
new file mode 100644
index 00000000..75a5ebee
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/ModelReader.java
@@ -0,0 +1,89 @@
+package org.apache.maven.model.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.Map;
+
+import org.apache.maven.model.Model;
+
+/**
+ * Handles deserialization of a model from some kind of textual format like XML.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ModelReader
+{
+
+ /**
+ * The key for the option to enable strict parsing. This option is of type {@link Boolean} and defaults to {@code
+ * true}. If {@code false}, unknown elements will be ignored instead of causing a failure.
+ */
+ String IS_STRICT = "org.apache.maven.model.io.isStrict";
+
+ /**
+ * The key for the option to enable tracking of line/column numbers. This option is of type
+ * {@link org.apache.maven.model.InputSource} and defaults to {@code null}. Providing an input source enables
+ * location tracking.
+ */
+ String INPUT_SOURCE = "org.apache.maven.model.io.inputSource";
+
+ /**
+ * Reads the model from the specified file.
+ *
+ * @param input The file to deserialize the model from, must not be {@code null}.
+ * @param options The options to use for deserialization, may be {@code null} to use the default values.
+ * @return The deserialized model, never {@code null}.
+ * @throws IOException If the model could not be deserialized.
+ * @throws ModelParseException If the input format could not be parsed.
+ */
+ Model read( File input, Map<String, ?> options )
+ throws IOException, ModelParseException;
+
+ /**
+ * Reads the model from the specified character reader. The reader will be automatically closed before the method
+ * returns.
+ *
+ * @param input The reader to deserialize the model from, must not be {@code null}.
+ * @param options The options to use for deserialization, may be {@code null} to use the default values.
+ * @return The deserialized model, never {@code null}.
+ * @throws IOException If the model could not be deserialized.
+ * @throws ModelParseException If the input format could not be parsed.
+ */
+ Model read( Reader input, Map<String, ?> options )
+ throws IOException, ModelParseException;
+
+ /**
+ * Reads the model from the specified byte stream. The stream will be automatically closed before the method
+ * returns.
+ *
+ * @param input The stream to deserialize the model from, must not be {@code null}.
+ * @param options The options to use for deserialization, may be {@code null} to use the default values.
+ * @return The deserialized model, never {@code null}.
+ * @throws IOException If the model could not be deserialized.
+ * @throws ModelParseException If the input format could not be parsed.
+ */
+ Model read( InputStream input, Map<String, ?> options )
+ throws IOException, ModelParseException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/ModelWriter.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/ModelWriter.java
new file mode 100644
index 00000000..af7e0cab
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/ModelWriter.java
@@ -0,0 +1,74 @@
+package org.apache.maven.model.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.util.Map;
+
+import org.apache.maven.model.Model;
+
+/**
+ * Handles serialization of a model into some kind of textual format like XML.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ModelWriter
+{
+
+ /**
+ * Writes the supplied model to the specified file. Any non-existing parent directories of the output file will be
+ * created automatically.
+ *
+ * @param output The file to serialize the model to, must not be {@code null}.
+ * @param options The options to use for serialization, may be {@code null} to use the default values.
+ * @param model The model to serialize, must not be {@code null}.
+ * @throws IOException If the model could not be serialized.
+ */
+ void write( File output, Map<String, Object> options, Model model )
+ throws IOException;
+
+ /**
+ * Writes the supplied model to the specified character writer. The writer will be automatically closed before the
+ * method returns.
+ *
+ * @param output The writer to serialize the model to, must not be {@code null}.
+ * @param options The options to use for serialization, may be {@code null} to use the default values.
+ * @param model The model to serialize, must not be {@code null}.
+ * @throws IOException If the model could not be serialized.
+ */
+ void write( Writer output, Map<String, Object> options, Model model )
+ throws IOException;
+
+ /**
+ * Writes the supplied model to the specified byte stream. The stream will be automatically closed before the method
+ * returns.
+ *
+ * @param output The stream to serialize the model to, must not be {@code null}.
+ * @param options The options to use for serialization, may be {@code null} to use the default values.
+ * @param model The model to serialize, must not be {@code null}.
+ * @throws IOException If the model could not be serialized.
+ */
+ void write( OutputStream output, Map<String, Object> options, Model model )
+ throws IOException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/locator/DefaultModelLocator.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/locator/DefaultModelLocator.java
new file mode 100644
index 00000000..299da65f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/locator/DefaultModelLocator.java
@@ -0,0 +1,42 @@
+package org.apache.maven.model.locator;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Locates a POM file within a project base directory.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = ModelLocator.class )
+public class DefaultModelLocator
+ implements ModelLocator
+{
+
+ @Override
+ public File locatePom( File projectDirectory )
+ {
+ return new File( projectDirectory, "pom.xml" );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/locator/ModelLocator.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/locator/ModelLocator.java
new file mode 100644
index 00000000..3aa0045c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/locator/ModelLocator.java
@@ -0,0 +1,44 @@
+package org.apache.maven.model.locator;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+/**
+ * Locates a POM file within a project base directory.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ModelLocator
+{
+
+ /**
+ * Locates the POM file within the specified project directory. In case the given project directory does not exist
+ * or does not contain a POM file, the return value indicates the expected path to the POM file. Sub directories of
+ * the project directory will not be considered when locating the POM file. The return value will be an absolute
+ * path if the project directory is given as an absolute path.
+ *
+ * @param projectDirectory The (possibly non-existent) base directory to locate the POM file in, must not be {@code
+ * null}.
+ * @return The path to the (possibly non-existent) POM file, never {@code null}.
+ */
+ File locatePom( File projectDirectory );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultDependencyManagementInjector.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultDependencyManagementInjector.java
new file mode 100644
index 00000000..bfeafcb7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultDependencyManagementInjector.java
@@ -0,0 +1,110 @@
+package org.apache.maven.model.management;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.Exclusion;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.merge.MavenModelMerger;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Handles injection of dependency management into the model.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = DependencyManagementInjector.class )
+public class DefaultDependencyManagementInjector
+ implements DependencyManagementInjector
+{
+
+ private ManagementModelMerger merger = new ManagementModelMerger();
+
+ @Override
+ public void injectManagement( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
+ {
+ merger.mergeManagedDependencies( model );
+ }
+
+ protected static class ManagementModelMerger
+ extends MavenModelMerger
+ {
+
+ public void mergeManagedDependencies( Model model )
+ {
+ DependencyManagement dependencyManagement = model.getDependencyManagement();
+ if ( dependencyManagement != null )
+ {
+ Map<Object, Dependency> dependencies = new HashMap<Object, Dependency>();
+ Map<Object, Object> context = Collections.emptyMap();
+
+ for ( Dependency dependency : model.getDependencies() )
+ {
+ Object key = getDependencyKey( dependency );
+ dependencies.put( key, dependency );
+ }
+
+ for ( Dependency managedDependency : dependencyManagement.getDependencies() )
+ {
+ Object key = getDependencyKey( managedDependency );
+ Dependency dependency = dependencies.get( key );
+ if ( dependency != null )
+ {
+ mergeDependency( dependency, managedDependency, false, context );
+ }
+ }
+ }
+ }
+
+ @Override
+ protected void mergeDependency_Optional( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ // optional flag is not managed
+ }
+
+ @Override
+ protected void mergeDependency_Exclusions( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Exclusion> tgt = target.getExclusions();
+ if ( tgt.isEmpty() )
+ {
+ List<Exclusion> src = source.getExclusions();
+
+ for ( Exclusion element : src )
+ {
+ Exclusion clone = element.clone();
+ target.addExclusion( clone );
+ }
+ }
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultPluginManagementInjector.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultPluginManagementInjector.java
new file mode 100644
index 00000000..75d7d878
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultPluginManagementInjector.java
@@ -0,0 +1,137 @@
+package org.apache.maven.model.management;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginContainer;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.model.PluginManagement;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.merge.MavenModelMerger;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Handles injection of plugin management into the model.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = PluginManagementInjector.class )
+public class DefaultPluginManagementInjector
+ implements PluginManagementInjector
+{
+
+ private ManagementModelMerger merger = new ManagementModelMerger();
+
+ @Override
+ public void injectManagement( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
+ {
+ merger.mergeManagedBuildPlugins( model );
+ }
+
+ protected static class ManagementModelMerger
+ extends MavenModelMerger
+ {
+
+ public void mergeManagedBuildPlugins( Model model )
+ {
+ Build build = model.getBuild();
+ if ( build != null )
+ {
+ PluginManagement pluginManagement = build.getPluginManagement();
+ if ( pluginManagement != null )
+ {
+ mergePluginContainer_Plugins( build, pluginManagement );
+ }
+ }
+ }
+
+ private void mergePluginContainer_Plugins( PluginContainer target, PluginContainer source )
+ {
+ List<Plugin> src = source.getPlugins();
+ if ( !src.isEmpty() )
+ {
+ List<Plugin> tgt = target.getPlugins();
+
+ Map<Object, Plugin> managedPlugins = new LinkedHashMap<Object, Plugin>( src.size() * 2 );
+
+ Map<Object, Object> context = Collections.emptyMap();
+
+ for ( Plugin element : src )
+ {
+ Object key = getPluginKey( element );
+ managedPlugins.put( key, element );
+ }
+
+ for ( Plugin element : tgt )
+ {
+ Object key = getPluginKey( element );
+ Plugin managedPlugin = managedPlugins.get( key );
+ if ( managedPlugin != null )
+ {
+ mergePlugin( element, managedPlugin, false, context );
+ }
+ }
+ }
+ }
+
+ @Override
+ protected void mergePlugin_Executions( Plugin target, Plugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<PluginExecution> src = source.getExecutions();
+ if ( !src.isEmpty() )
+ {
+ List<PluginExecution> tgt = target.getExecutions();
+
+ Map<Object, PluginExecution> merged =
+ new LinkedHashMap<Object, PluginExecution>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( PluginExecution element : src )
+ {
+ Object key = getPluginExecutionKey( element );
+ merged.put( key, element.clone() );
+ }
+
+ for ( PluginExecution element : tgt )
+ {
+ Object key = getPluginExecutionKey( element );
+ PluginExecution existing = merged.get( key );
+ if ( existing != null )
+ {
+ mergePluginExecution( element, existing, sourceDominant, context );
+ }
+ merged.put( key, element );
+ }
+
+ target.setExecutions( new ArrayList<PluginExecution>( merged.values() ) );
+ }
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/DependencyManagementInjector.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/DependencyManagementInjector.java
new file mode 100644
index 00000000..3b70a09c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/DependencyManagementInjector.java
@@ -0,0 +1,44 @@
+package org.apache.maven.model.management;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+
+/**
+ * Handles injection of dependency management into the model.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface DependencyManagementInjector
+{
+
+ /**
+ * Merges default values from the dependency management section of the given model into itself.
+ *
+ * @param model The model into which to merge the values specified by its dependency management sections, must not
+ * be <code>null</code>.
+ * @param request The model building request that holds further settings, must not be {@code null}.
+ * @param problems The container used to collect problems that were encountered, must not be {@code null}.
+ */
+ void injectManagement( Model model, ModelBuildingRequest request, ModelProblemCollector problems );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/PluginManagementInjector.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/PluginManagementInjector.java
new file mode 100644
index 00000000..7384fdf0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/PluginManagementInjector.java
@@ -0,0 +1,44 @@
+package org.apache.maven.model.management;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+
+/**
+ * Handles injection of plugin management into the model.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface PluginManagementInjector
+{
+
+ /**
+ * Merges default values from the plugin management section of the given model into itself.
+ *
+ * @param model The model into which to merge the values specified by its plugin management section, must not be
+ * <code>null</code>.
+ * @param request The model building request that holds further settings, must not be {@code null}.
+ * @param problems The container used to collect problems that were encountered, must not be {@code null}.
+ */
+ void injectManagement( Model model, ModelBuildingRequest request, ModelProblemCollector problems );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
new file mode 100644
index 00000000..2727a111
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
@@ -0,0 +1,729 @@
+package org.apache.maven.model.merge;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.model.BuildBase;
+import org.apache.maven.model.CiManagement;
+import org.apache.maven.model.Contributor;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DeploymentRepository;
+import org.apache.maven.model.Developer;
+import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.model.Exclusion;
+import org.apache.maven.model.Extension;
+import org.apache.maven.model.InputLocation;
+import org.apache.maven.model.IssueManagement;
+import org.apache.maven.model.License;
+import org.apache.maven.model.MailingList;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.ModelBase;
+import org.apache.maven.model.Organization;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.ReportSet;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.RepositoryBase;
+import org.apache.maven.model.Scm;
+import org.apache.maven.model.Site;
+
+/**
+ * The domain-specific model merger for the Maven POM, overriding generic code from parent class when necessary with
+ * more adapted algorithms.
+ *
+ * @author Benjamin Bentmann
+ */
+public class MavenModelMerger
+ extends ModelMerger
+{
+
+ /**
+ * The hint key for the child path adjustment used during inheritance for URL calculations.
+ */
+ public static final String CHILD_PATH_ADJUSTMENT = "child-path-adjustment";
+
+ /**
+ * The context key for the artifact id of the target model.
+ */
+ private static final String ARTIFACT_ID = "artifact-id";
+
+ @Override
+ protected void mergeModel( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ context.put( ARTIFACT_ID, target.getArtifactId() );
+
+ super.mergeModel( target, source, sourceDominant, context );
+ }
+
+ @Override
+ protected void mergeModel_Name( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getName();
+ if ( src != null )
+ {
+ if ( sourceDominant )
+ {
+ target.setName( src );
+ target.setLocation( "name", source.getLocation( "name" ) );
+ }
+ }
+ }
+
+ @Override
+ protected void mergeModel_Url( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ else if ( target.getUrl() == null )
+ {
+ target.setUrl( appendPath( src, context ) );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ /*
+ * TODO: Whether the merge continues recursively into an existing node or not could be an option for the generated
+ * merger
+ */
+ @Override
+ protected void mergeModel_Organization( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Organization src = source.getOrganization();
+ if ( src != null )
+ {
+ Organization tgt = target.getOrganization();
+ if ( tgt == null )
+ {
+ tgt = new Organization();
+ tgt.setLocation( "", src.getLocation( "" ) );
+ target.setOrganization( tgt );
+ mergeOrganization( tgt, src, sourceDominant, context );
+ }
+ }
+ }
+
+ @Override
+ protected void mergeModel_IssueManagement( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ IssueManagement src = source.getIssueManagement();
+ if ( src != null )
+ {
+ IssueManagement tgt = target.getIssueManagement();
+ if ( tgt == null )
+ {
+ tgt = new IssueManagement();
+ tgt.setLocation( "", src.getLocation( "" ) );
+ target.setIssueManagement( tgt );
+ mergeIssueManagement( tgt, src, sourceDominant, context );
+ }
+ }
+ }
+
+ @Override
+ protected void mergeModel_CiManagement( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ CiManagement src = source.getCiManagement();
+ if ( src != null )
+ {
+ CiManagement tgt = target.getCiManagement();
+ if ( tgt == null )
+ {
+ tgt = new CiManagement();
+ tgt.setLocation( "", src.getLocation( "" ) );
+ target.setCiManagement( tgt );
+ mergeCiManagement( tgt, src, sourceDominant, context );
+ }
+ }
+ }
+
+ @Override
+ protected void mergeModel_ModelVersion( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ // neither inherited nor injected
+ }
+
+ @Override
+ protected void mergeModel_ArtifactId( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ // neither inherited nor injected
+ }
+
+ @Override
+ protected void mergeModel_Profiles( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ // neither inherited nor injected
+ }
+
+ @Override
+ protected void mergeModel_Prerequisites( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ // neither inherited nor injected
+ }
+
+ @Override
+ protected void mergeModel_Licenses( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ if ( target.getLicenses().isEmpty() )
+ {
+ target.setLicenses( new ArrayList<License>( source.getLicenses() ) );
+ }
+ }
+
+ @Override
+ protected void mergeModel_Developers( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ if ( target.getDevelopers().isEmpty() )
+ {
+ target.setDevelopers( new ArrayList<Developer>( source.getDevelopers() ) );
+ }
+ }
+
+ @Override
+ protected void mergeModel_Contributors( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ if ( target.getContributors().isEmpty() )
+ {
+ target.setContributors( new ArrayList<Contributor>( source.getContributors() ) );
+ }
+ }
+
+ @Override
+ protected void mergeModel_MailingLists( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ if ( target.getMailingLists().isEmpty() )
+ {
+ target.setMailingLists( new ArrayList<MailingList>( source.getMailingLists() ) );
+ }
+ }
+
+ @Override
+ protected void mergeModelBase_Modules( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getModules();
+ if ( !src.isEmpty() && sourceDominant )
+ {
+ List<Integer> indices = new ArrayList<Integer>();
+ List<String> tgt = target.getModules();
+ Set<String> excludes = new LinkedHashSet<String>( tgt );
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ for ( int i = 0, n = tgt.size(); i < n; i++ )
+ {
+ indices.add( i );
+ }
+ for ( int i = 0, n = src.size(); i < n; i++ )
+ {
+ String s = src.get( i );
+ if ( !excludes.contains( s ) )
+ {
+ merged.add( s );
+ indices.add( ~i );
+ }
+ }
+ target.setModules( merged );
+ target.setLocation( "modules", InputLocation.merge( target.getLocation( "modules" ),
+ source.getLocation( "modules" ), indices ) );
+ }
+ }
+
+ /*
+ * TODO: The order of the merged list could be controlled by an attribute in the model association: target-first,
+ * source-first, dominant-first, recessive-first
+ */
+ @Override
+ protected void mergeModelBase_Repositories( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Repository> src = source.getRepositories();
+ if ( !src.isEmpty() )
+ {
+ List<Repository> tgt = target.getRepositories();
+ Map<Object, Repository> merged = new LinkedHashMap<Object, Repository>( ( src.size() + tgt.size() ) * 2 );
+
+ List<Repository> dominant, recessive;
+ if ( sourceDominant )
+ {
+ dominant = src;
+ recessive = tgt;
+ }
+ else
+ {
+ dominant = tgt;
+ recessive = src;
+ }
+
+ for ( Repository element : dominant )
+ {
+ Object key = getRepositoryKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Repository element : recessive )
+ {
+ Object key = getRepositoryKey( element );
+ if ( !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setRepositories( new ArrayList<Repository>( merged.values() ) );
+ }
+ }
+
+ @Override
+ protected void mergeModelBase_PluginRepositories( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Repository> src = source.getPluginRepositories();
+ if ( !src.isEmpty() )
+ {
+ List<Repository> tgt = target.getPluginRepositories();
+ Map<Object, Repository> merged = new LinkedHashMap<Object, Repository>( ( src.size() + tgt.size() ) * 2 );
+
+ List<Repository> dominant, recessive;
+ if ( sourceDominant )
+ {
+ dominant = src;
+ recessive = tgt;
+ }
+ else
+ {
+ dominant = tgt;
+ recessive = src;
+ }
+
+ for ( Repository element : dominant )
+ {
+ Object key = getRepositoryKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Repository element : recessive )
+ {
+ Object key = getRepositoryKey( element );
+ if ( !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setPluginRepositories( new ArrayList<Repository>( merged.values() ) );
+ }
+ }
+
+ /*
+ * TODO: Whether duplicates should be removed looks like an option for the generated merger.
+ */
+ @Override
+ protected void mergeBuildBase_Filters( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getFilters();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getFilters();
+ Set<String> excludes = new LinkedHashSet<String>( tgt );
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ for ( String s : src )
+ {
+ if ( !excludes.contains( s ) )
+ {
+ merged.add( s );
+ }
+ }
+ target.setFilters( merged );
+ }
+ }
+
+ @Override
+ protected void mergeBuildBase_Resources( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ if ( sourceDominant || target.getResources().isEmpty() )
+ {
+ super.mergeBuildBase_Resources( target, source, sourceDominant, context );
+ }
+ }
+
+ @Override
+ protected void mergeBuildBase_TestResources( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ if ( sourceDominant || target.getTestResources().isEmpty() )
+ {
+ super.mergeBuildBase_TestResources( target, source, sourceDominant, context );
+ }
+ }
+
+ @Override
+ protected void mergeDistributionManagement_Repository( DistributionManagement target,
+ DistributionManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ DeploymentRepository src = source.getRepository();
+ if ( src != null )
+ {
+ DeploymentRepository tgt = target.getRepository();
+ if ( sourceDominant || tgt == null )
+ {
+ tgt = new DeploymentRepository();
+ tgt.setLocation( "", src.getLocation( "" ) );
+ target.setRepository( tgt );
+ mergeDeploymentRepository( tgt, src, sourceDominant, context );
+ }
+ }
+ }
+
+ @Override
+ protected void mergeDistributionManagement_SnapshotRepository( DistributionManagement target,
+ DistributionManagement source,
+ boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ DeploymentRepository src = source.getSnapshotRepository();
+ if ( src != null )
+ {
+ DeploymentRepository tgt = target.getSnapshotRepository();
+ if ( sourceDominant || tgt == null )
+ {
+ tgt = new DeploymentRepository();
+ tgt.setLocation( "", src.getLocation( "" ) );
+ target.setSnapshotRepository( tgt );
+ mergeDeploymentRepository( tgt, src, sourceDominant, context );
+ }
+ }
+ }
+
+ @Override
+ protected void mergeDistributionManagement_Site( DistributionManagement target, DistributionManagement source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ Site src = source.getSite();
+ if ( src != null )
+ {
+ Site tgt = target.getSite();
+ if ( sourceDominant || tgt == null )
+ {
+ tgt = new Site();
+ tgt.setLocation( "", src.getLocation( "" ) );
+ target.setSite( tgt );
+ mergeSite( tgt, src, sourceDominant, context );
+ }
+ }
+ }
+
+ @Override
+ protected void mergeSite_Url( Site target, Site source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ else if ( target.getUrl() == null )
+ {
+ target.setUrl( appendPath( src, context ) );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ @Override
+ protected void mergeScm_Url( Scm target, Scm source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ else if ( target.getUrl() == null )
+ {
+ target.setUrl( appendPath( src, context ) );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ @Override
+ protected void mergeScm_Connection( Scm target, Scm source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getConnection();
+ if ( src != null )
+ {
+ if ( sourceDominant )
+ {
+ target.setConnection( src );
+ target.setLocation( "connection", source.getLocation( "connection" ) );
+ }
+ else if ( target.getConnection() == null )
+ {
+ target.setConnection( appendPath( src, context ) );
+ target.setLocation( "connection", source.getLocation( "connection" ) );
+ }
+ }
+ }
+
+ @Override
+ protected void mergeScm_DeveloperConnection( Scm target, Scm source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getDeveloperConnection();
+ if ( src != null )
+ {
+ if ( sourceDominant )
+ {
+ target.setDeveloperConnection( src );
+ target.setLocation( "developerConnection", source.getLocation( "developerConnection" ) );
+ }
+ else if ( target.getDeveloperConnection() == null )
+ {
+ target.setDeveloperConnection( appendPath( src, context ) );
+ target.setLocation( "developerConnection", source.getLocation( "developerConnection" ) );
+ }
+ }
+ }
+
+ @Override
+ protected void mergePlugin_Executions( Plugin target, Plugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<PluginExecution> src = source.getExecutions();
+ if ( !src.isEmpty() )
+ {
+ List<PluginExecution> tgt = target.getExecutions();
+ Map<Object, PluginExecution> merged =
+ new LinkedHashMap<Object, PluginExecution>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( PluginExecution element : src )
+ {
+ if ( sourceDominant
+ || ( element.getInherited() != null ? element.isInherited() : source.isInherited() ) )
+ {
+ Object key = getPluginExecutionKey( element );
+ merged.put( key, element );
+ }
+ }
+
+ for ( PluginExecution element : tgt )
+ {
+ Object key = getPluginExecutionKey( element );
+ PluginExecution existing = merged.get( key );
+ if ( existing != null )
+ {
+ mergePluginExecution( element, existing, sourceDominant, context );
+ }
+ merged.put( key, element );
+ }
+
+ target.setExecutions( new ArrayList<PluginExecution>( merged.values() ) );
+ }
+ }
+
+ @Override
+ protected void mergePluginExecution_Goals( PluginExecution target, PluginExecution source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getGoals();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getGoals();
+ Set<String> excludes = new LinkedHashSet<String>( tgt );
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ for ( String s : src )
+ {
+ if ( !excludes.contains( s ) )
+ {
+ merged.add( s );
+ }
+ }
+ target.setGoals( merged );
+ }
+ }
+
+ @Override
+ protected void mergeReportPlugin_ReportSets( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<ReportSet> src = source.getReportSets();
+ if ( !src.isEmpty() )
+ {
+ List<ReportSet> tgt = target.getReportSets();
+ Map<Object, ReportSet> merged = new LinkedHashMap<Object, ReportSet>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( ReportSet rset : src )
+ {
+ if ( sourceDominant || ( rset.getInherited() != null ? rset.isInherited() : source.isInherited() ) )
+ {
+ Object key = getReportSetKey( rset );
+ merged.put( key, rset );
+ }
+ }
+
+ for ( ReportSet element : tgt )
+ {
+ Object key = getReportSetKey( element );
+ ReportSet existing = merged.get( key );
+ if ( existing != null )
+ {
+ mergeReportSet( element, existing, sourceDominant, context );
+ }
+ merged.put( key, element );
+ }
+
+ target.setReportSets( new ArrayList<ReportSet>( merged.values() ) );
+ }
+ }
+
+ @Override
+ protected Object getDependencyKey( Dependency dependency )
+ {
+ return dependency.getManagementKey();
+ }
+
+ @Override
+ protected Object getPluginKey( Plugin plugin )
+ {
+ return plugin.getKey();
+ }
+
+ @Override
+ protected Object getPluginExecutionKey( PluginExecution pluginExecution )
+ {
+ return pluginExecution.getId();
+ }
+
+ @Override
+ protected Object getReportPluginKey( ReportPlugin reportPlugin )
+ {
+ return reportPlugin.getKey();
+ }
+
+ @Override
+ protected Object getReportSetKey( ReportSet reportSet )
+ {
+ return reportSet.getId();
+ }
+
+ @Override
+ protected Object getRepositoryBaseKey( RepositoryBase repositoryBase )
+ {
+ return repositoryBase.getId();
+ }
+
+ @Override
+ protected Object getExtensionKey( Extension extension )
+ {
+ return extension.getGroupId() + ':' + extension.getArtifactId();
+ }
+
+ @Override
+ protected Object getExclusionKey( Exclusion exclusion )
+ {
+ return exclusion.getGroupId() + ':' + exclusion.getArtifactId();
+ }
+
+ private String appendPath( String parentPath, Map<Object, Object> context )
+ {
+ Object artifactId = context.get( ARTIFACT_ID );
+ Object childPathAdjustment = context.get( CHILD_PATH_ADJUSTMENT );
+
+ if ( artifactId != null && childPathAdjustment != null )
+ {
+ return appendPath( parentPath, artifactId.toString(), childPathAdjustment.toString() );
+ }
+ else
+ {
+ return parentPath;
+ }
+ }
+
+ private String appendPath( String parentPath, String childPath, String pathAdjustment )
+ {
+ String path = parentPath;
+ path = concatPath( path, pathAdjustment );
+ path = concatPath( path, childPath );
+ return path;
+ }
+
+ private String concatPath( String base, String path )
+ {
+ String result = base;
+
+ if ( path != null && path.length() > 0 )
+ {
+ if ( ( result.endsWith( "/" ) && !path.startsWith( "/" ) )
+ || ( !result.endsWith( "/" ) && path.startsWith( "/" ) ) )
+ {
+ result += path;
+ }
+ else if ( result.endsWith( "/" ) && path.startsWith( "/" ) )
+ {
+ result += path.substring( 1 );
+ }
+ else
+ {
+ result += '/';
+ result += path;
+ }
+ if ( base.endsWith( "/" ) && !result.endsWith( "/" ) )
+ {
+ result += '/';
+ }
+ }
+
+ return result;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/normalization/DefaultModelNormalizer.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/normalization/DefaultModelNormalizer.java
new file mode 100644
index 00000000..262dd3f5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/normalization/DefaultModelNormalizer.java
@@ -0,0 +1,135 @@
+package org.apache.maven.model.normalization;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.merge.MavenModelMerger;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * Handles normalization of a model.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = ModelNormalizer.class )
+public class DefaultModelNormalizer
+ implements ModelNormalizer
+{
+
+ private DuplicateMerger merger = new DuplicateMerger();
+
+ @Override
+ public void mergeDuplicates( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
+ {
+ Build build = model.getBuild();
+ if ( build != null )
+ {
+ List<Plugin> plugins = build.getPlugins();
+ Map<Object, Plugin> normalized = new LinkedHashMap<Object, Plugin>( plugins.size() * 2 );
+
+ for ( Plugin plugin : plugins )
+ {
+ Object key = plugin.getKey();
+ Plugin first = normalized.get( key );
+ if ( first != null )
+ {
+ merger.mergePlugin( plugin, first );
+ }
+ normalized.put( key, plugin );
+ }
+
+ if ( plugins.size() != normalized.size() )
+ {
+ build.setPlugins( new ArrayList<Plugin>( normalized.values() ) );
+ }
+ }
+
+ /*
+ * NOTE: This is primarily to keep backward-compat with Maven 2.x which did not validate that dependencies are
+ * unique within a single POM. Upon multiple declarations, 2.x just kept the last one but retained the order of
+ * the first occurrence. So when we're in lenient/compat mode, we have to deal with such broken POMs and mimic
+ * the way 2.x works. When we're in strict mode, the removal of duplicates just saves other merging steps from
+ * aftereffects and bogus error messages.
+ */
+ List<Dependency> dependencies = model.getDependencies();
+ Map<String, Dependency> normalized = new LinkedHashMap<String, Dependency>( dependencies.size() * 2 );
+
+ for ( Dependency dependency : dependencies )
+ {
+ normalized.put( dependency.getManagementKey(), dependency );
+ }
+
+ if ( dependencies.size() != normalized.size() )
+ {
+ model.setDependencies( new ArrayList<Dependency>( normalized.values() ) );
+ }
+ }
+
+ protected static class DuplicateMerger
+ extends MavenModelMerger
+ {
+
+ public void mergePlugin( Plugin target, Plugin source )
+ {
+ super.mergePlugin( target, source, false, Collections.emptyMap() );
+ }
+
+ }
+
+ @Override
+ public void injectDefaultValues( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
+ {
+ injectDependencyDefaults( model.getDependencies() );
+
+ Build build = model.getBuild();
+ if ( build != null )
+ {
+ for ( Plugin plugin : build.getPlugins() )
+ {
+ injectDependencyDefaults( plugin.getDependencies() );
+ }
+ }
+ }
+
+ private void injectDependencyDefaults( List<Dependency> dependencies )
+ {
+ for ( Dependency dependency : dependencies )
+ {
+ if ( StringUtils.isEmpty( dependency.getScope() ) )
+ {
+ // we cannot set this directly in the MDO due to the interactions with dependency management
+ dependency.setScope( "compile" );
+ }
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/normalization/ModelNormalizer.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/normalization/ModelNormalizer.java
new file mode 100644
index 00000000..7cab86b6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/normalization/ModelNormalizer.java
@@ -0,0 +1,54 @@
+package org.apache.maven.model.normalization;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+
+/**
+ * Handles normalization of a model. In this context, normalization is the process of producing a canonical
+ * representation for models that physically look different but are semantically equivalent.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ModelNormalizer
+{
+
+ /**
+ * Merges duplicate elements like multiple declarations of the same build plugin in the specified model.
+ *
+ * @param model The model whose duplicate elements should be merged, must not be {@code null}.
+ * @param request The model building request that holds further settings, must not be {@code null}.
+ * @param problems The container used to collect problems that were encountered, must not be {@code null}.
+ */
+ void mergeDuplicates( Model model, ModelBuildingRequest request, ModelProblemCollector problems );
+
+ /**
+ * Sets default values in the specified model that for technical reasons cannot be set directly in the Modello
+ * definition.
+ *
+ * @param model The model in which to set the default values, must not be {@code null}.
+ * @param request The model building request that holds further settings, must not be {@code null}.
+ * @param problems The container used to collect problems that were encountered, must not be {@code null}.
+ */
+ void injectDefaultValues( Model model, ModelBuildingRequest request, ModelProblemCollector problems );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelPathTranslator.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelPathTranslator.java
new file mode 100644
index 00000000..51fa60e6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelPathTranslator.java
@@ -0,0 +1,111 @@
+package org.apache.maven.model.path;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Reporting;
+import org.apache.maven.model.Resource;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+/**
+ * Resolves relative paths within a model against a specific base directory.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = ModelPathTranslator.class )
+public class DefaultModelPathTranslator
+ implements ModelPathTranslator
+{
+
+ @Requirement
+ private PathTranslator pathTranslator;
+
+ public DefaultModelPathTranslator setPathTranslator( PathTranslator pathTranslator )
+ {
+ this.pathTranslator = pathTranslator;
+ return this;
+ }
+
+ @Override
+ public void alignToBaseDirectory( Model model, File basedir, ModelBuildingRequest request )
+ {
+ if ( model == null || basedir == null )
+ {
+ return;
+ }
+
+ Build build = model.getBuild();
+
+ if ( build != null )
+ {
+ build.setDirectory( alignToBaseDirectory( build.getDirectory(), basedir ) );
+
+ build.setSourceDirectory( alignToBaseDirectory( build.getSourceDirectory(), basedir ) );
+
+ build.setTestSourceDirectory( alignToBaseDirectory( build.getTestSourceDirectory(), basedir ) );
+
+ build.setScriptSourceDirectory( alignToBaseDirectory( build.getScriptSourceDirectory(), basedir ) );
+
+ for ( Resource resource : build.getResources() )
+ {
+ resource.setDirectory( alignToBaseDirectory( resource.getDirectory(), basedir ) );
+ }
+
+ for ( Resource resource : build.getTestResources() )
+ {
+ resource.setDirectory( alignToBaseDirectory( resource.getDirectory(), basedir ) );
+ }
+
+ if ( build.getFilters() != null )
+ {
+ List<String> filters = new ArrayList<String>( build.getFilters().size() );
+ for ( String filter : build.getFilters() )
+ {
+ filters.add( alignToBaseDirectory( filter, basedir ) );
+ }
+ build.setFilters( filters );
+ }
+
+ build.setOutputDirectory( alignToBaseDirectory( build.getOutputDirectory(), basedir ) );
+
+ build.setTestOutputDirectory( alignToBaseDirectory( build.getTestOutputDirectory(), basedir ) );
+ }
+
+ Reporting reporting = model.getReporting();
+
+ if ( reporting != null )
+ {
+ reporting.setOutputDirectory( alignToBaseDirectory( reporting.getOutputDirectory(), basedir ) );
+ }
+ }
+
+ private String alignToBaseDirectory( String path, File basedir )
+ {
+ return pathTranslator.alignToBaseDirectory( path, basedir );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelUrlNormalizer.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelUrlNormalizer.java
new file mode 100644
index 00000000..2093f8fb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelUrlNormalizer.java
@@ -0,0 +1,84 @@
+package org.apache.maven.model.path;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Scm;
+import org.apache.maven.model.Site;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+/**
+ * Normalizes URLs to remove the ugly parent references "../" that got potentially inserted by URL adjustment during
+ * model inheritance.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = ModelUrlNormalizer.class )
+public class DefaultModelUrlNormalizer
+ implements ModelUrlNormalizer
+{
+
+ @Requirement
+ private UrlNormalizer urlNormalizer;
+
+ public DefaultModelUrlNormalizer setUrlNormalizer( UrlNormalizer urlNormalizer )
+ {
+ this.urlNormalizer = urlNormalizer;
+ return this;
+ }
+
+ @Override
+ public void normalize( Model model, ModelBuildingRequest request )
+ {
+ if ( model == null )
+ {
+ return;
+ }
+
+ model.setUrl( normalize( model.getUrl() ) );
+
+ Scm scm = model.getScm();
+ if ( scm != null )
+ {
+ scm.setUrl( normalize( scm.getUrl() ) );
+ scm.setConnection( normalize( scm.getConnection() ) );
+ scm.setDeveloperConnection( normalize( scm.getDeveloperConnection() ) );
+ }
+
+ DistributionManagement dist = model.getDistributionManagement();
+ if ( dist != null )
+ {
+ Site site = dist.getSite();
+ if ( site != null )
+ {
+ site.setUrl( normalize( site.getUrl() ) );
+ }
+ }
+ }
+
+ private String normalize( String url )
+ {
+ return urlNormalizer.normalize( url );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultPathTranslator.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultPathTranslator.java
new file mode 100644
index 00000000..1ad9d034
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultPathTranslator.java
@@ -0,0 +1,66 @@
+package org.apache.maven.model.path;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Resolves relative paths against a specific base directory.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = PathTranslator.class )
+public class DefaultPathTranslator
+ implements PathTranslator
+{
+
+ @Override
+ public String alignToBaseDirectory( String path, File basedir )
+ {
+ String result = path;
+
+ if ( path != null && basedir != null )
+ {
+ path = path.replace( '\\', File.separatorChar ).replace( '/', File.separatorChar );
+
+ File file = new File( path );
+ if ( file.isAbsolute() )
+ {
+ // path was already absolute, just normalize file separator and we're done
+ result = file.getPath();
+ }
+ else if ( file.getPath().startsWith( File.separator ) )
+ {
+ // drive-relative Windows path, don't align with project directory but with drive root
+ result = file.getAbsolutePath();
+ }
+ else
+ {
+ // an ordinary relative path, align with project directory
+ result = new File( new File( basedir, path ).toURI().normalize() ).getAbsolutePath();
+ }
+ }
+
+ return result;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultUrlNormalizer.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultUrlNormalizer.java
new file mode 100644
index 00000000..120b02f1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultUrlNormalizer.java
@@ -0,0 +1,65 @@
+package org.apache.maven.model.path;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Normalizes a URL.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = UrlNormalizer.class )
+public class DefaultUrlNormalizer
+ implements UrlNormalizer
+{
+
+ @Override
+ public String normalize( String url )
+ {
+ String result = url;
+
+ if ( result != null )
+ {
+ while ( true )
+ {
+ int idx = result.indexOf( "/../" );
+ if ( idx <= 0 )
+ {
+ break;
+ }
+ int parent = idx - 1;
+ while ( parent >= 0 && result.charAt( parent ) == '/' )
+ {
+ parent--;
+ }
+ parent = result.lastIndexOf( '/', parent );
+ if ( parent < 0 )
+ {
+ break;
+ }
+ result = result.substring( 0, parent ) + result.substring( idx + 3 );
+ }
+ }
+
+ return result;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/ModelPathTranslator.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/ModelPathTranslator.java
new file mode 100644
index 00000000..2bd39c55
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/ModelPathTranslator.java
@@ -0,0 +1,45 @@
+package org.apache.maven.model.path;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+
+/**
+ * Resolves relative paths of a model against a specific base directory.
+ *
+ * @author Jason van Zyl
+ */
+public interface ModelPathTranslator
+{
+
+ /**
+ * Resolves the well-known paths of the specified model against the given base directory. Paths within plugin
+ * configuration are not processed.
+ *
+ * @param model The model whose paths should be resolved, may be {@code null}.
+ * @param basedir The base directory to resolve relative paths against, may be {@code null}.
+ * @param request The model building request that holds further settings, must not be {@code null}.
+ */
+ void alignToBaseDirectory( Model model, File basedir, ModelBuildingRequest request );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/ModelUrlNormalizer.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/ModelUrlNormalizer.java
new file mode 100644
index 00000000..8325b05d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/ModelUrlNormalizer.java
@@ -0,0 +1,42 @@
+package org.apache.maven.model.path;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+
+/**
+ * Normalizes URLs to remove the ugly parent references "../" that got potentially inserted by URL adjustment during
+ * model inheritance.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ModelUrlNormalizer
+{
+
+ /**
+ * Normalizes the well-known URLs of the specified model.
+ *
+ * @param model The model whose URLs should be normalized, may be {@code null}.
+ * @param request The model building request that holds further settings, must not be {@code null}.
+ */
+ void normalize( Model model, ModelBuildingRequest request );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/PathTranslator.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/PathTranslator.java
new file mode 100644
index 00000000..c416e6ab
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/PathTranslator.java
@@ -0,0 +1,43 @@
+package org.apache.maven.model.path;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+/**
+ * Resolves relative paths against a specific base directory.
+ *
+ * @author Jason van Zyl
+ */
+public interface PathTranslator
+{
+
+ /**
+ * Resolves the specified path against the given base directory. The resolved path will be absolute and uses the
+ * platform-specific file separator if a base directory is given. Otherwise, the input path will be returned
+ * unaltered.
+ *
+ * @param path The path to resolve, may be {@code null}.
+ * @param basedir The base directory to resolve relative paths against, may be {@code null}.
+ * @return The resolved path or {@code null} if the input path was {@code null}.
+ */
+ String alignToBaseDirectory( String path, File basedir );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/UrlNormalizer.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/UrlNormalizer.java
new file mode 100644
index 00000000..b2e4a7b1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/UrlNormalizer.java
@@ -0,0 +1,39 @@
+package org.apache.maven.model.path;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Normalizes a URL to remove the ugly parent references "../" that got potentially inserted by URL adjustment during
+ * model inheritance.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface UrlNormalizer
+{
+
+ /**
+ * Normalizes the specified URL.
+ *
+ * @param url The URL to normalize, may be {@code null}.
+ * @return The normalized URL or {@code null} if the input was {@code null}.
+ */
+ String normalize( String url );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultPluginConfigurationExpander.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultPluginConfigurationExpander.java
new file mode 100644
index 00000000..dc7cf13b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultPluginConfigurationExpander.java
@@ -0,0 +1,83 @@
+package org.apache.maven.model.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.model.PluginManagement;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * Handles expansion of general build plugin configuration into individual executions.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = PluginConfigurationExpander.class )
+public class DefaultPluginConfigurationExpander
+ implements PluginConfigurationExpander
+{
+
+ @Override
+ public void expandPluginConfiguration( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
+ {
+ Build build = model.getBuild();
+
+ if ( build != null )
+ {
+ expand( build.getPlugins() );
+
+ PluginManagement pluginManagement = build.getPluginManagement();
+
+ if ( pluginManagement != null )
+ {
+ expand( pluginManagement.getPlugins() );
+ }
+ }
+ }
+
+ private void expand( List<Plugin> plugins )
+ {
+ for ( Plugin plugin : plugins )
+ {
+ Xpp3Dom pluginConfiguration = (Xpp3Dom) plugin.getConfiguration();
+
+ if ( pluginConfiguration != null )
+ {
+ for ( PluginExecution execution : plugin.getExecutions() )
+ {
+ Xpp3Dom executionConfiguration = (Xpp3Dom) execution.getConfiguration();
+
+ executionConfiguration =
+ Xpp3Dom.mergeXpp3Dom( executionConfiguration, new Xpp3Dom( pluginConfiguration ) );
+
+ execution.setConfiguration( executionConfiguration );
+ }
+ }
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportConfigurationExpander.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportConfigurationExpander.java
new file mode 100644
index 00000000..9c842994
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportConfigurationExpander.java
@@ -0,0 +1,65 @@
+package org.apache.maven.model.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.ReportSet;
+import org.apache.maven.model.Reporting;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * Handles expansion of general report plugin configuration into individual report sets.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = ReportConfigurationExpander.class )
+public class DefaultReportConfigurationExpander
+ implements ReportConfigurationExpander
+{
+
+ @Override
+ public void expandPluginConfiguration( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
+ {
+ Reporting reporting = model.getReporting();
+
+ if ( reporting != null )
+ {
+ for ( ReportPlugin reportPlugin : reporting.getPlugins() )
+ {
+ Xpp3Dom parentDom = (Xpp3Dom) reportPlugin.getConfiguration();
+
+ if ( parentDom != null )
+ {
+ for ( ReportSet execution : reportPlugin.getReportSets() )
+ {
+ Xpp3Dom childDom = (Xpp3Dom) execution.getConfiguration();
+ childDom = Xpp3Dom.mergeXpp3Dom( childDom, new Xpp3Dom( parentDom ) );
+ execution.setConfiguration( childDom );
+ }
+ }
+ }
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java
new file mode 100644
index 00000000..d918d9e8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java
@@ -0,0 +1,240 @@
+package org.apache.maven.model.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginManagement;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.ReportSet;
+import org.apache.maven.model.Reporting;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * Handles conversion of the legacy reporting section into the configuration of the new Maven Site Plugin.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = ReportingConverter.class )
+public class DefaultReportingConverter
+ implements ReportingConverter
+{
+
+ @Override
+ public void convertReporting( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
+ {
+ Reporting reporting = model.getReporting();
+
+ if ( reporting == null )
+ {
+ return;
+ }
+
+ Build build = model.getBuild();
+
+ if ( build == null )
+ {
+ build = new Build();
+ model.setBuild( build );
+ }
+
+ Plugin sitePlugin = findSitePlugin( build );
+
+ if ( sitePlugin == null )
+ {
+ sitePlugin = new Plugin();
+ sitePlugin.setArtifactId( "maven-site-plugin" );
+ PluginManagement pluginManagement = build.getPluginManagement();
+ if ( pluginManagement == null )
+ {
+ pluginManagement = new PluginManagement();
+ build.setPluginManagement( pluginManagement );
+ }
+ pluginManagement.addPlugin( sitePlugin );
+ }
+
+ Xpp3Dom configuration = (Xpp3Dom) sitePlugin.getConfiguration();
+
+ if ( configuration == null )
+ {
+ configuration = new Xpp3Dom( "configuration" );
+ sitePlugin.setConfiguration( configuration );
+ }
+
+ Xpp3Dom reportPlugins = configuration.getChild( "reportPlugins" );
+
+ if ( reportPlugins != null )
+ {
+ // new-style report configuration already present, assume user handled entire conversion
+ return;
+ }
+
+ if ( configuration.getChild( "outputDirectory" ) == null )
+ {
+ addDom( configuration, "outputDirectory", reporting.getOutputDirectory() );
+ }
+
+ reportPlugins = new Xpp3Dom( "reportPlugins" );
+ configuration.addChild( reportPlugins );
+
+ boolean hasMavenProjectInfoReportsPlugin = false;
+
+ /* waiting for MSITE-484 before deprecating <reporting> section
+ if ( !reporting.getPlugins().isEmpty()
+ && request.getValidationLevel() >= ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_1 )
+ {
+
+ problems.add( new ModelProblemCollectorRequest( Severity.WARNING, Version.V31 )
+ .setMessage( "The <reporting> section is deprecated, please move the reports to the <configuration>"
+ + " section of the new Maven Site Plugin." )
+ .setLocation( reporting.getLocation( "" ) ) );
+ }*/
+
+ for ( ReportPlugin plugin : reporting.getPlugins() )
+ {
+ Xpp3Dom reportPlugin = convert( plugin );
+ reportPlugins.addChild( reportPlugin );
+
+ if ( !reporting.isExcludeDefaults() && !hasMavenProjectInfoReportsPlugin
+ && "org.apache.maven.plugins".equals( plugin.getGroupId() )
+ && "maven-project-info-reports-plugin".equals( plugin.getArtifactId() ) )
+ {
+ hasMavenProjectInfoReportsPlugin = true;
+ }
+ }
+
+ if ( !reporting.isExcludeDefaults() && !hasMavenProjectInfoReportsPlugin )
+ {
+ Xpp3Dom dom = new Xpp3Dom( "reportPlugin" );
+
+ addDom( dom, "groupId", "org.apache.maven.plugins" );
+ addDom( dom, "artifactId", "maven-project-info-reports-plugin" );
+
+ reportPlugins.addChild( dom );
+ }
+ }
+
+ private Plugin findSitePlugin( Build build )
+ {
+ for ( Plugin plugin : build.getPlugins() )
+ {
+ if ( isSitePlugin( plugin ) )
+ {
+ return plugin;
+ }
+ }
+
+ PluginManagement pluginManagement = build.getPluginManagement();
+ if ( pluginManagement != null )
+ {
+ for ( Plugin plugin : pluginManagement.getPlugins() )
+ {
+ if ( isSitePlugin( plugin ) )
+ {
+ return plugin;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ private boolean isSitePlugin( Plugin plugin )
+ {
+ return "maven-site-plugin".equals( plugin.getArtifactId() )
+ && "org.apache.maven.plugins".equals( plugin.getGroupId() );
+ }
+
+ private Xpp3Dom convert( ReportPlugin plugin )
+ {
+ Xpp3Dom dom = new Xpp3Dom( "reportPlugin" );
+
+ addDom( dom, "groupId", plugin.getGroupId() );
+ addDom( dom, "artifactId", plugin.getArtifactId() );
+ addDom( dom, "version", plugin.getVersion() );
+
+ Xpp3Dom configuration = (Xpp3Dom) plugin.getConfiguration();
+ if ( configuration != null )
+ {
+ configuration = new Xpp3Dom( configuration );
+ dom.addChild( configuration );
+ }
+
+ if ( !plugin.getReportSets().isEmpty() )
+ {
+ Xpp3Dom reportSets = new Xpp3Dom( "reportSets" );
+ for ( ReportSet reportSet : plugin.getReportSets() )
+ {
+ Xpp3Dom rs = convert( reportSet );
+ reportSets.addChild( rs );
+ }
+ dom.addChild( reportSets );
+ }
+
+ return dom;
+ }
+
+ private Xpp3Dom convert( ReportSet reportSet )
+ {
+ Xpp3Dom dom = new Xpp3Dom( "reportSet" );
+
+ addDom( dom, "id", reportSet.getId() );
+
+ Xpp3Dom configuration = (Xpp3Dom) reportSet.getConfiguration();
+ if ( configuration != null )
+ {
+ configuration = new Xpp3Dom( configuration );
+ dom.addChild( configuration );
+ }
+
+ if ( !reportSet.getReports().isEmpty() )
+ {
+ Xpp3Dom reports = new Xpp3Dom( "reports" );
+ for ( String report : reportSet.getReports() )
+ {
+ addDom( reports, "report", report );
+ }
+ dom.addChild( reports );
+ }
+
+ return dom;
+ }
+
+ private void addDom( Xpp3Dom parent, String childName, String childValue )
+ {
+ if ( StringUtils.isNotEmpty( childValue ) )
+ {
+ parent.addChild( newDom( childName, childValue ) );
+ }
+ }
+
+ private Xpp3Dom newDom( String name, String value )
+ {
+ Xpp3Dom dom = new Xpp3Dom( name );
+ dom.setValue( value );
+ return dom;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/LifecycleBindingsInjector.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/LifecycleBindingsInjector.java
new file mode 100644
index 00000000..9c0f06de
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/LifecycleBindingsInjector.java
@@ -0,0 +1,46 @@
+package org.apache.maven.model.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+
+/**
+ * Handles injection of plugin executions induced by the lifecycle bindings for a packaging.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface LifecycleBindingsInjector
+{
+
+ /**
+ * Injects plugin executions induced by lifecycle bindings into the specified model. The model has already undergone
+ * injection of plugin management so any plugins that are injected by lifecycle bindings and are not already present
+ * in the model's plugin section need to be subjected to the model's plugin management.
+ *
+ * @param model The model into which to inject the default plugin executions for its packaging, must not be
+ * <code>null</code>.
+ * @param request The model building request that holds further settings, must not be {@code null}.
+ * @param problems The container used to collect problems that were encountered, must not be {@code null}.
+ */
+ void injectLifecycleBindings( Model model, ModelBuildingRequest request, ModelProblemCollector problems );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/PluginConfigurationExpander.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/PluginConfigurationExpander.java
new file mode 100644
index 00000000..23994aa6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/PluginConfigurationExpander.java
@@ -0,0 +1,43 @@
+package org.apache.maven.model.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+
+/**
+ * Handles expansion of general build plugin configuration into individual executions.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface PluginConfigurationExpander
+{
+
+ /**
+ * Merges values from general build plugin configuration into the individual plugin executions of the given model.
+ *
+ * @param model The model whose build plugin configuration should be expanded, must not be <code>null</code>.
+ * @param request The model building request that holds further settings, must not be {@code null}.
+ * @param problems The container used to collect problems that were encountered, must not be {@code null}.
+ */
+ void expandPluginConfiguration( Model model, ModelBuildingRequest request, ModelProblemCollector problems );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/ReportConfigurationExpander.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/ReportConfigurationExpander.java
new file mode 100644
index 00000000..28ad5962
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/ReportConfigurationExpander.java
@@ -0,0 +1,43 @@
+package org.apache.maven.model.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+
+/**
+ * Handles expansion of general report plugin configuration into individual report sets.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ReportConfigurationExpander
+{
+
+ /**
+ * Merges values from general report plugin configuration into the individual reports sets of the given model.
+ *
+ * @param model The model whose report plugin configuration should be expanded, must not be <code>null</code>.
+ * @param request The model building request that holds further settings, must not be {@code null}.
+ * @param problems The container used to collect problems that were encountered, must not be {@code null}.
+ */
+ void expandPluginConfiguration( Model model, ModelBuildingRequest request, ModelProblemCollector problems );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/ReportingConverter.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/ReportingConverter.java
new file mode 100644
index 00000000..c5ea338c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/ReportingConverter.java
@@ -0,0 +1,43 @@
+package org.apache.maven.model.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+
+/**
+ * Handles conversion of the legacy reporting section into the configuration of the new Maven Site Plugin.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ReportingConverter
+{
+
+ /**
+ * Converts values from model's reporting section into the configuration for the new Maven Site Plugin.
+ *
+ * @param model The model whose reporting section should be converted, must not be <code>null</code>.
+ * @param request The model building request that holds further settings, must not be {@code null}.
+ * @param problems The container used to collect problems that were encountered, must not be {@code null}.
+ */
+ void convertReporting( Model model, ModelBuildingRequest request, ModelProblemCollector problems );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileActivationContext.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileActivationContext.java
new file mode 100644
index 00000000..bb38a2e0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileActivationContext.java
@@ -0,0 +1,259 @@
+package org.apache.maven.model.profile;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * Describes the environmental context used to determine the activation status of profiles.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DefaultProfileActivationContext
+ implements ProfileActivationContext
+{
+
+ private List<String> activeProfileIds = Collections.emptyList();
+
+ private List<String> inactiveProfileIds = Collections.emptyList();
+
+ private Map<String, String> systemProperties = Collections.emptyMap();
+
+ private Map<String, String> userProperties = Collections.emptyMap();
+
+ private Map<String, String> projectProperties = Collections.emptyMap();
+
+ private File projectDirectory;
+
+ @Override
+ public List<String> getActiveProfileIds()
+ {
+ return activeProfileIds;
+ }
+
+ /**
+ * Sets the identifiers of those profiles that should be activated by explicit demand.
+ *
+ * @param activeProfileIds The identifiers of those profiles to activate, may be {@code null}.
+ * @return This context, never {@code null}.
+ */
+ public DefaultProfileActivationContext setActiveProfileIds( List<String> activeProfileIds )
+ {
+ if ( activeProfileIds != null )
+ {
+ this.activeProfileIds = Collections.unmodifiableList( activeProfileIds );
+ }
+ else
+ {
+ this.activeProfileIds = Collections.emptyList();
+ }
+
+ return this;
+ }
+
+ @Override
+ public List<String> getInactiveProfileIds()
+ {
+ return inactiveProfileIds;
+ }
+
+ /**
+ * Sets the identifiers of those profiles that should be deactivated by explicit demand.
+ *
+ * @param inactiveProfileIds The identifiers of those profiles to deactivate, may be {@code null}.
+ * @return This context, never {@code null}.
+ */
+ public DefaultProfileActivationContext setInactiveProfileIds( List<String> inactiveProfileIds )
+ {
+ if ( inactiveProfileIds != null )
+ {
+ this.inactiveProfileIds = Collections.unmodifiableList( inactiveProfileIds );
+ }
+ else
+ {
+ this.inactiveProfileIds = Collections.emptyList();
+ }
+
+ return this;
+ }
+
+ @Override
+ public Map<String, String> getSystemProperties()
+ {
+ return systemProperties;
+ }
+
+ /**
+ * Sets the system properties to use for interpolation and profile activation. The system properties are collected
+ * from the runtime environment like {@link System#getProperties()} and environment variables.
+ *
+ * @param systemProperties The system properties, may be {@code null}.
+ * @return This context, never {@code null}.
+ */
+ @SuppressWarnings( "unchecked" )
+ public DefaultProfileActivationContext setSystemProperties( Properties systemProperties )
+ {
+ if ( systemProperties != null )
+ {
+ this.systemProperties = Collections.unmodifiableMap( (Map) systemProperties );
+ }
+ else
+ {
+ this.systemProperties = Collections.emptyMap();
+ }
+
+ return this;
+ }
+
+ /**
+ * Sets the system properties to use for interpolation and profile activation. The system properties are collected
+ * from the runtime environment like {@link System#getProperties()} and environment variables.
+ *
+ * @param systemProperties The system properties, may be {@code null}.
+ * @return This context, never {@code null}.
+ */
+ public DefaultProfileActivationContext setSystemProperties( Map<String, String> systemProperties )
+ {
+ if ( systemProperties != null )
+ {
+ this.systemProperties = Collections.unmodifiableMap( systemProperties );
+ }
+ else
+ {
+ this.systemProperties = Collections.emptyMap();
+ }
+
+ return this;
+ }
+
+ @Override
+ public Map<String, String> getUserProperties()
+ {
+ return userProperties;
+ }
+
+ /**
+ * Sets the user properties to use for interpolation and profile activation. The user properties have been
+ * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
+ * line.
+ *
+ * @param userProperties The user properties, may be {@code null}.
+ * @return This context, never {@code null}.
+ */
+ @SuppressWarnings( "unchecked" )
+ public DefaultProfileActivationContext setUserProperties( Properties userProperties )
+ {
+ if ( userProperties != null )
+ {
+ this.userProperties = Collections.unmodifiableMap( (Map) userProperties );
+ }
+ else
+ {
+ this.userProperties = Collections.emptyMap();
+ }
+
+ return this;
+ }
+
+ /**
+ * Sets the user properties to use for interpolation and profile activation. The user properties have been
+ * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
+ * line.
+ *
+ * @param userProperties The user properties, may be {@code null}.
+ * @return This context, never {@code null}.
+ */
+ public DefaultProfileActivationContext setUserProperties( Map<String, String> userProperties )
+ {
+ if ( userProperties != null )
+ {
+ this.userProperties = Collections.unmodifiableMap( userProperties );
+ }
+ else
+ {
+ this.userProperties = Collections.emptyMap();
+ }
+
+ return this;
+ }
+
+ @Override
+ public File getProjectDirectory()
+ {
+ return projectDirectory;
+ }
+
+ /**
+ * Sets the base directory of the current project.
+ *
+ * @param projectDirectory The base directory of the current project, may be {@code null} if profile activation
+ * happens in the context of metadata retrieval rather than project building.
+ * @return This context, never {@code null}.
+ */
+ public DefaultProfileActivationContext setProjectDirectory( File projectDirectory )
+ {
+ this.projectDirectory = projectDirectory;
+
+ return this;
+ }
+
+ @Override
+ public Map<String, String> getProjectProperties()
+ {
+ return projectProperties;
+ }
+
+ public DefaultProfileActivationContext setProjectProperties( Properties projectProperties )
+ {
+ if ( projectProperties != null )
+ {
+
+ this.projectProperties = Collections.unmodifiableMap( toMap( projectProperties ) );
+ }
+ else
+ {
+ this.projectProperties = Collections.emptyMap();
+ }
+
+ return this;
+ }
+
+ private Map<String, String> toMap( Properties properties )
+ {
+ if ( properties == null )
+ {
+ return Collections.emptyMap();
+ }
+ Map<String, String> map = new HashMap<String, String>();
+ Enumeration keys = properties.keys();
+ while ( keys.hasMoreElements() )
+ {
+ String key = (String) keys.nextElement();
+ map.put( key, properties.getProperty( key ) );
+ }
+ return map;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileInjector.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileInjector.java
new file mode 100644
index 00000000..aeed0235
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileInjector.java
@@ -0,0 +1,249 @@
+package org.apache.maven.model.profile;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.BuildBase;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.ModelBase;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginContainer;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.ReportSet;
+import org.apache.maven.model.Reporting;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.merge.MavenModelMerger;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Handles profile injection into the model.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = ProfileInjector.class )
+public class DefaultProfileInjector
+ implements ProfileInjector
+{
+
+ private ProfileModelMerger merger = new ProfileModelMerger();
+
+ @Override
+ public void injectProfile( Model model, Profile profile, ModelBuildingRequest request,
+ ModelProblemCollector problems )
+ {
+ if ( profile != null )
+ {
+ merger.mergeModelBase( model, profile );
+
+ if ( profile.getBuild() != null )
+ {
+ if ( model.getBuild() == null )
+ {
+ model.setBuild( new Build() );
+ }
+ merger.mergeBuildBase( model.getBuild(), profile.getBuild() );
+ }
+ }
+ }
+
+ protected static class ProfileModelMerger
+ extends MavenModelMerger
+ {
+
+ public void mergeModelBase( ModelBase target, ModelBase source )
+ {
+ mergeModelBase( target, source, true, Collections.emptyMap() );
+ }
+
+ public void mergeBuildBase( BuildBase target, BuildBase source )
+ {
+ mergeBuildBase( target, source, true, Collections.emptyMap() );
+ }
+
+ @Override
+ protected void mergePluginContainer_Plugins( PluginContainer target, PluginContainer source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ List<Plugin> src = source.getPlugins();
+ if ( !src.isEmpty() )
+ {
+ List<Plugin> tgt = target.getPlugins();
+ Map<Object, Plugin> master = new LinkedHashMap<Object, Plugin>( tgt.size() * 2 );
+
+ for ( Plugin element : tgt )
+ {
+ Object key = getPluginKey( element );
+ master.put( key, element );
+ }
+
+ Map<Object, List<Plugin>> predecessors = new LinkedHashMap<Object, List<Plugin>>();
+ List<Plugin> pending = new ArrayList<Plugin>();
+ for ( Plugin element : src )
+ {
+ Object key = getPluginKey( element );
+ Plugin existing = master.get( key );
+ if ( existing != null )
+ {
+ mergePlugin( existing, element, sourceDominant, context );
+
+ if ( !pending.isEmpty() )
+ {
+ predecessors.put( key, pending );
+ pending = new ArrayList<Plugin>();
+ }
+ }
+ else
+ {
+ pending.add( element );
+ }
+ }
+
+ List<Plugin> result = new ArrayList<Plugin>( src.size() + tgt.size() );
+ for ( Map.Entry<Object, Plugin> entry : master.entrySet() )
+ {
+ List<Plugin> pre = predecessors.get( entry.getKey() );
+ if ( pre != null )
+ {
+ result.addAll( pre );
+ }
+ result.add( entry.getValue() );
+ }
+ result.addAll( pending );
+
+ target.setPlugins( result );
+ }
+ }
+
+ @Override
+ protected void mergePlugin_Executions( Plugin target, Plugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<PluginExecution> src = source.getExecutions();
+ if ( !src.isEmpty() )
+ {
+ List<PluginExecution> tgt = target.getExecutions();
+ Map<Object, PluginExecution> merged =
+ new LinkedHashMap<Object, PluginExecution>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( PluginExecution element : tgt )
+ {
+ Object key = getPluginExecutionKey( element );
+ merged.put( key, element );
+ }
+
+ for ( PluginExecution element : src )
+ {
+ Object key = getPluginExecutionKey( element );
+ PluginExecution existing = merged.get( key );
+ if ( existing != null )
+ {
+ mergePluginExecution( existing, element, sourceDominant, context );
+ }
+ else
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setExecutions( new ArrayList<PluginExecution>( merged.values() ) );
+ }
+ }
+
+ @Override
+ protected void mergeReporting_Plugins( Reporting target, Reporting source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<ReportPlugin> src = source.getPlugins();
+ if ( !src.isEmpty() )
+ {
+ List<ReportPlugin> tgt = target.getPlugins();
+ Map<Object, ReportPlugin> merged =
+ new LinkedHashMap<Object, ReportPlugin>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( ReportPlugin element : tgt )
+ {
+ Object key = getReportPluginKey( element );
+ merged.put( key, element );
+ }
+
+ for ( ReportPlugin element : src )
+ {
+ Object key = getReportPluginKey( element );
+ ReportPlugin existing = merged.get( key );
+ if ( existing == null )
+ {
+ merged.put( key, element );
+ }
+ else
+ {
+ mergeReportPlugin( existing, element, sourceDominant, context );
+ }
+ }
+
+ target.setPlugins( new ArrayList<ReportPlugin>( merged.values() ) );
+ }
+ }
+
+ @Override
+ protected void mergeReportPlugin_ReportSets( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<ReportSet> src = source.getReportSets();
+ if ( !src.isEmpty() )
+ {
+ List<ReportSet> tgt = target.getReportSets();
+ Map<Object, ReportSet> merged = new LinkedHashMap<Object, ReportSet>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( ReportSet element : tgt )
+ {
+ Object key = getReportSetKey( element );
+ merged.put( key, element );
+ }
+
+ for ( ReportSet element : src )
+ {
+ Object key = getReportSetKey( element );
+ ReportSet existing = merged.get( key );
+ if ( existing != null )
+ {
+ mergeReportSet( existing, element, sourceDominant, context );
+ }
+ else
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setReportSets( new ArrayList<ReportSet>( merged.values() ) );
+ }
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java
new file mode 100644
index 00000000..512476a1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java
@@ -0,0 +1,143 @@
+package org.apache.maven.model.profile;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.building.ModelProblem.Severity;
+import org.apache.maven.model.building.ModelProblem.Version;
+import org.apache.maven.model.building.ModelProblemCollectorRequest;
+import org.apache.maven.model.profile.activation.ProfileActivator;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+/**
+ * Calculates the active profiles among a given collection of profiles.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = ProfileSelector.class )
+public class DefaultProfileSelector
+ implements ProfileSelector
+{
+
+ @Requirement( role = ProfileActivator.class )
+ private List<ProfileActivator> activators = new ArrayList<ProfileActivator>();
+
+ public DefaultProfileSelector addProfileActivator( ProfileActivator profileActivator )
+ {
+ if ( profileActivator != null )
+ {
+ activators.add( profileActivator );
+ }
+ return this;
+ }
+
+ @Override
+ public List<Profile> getActiveProfiles( Collection<Profile> profiles, ProfileActivationContext context,
+ ModelProblemCollector problems )
+ {
+ Collection<String> activatedIds = new HashSet<String>( context.getActiveProfileIds() );
+ Collection<String> deactivatedIds = new HashSet<String>( context.getInactiveProfileIds() );
+
+ List<Profile> activeProfiles = new ArrayList<Profile>( profiles.size() );
+ List<Profile> activePomProfilesByDefault = new ArrayList<Profile>();
+ boolean activatedPomProfileNotByDefault = false;
+
+ for ( Profile profile : profiles )
+ {
+ if ( !deactivatedIds.contains( profile.getId() ) )
+ {
+ if ( activatedIds.contains( profile.getId() ) || isActive( profile, context, problems ) )
+ {
+ activeProfiles.add( profile );
+
+ if ( Profile.SOURCE_POM.equals( profile.getSource() ) )
+ {
+ activatedPomProfileNotByDefault = true;
+ }
+ }
+ else if ( isActiveByDefault( profile ) )
+ {
+ if ( Profile.SOURCE_POM.equals( profile.getSource() ) )
+ {
+ activePomProfilesByDefault.add( profile );
+ }
+ else
+ {
+ activeProfiles.add( profile );
+ }
+ }
+
+ }
+ }
+
+ if ( !activatedPomProfileNotByDefault )
+ {
+ activeProfiles.addAll( activePomProfilesByDefault );
+ }
+
+ return activeProfiles;
+ }
+
+ private boolean isActive( Profile profile, ProfileActivationContext context, ModelProblemCollector problems )
+ {
+ boolean isActive = false;
+ for ( ProfileActivator activator : activators )
+ {
+ if ( activator.presentInConfig( profile, context, problems ) )
+ {
+ isActive = true;
+ }
+ }
+ for ( ProfileActivator activator : activators )
+ {
+ try
+ {
+ if ( activator.presentInConfig( profile, context, problems ) )
+ {
+ isActive &= activator.isActive( profile, context, problems );
+ }
+ }
+ catch ( RuntimeException e )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( "Failed to determine activation for profile " + profile.getId() )
+ .setLocation( profile.getLocation( "" ) )
+ .setException( e ) );
+ return false;
+ }
+ }
+ return isActive;
+ }
+
+ private boolean isActiveByDefault( Profile profile )
+ {
+ Activation activation = profile.getActivation();
+ return activation != null && activation.isActiveByDefault();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileActivationContext.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileActivationContext.java
new file mode 100644
index 00000000..d501e660
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileActivationContext.java
@@ -0,0 +1,79 @@
+package org.apache.maven.model.profile;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Describes the environmental context used to determine the activation status of profiles.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ProfileActivationContext
+{
+
+ /**
+ * Gets the identifiers of those profiles that should be activated by explicit demand.
+ *
+ * @return The identifiers of those profiles to activate, never {@code null}.
+ */
+ List<String> getActiveProfileIds();
+
+ /**
+ * Gets the identifiers of those profiles that should be deactivated by explicit demand.
+ *
+ * @return The identifiers of those profiles to deactivate, never {@code null}.
+ */
+ List<String> getInactiveProfileIds();
+
+ /**
+ * Gets the system properties to use for interpolation and profile activation. The system properties are collected
+ * from the runtime environment like {@link System#getProperties()} and environment variables.
+ *
+ * @return The execution properties, never {@code null}.
+ */
+ Map<String, String> getSystemProperties();
+
+ /**
+ * Gets the user properties to use for interpolation and profile activation. The user properties have been
+ * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
+ * line.
+ *
+ * @return The user properties, never {@code null}.
+ */
+ Map<String, String> getUserProperties();
+
+ /**
+ * Gets the base directory of the current project (if any).
+ *
+ * @return The base directory of the current project or {@code null} if none.
+ */
+ File getProjectDirectory();
+
+ /**
+ * Gets current calculated project properties
+ *
+ * @return The project properties, never {@code null}.
+ */
+ Map<String, String> getProjectProperties();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileInjector.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileInjector.java
new file mode 100644
index 00000000..fbd7ddf0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileInjector.java
@@ -0,0 +1,46 @@
+package org.apache.maven.model.profile;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+
+/**
+ * Handles profile injection into the model.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ProfileInjector
+{
+
+ /**
+ * Merges values from the specified profile into the given model. Implementations are expected to keep the profile
+ * and model completely decoupled by injecting deep copies rather than the original objects from the profile.
+ *
+ * @param model The model into which to merge the values defined by the profile, must not be <code>null</code>.
+ * @param profile The (read-only) profile whose values should be injected, may be <code>null</code>.
+ * @param request The model building request that holds further settings, must not be {@code null}.
+ * @param problems The container used to collect problems that were encountered, must not be {@code null}.
+ */
+ void injectProfile( Model model, Profile profile, ModelBuildingRequest request, ModelProblemCollector problems );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileSelector.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileSelector.java
new file mode 100644
index 00000000..53ea8d9c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileSelector.java
@@ -0,0 +1,49 @@
+package org.apache.maven.model.profile;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.building.ModelProblemCollector;
+
+/**
+ * Calculates the active profiles among a given collection of profiles.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ProfileSelector
+{
+
+ /**
+ * Determines the profiles which are active in the specified activation context. Active profiles will eventually be
+ * injected into the model.
+ *
+ * @param profiles The profiles whose activation status should be determined, must not be {@code null}.
+ * @param context The environmental context used to determine the activation status of a profile, must not be
+ * {@code null}.
+ * @param problems The container used to collect problems that were encountered, must not be {@code null}.
+ * @return The profiles that have been activated, never {@code null}.
+ */
+ List<Profile> getActiveProfiles( Collection<Profile> profiles, ProfileActivationContext context,
+ ModelProblemCollector problems );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java
new file mode 100644
index 00000000..c0dcce23
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java
@@ -0,0 +1,192 @@
+package org.apache.maven.model.profile.activation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.ActivationFile;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.building.ModelProblem.Severity;
+import org.apache.maven.model.building.ModelProblem.Version;
+import org.apache.maven.model.building.ModelProblemCollectorRequest;
+import org.apache.maven.model.path.PathTranslator;
+import org.apache.maven.model.profile.ProfileActivationContext;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.interpolation.AbstractValueSource;
+import org.codehaus.plexus.interpolation.MapBasedValueSource;
+import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * Determines profile activation based on the existence/absence of some file.
+ * File name interpolation support is limited to <code>${basedir}</code> (since Maven 3,
+ * see <a href="http://jira.codehaus.org/browse/MNG-2363">MNG-2363</a>),
+ * System properties and request properties.
+ * <code>${project.basedir}</code> is intentionally not supported as this form would suggest that other
+ * <code>${project.*}</code> expressions can be used, which is however beyond the design.
+ *
+ * @author Benjamin Bentmann
+ * @see ActivationFile
+ * @see org.apache.maven.model.validation.DefaultModelValidator#validateRawModel
+ */
+@Component( role = ProfileActivator.class, hint = "file" )
+public class FileProfileActivator
+ implements ProfileActivator
+{
+
+ @Requirement
+ private PathTranslator pathTranslator;
+
+ public FileProfileActivator setPathTranslator( PathTranslator pathTranslator )
+ {
+ this.pathTranslator = pathTranslator;
+ return this;
+ }
+
+ @Override
+ public boolean isActive( Profile profile, ProfileActivationContext context, ModelProblemCollector problems )
+ {
+ Activation activation = profile.getActivation();
+
+ if ( activation == null )
+ {
+ return false;
+ }
+
+ ActivationFile file = activation.getFile();
+
+ if ( file == null )
+ {
+ return false;
+ }
+
+ String path;
+ boolean missing;
+
+ if ( StringUtils.isNotEmpty( file.getExists() ) )
+ {
+ path = file.getExists();
+ missing = false;
+ }
+ else if ( StringUtils.isNotEmpty( file.getMissing() ) )
+ {
+ path = file.getMissing();
+ missing = true;
+ }
+ else
+ {
+ return false;
+ }
+
+ RegexBasedInterpolator interpolator = new RegexBasedInterpolator();
+
+ final File basedir = context.getProjectDirectory();
+
+ if ( basedir != null )
+ {
+ interpolator.addValueSource( new AbstractValueSource( false )
+ {
+ @Override
+ public Object getValue( String expression )
+ {
+ /*
+ * NOTE: We intentionally only support ${basedir} and not ${project.basedir} as the latter form
+ * would suggest that other project.* expressions can be used which is however beyond the design.
+ */
+ if ( "basedir".equals( expression ) )
+ {
+ return basedir.getAbsolutePath();
+ }
+ return null;
+ }
+ } );
+ }
+ else if ( path.contains( "${basedir}" ) )
+ {
+ return false;
+ }
+
+ interpolator.addValueSource( new MapBasedValueSource( context.getProjectProperties() ) );
+
+ interpolator.addValueSource( new MapBasedValueSource( context.getUserProperties() ) );
+
+ interpolator.addValueSource( new MapBasedValueSource( context.getSystemProperties() ) );
+
+ try
+ {
+ path = interpolator.interpolate( path, "" );
+ }
+ catch ( Exception e )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( "Failed to interpolate file location " + path + " for profile " + profile.getId()
+ + ": " + e.getMessage() )
+ .setLocation( file.getLocation( missing ? "missing" : "exists" ) )
+ .setException( e ) );
+ return false;
+ }
+
+ path = pathTranslator.alignToBaseDirectory( path, basedir );
+
+ // replace activation value with interpolated value
+ if ( missing )
+ {
+ file.setMissing( path );
+ }
+ else
+ {
+ file.setExists( path );
+ }
+
+ File f = new File( path );
+
+ if ( !f.isAbsolute() )
+ {
+ return false;
+ }
+
+ boolean fileExists = f.exists();
+
+ return missing ? !fileExists : fileExists;
+ }
+
+ @Override
+ public boolean presentInConfig( Profile profile, ProfileActivationContext context, ModelProblemCollector problems )
+ {
+ Activation activation = profile.getActivation();
+
+ if ( activation == null )
+ {
+ return false;
+ }
+
+ ActivationFile file = activation.getFile();
+
+ if ( file == null )
+ {
+ return false;
+ }
+ return true;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivator.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivator.java
new file mode 100644
index 00000000..e981bfd3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivator.java
@@ -0,0 +1,224 @@
+package org.apache.maven.model.profile.activation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.building.ModelProblem.Severity;
+import org.apache.maven.model.building.ModelProblem.Version;
+import org.apache.maven.model.building.ModelProblemCollectorRequest;
+import org.apache.maven.model.profile.ProfileActivationContext;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Determines profile activation based on the version of the current Java runtime.
+ *
+ * @author Benjamin Bentmann
+ * @see Activation#getJdk()
+ */
+@Component( role = ProfileActivator.class, hint = "jdk-version" )
+public class JdkVersionProfileActivator
+ implements ProfileActivator
+{
+
+ @Override
+ public boolean isActive( Profile profile, ProfileActivationContext context, ModelProblemCollector problems )
+ {
+ Activation activation = profile.getActivation();
+
+ if ( activation == null )
+ {
+ return false;
+ }
+
+ String jdk = activation.getJdk();
+
+ if ( jdk == null )
+ {
+ return false;
+ }
+
+ String version = context.getSystemProperties().get( "java.version" );
+
+ if ( version == null || version.length() <= 0 )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( "Failed to determine Java version for profile " + profile.getId() )
+ .setLocation( activation.getLocation( "jdk" ) ) );
+ return false;
+ }
+
+ if ( jdk.startsWith( "!" ) )
+ {
+ return !version.startsWith( jdk.substring( 1 ) );
+ }
+ else if ( isRange( jdk ) )
+ {
+ return isInRange( version, getRange( jdk ) );
+ }
+ else
+ {
+ return version.startsWith( jdk );
+ }
+ }
+
+ @Override
+ public boolean presentInConfig( Profile profile, ProfileActivationContext context, ModelProblemCollector problems )
+ {
+ Activation activation = profile.getActivation();
+
+ if ( activation == null )
+ {
+ return false;
+ }
+
+ String jdk = activation.getJdk();
+
+ if ( jdk == null )
+ {
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean isInRange( String value, List<RangeValue> range )
+ {
+ int leftRelation = getRelationOrder( value, range.get( 0 ), true );
+
+ if ( leftRelation == 0 )
+ {
+ return true;
+ }
+
+ if ( leftRelation < 0 )
+ {
+ return false;
+ }
+
+ return getRelationOrder( value, range.get( 1 ), false ) <= 0;
+ }
+
+ private static int getRelationOrder( String value, RangeValue rangeValue, boolean isLeft )
+ {
+ if ( rangeValue.value.length() <= 0 )
+ {
+ return isLeft ? 1 : -1;
+ }
+
+ value = value.replaceAll( "[^0-9\\.\\-\\_]", "" );
+
+ List<String> valueTokens = new ArrayList<String>( Arrays.asList( value.split( "[\\.\\-\\_]" ) ) );
+ List<String> rangeValueTokens = new ArrayList<String>( Arrays.asList( rangeValue.value.split( "\\." ) ) );
+
+ addZeroTokens( valueTokens, 3 );
+ addZeroTokens( rangeValueTokens, 3 );
+
+ for ( int i = 0; i < 3; i++ )
+ {
+ int x = Integer.parseInt( valueTokens.get( i ) );
+ int y = Integer.parseInt( rangeValueTokens.get( i ) );
+ if ( x < y )
+ {
+ return -1;
+ }
+ else if ( x > y )
+ {
+ return 1;
+ }
+ }
+ if ( !rangeValue.closed )
+ {
+ return isLeft ? -1 : 1;
+ }
+ return 0;
+ }
+
+ private static void addZeroTokens( List<String> tokens, int max )
+ {
+ while ( tokens.size() < max )
+ {
+ tokens.add( "0" );
+ }
+ }
+
+ private static boolean isRange( String value )
+ {
+ return value.startsWith( "[" ) || value.startsWith( "(" );
+ }
+
+ private static List<RangeValue> getRange( String range )
+ {
+ List<RangeValue> ranges = new ArrayList<RangeValue>();
+
+ for ( String token : range.split( "," ) )
+ {
+ if ( token.startsWith( "[" ) )
+ {
+ ranges.add( new RangeValue( token.replace( "[", "" ), true ) );
+ }
+ else if ( token.startsWith( "(" ) )
+ {
+ ranges.add( new RangeValue( token.replace( "(", "" ), false ) );
+ }
+ else if ( token.endsWith( "]" ) )
+ {
+ ranges.add( new RangeValue( token.replace( "]", "" ), true ) );
+ }
+ else if ( token.endsWith( ")" ) )
+ {
+ ranges.add( new RangeValue( token.replace( ")", "" ), false ) );
+ }
+ else if ( token.length() <= 0 )
+ {
+ ranges.add( new RangeValue( "", false ) );
+ }
+ }
+ if ( ranges.size() < 2 )
+ {
+ ranges.add( new RangeValue( "99999999", false ) );
+ }
+ return ranges;
+ }
+
+ private static class RangeValue
+ {
+ private String value;
+
+ private boolean closed;
+
+ RangeValue( String value, boolean closed )
+ {
+ this.value = value.trim();
+ this.closed = closed;
+ }
+
+ @Override
+ public String toString()
+ {
+ return value;
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/OperatingSystemProfileActivator.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/OperatingSystemProfileActivator.java
new file mode 100644
index 00000000..30abb1fa
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/OperatingSystemProfileActivator.java
@@ -0,0 +1,168 @@
+package org.apache.maven.model.profile.activation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.ActivationOS;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.profile.ProfileActivationContext;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.Os;
+
+/**
+ * Determines profile activation based on the operating system of the current runtime platform.
+ *
+ * @author Benjamin Bentmann
+ * @see ActivationOS
+ */
+@Component( role = ProfileActivator.class, hint = "os" )
+public class OperatingSystemProfileActivator
+ implements ProfileActivator
+{
+
+ @Override
+ public boolean isActive( Profile profile, ProfileActivationContext context, ModelProblemCollector problems )
+ {
+ Activation activation = profile.getActivation();
+
+ if ( activation == null )
+ {
+ return false;
+ }
+
+ ActivationOS os = activation.getOs();
+
+ if ( os == null )
+ {
+ return false;
+ }
+
+ boolean active = ensureAtLeastOneNonNull( os );
+
+ if ( active && os.getFamily() != null )
+ {
+ active = determineFamilyMatch( os.getFamily() );
+ }
+ if ( active && os.getName() != null )
+ {
+ active = determineNameMatch( os.getName() );
+ }
+ if ( active && os.getArch() != null )
+ {
+ active = determineArchMatch( os.getArch() );
+ }
+ if ( active && os.getVersion() != null )
+ {
+ active = determineVersionMatch( os.getVersion() );
+ }
+
+ return active;
+ }
+
+ @Override
+ public boolean presentInConfig( Profile profile, ProfileActivationContext context, ModelProblemCollector problems )
+ {
+ Activation activation = profile.getActivation();
+
+ if ( activation == null )
+ {
+ return false;
+ }
+
+ ActivationOS os = activation.getOs();
+
+ if ( os == null )
+ {
+ return false;
+ }
+ return true;
+ }
+
+ private boolean ensureAtLeastOneNonNull( ActivationOS os )
+ {
+ return os.getArch() != null || os.getFamily() != null || os.getName() != null || os.getVersion() != null;
+ }
+
+ private boolean determineVersionMatch( String version )
+ {
+ String test = version;
+ boolean reverse = false;
+
+ if ( test.startsWith( "!" ) )
+ {
+ reverse = true;
+ test = test.substring( 1 );
+ }
+
+ boolean result = Os.isVersion( test );
+
+ return reverse ? !result : result;
+ }
+
+ private boolean determineArchMatch( String arch )
+ {
+ String test = arch;
+ boolean reverse = false;
+
+ if ( test.startsWith( "!" ) )
+ {
+ reverse = true;
+ test = test.substring( 1 );
+ }
+
+ boolean result = Os.isArch( test );
+
+ return reverse ? !result : result;
+ }
+
+ private boolean determineNameMatch( String name )
+ {
+ String test = name;
+ boolean reverse = false;
+
+ if ( test.startsWith( "!" ) )
+ {
+ reverse = true;
+ test = test.substring( 1 );
+ }
+
+ boolean result = Os.isName( test );
+
+ return reverse ? !result : result;
+ }
+
+ private boolean determineFamilyMatch( String family )
+ {
+ String test = family;
+ boolean reverse = false;
+
+ if ( test.startsWith( "!" ) )
+ {
+ reverse = true;
+ test = test.substring( 1 );
+ }
+
+ boolean result = Os.isFamily( test );
+
+ return reverse ? !result : result;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/ProfileActivator.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/ProfileActivator.java
new file mode 100644
index 00000000..0547e742
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/ProfileActivator.java
@@ -0,0 +1,59 @@
+package org.apache.maven.model.profile.activation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.profile.ProfileActivationContext;
+
+/**
+ * Determines whether a profile should be activated.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ProfileActivator
+{
+
+ /**
+ * Determines whether the specified profile is active in the given activator context.
+ *
+ * @param profile The profile whose activation status should be determined, must not be {@code null}.
+ * @param context The environmental context used to determine the activation status of the profile, must not be
+ * {@code null}.
+ * @param problems The container used to collect problems (e.g. bad syntax) that were encountered, must not be
+ * {@code null}.
+ * @return {@code true} if the profile is active, {@code false} otherwise.
+ */
+ boolean isActive( Profile profile, ProfileActivationContext context, ModelProblemCollector problems );
+
+ /**
+ * Determines whether specified activation method is present in configuration or not. It should help to have AND
+ * between activation conditions
+ * Need for solving http://jira.codehaus.org/browse/MNG-4565
+ * @param profile The profile whose activation status should be determined, must not be {@code null}.
+ * @param context The environmental context used to determine the activation status of the profile, must not be
+ * {@code null}.
+ * @param problems The container used to collect problems (e.g. bad syntax) that were encountered, must not be
+ * {@code null}.
+ * @return {@code true} if the profile is active, {@code false} otherwise.
+ */
+ boolean presentInConfig( Profile profile, ProfileActivationContext context, ModelProblemCollector problems );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/PropertyProfileActivator.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/PropertyProfileActivator.java
new file mode 100644
index 00000000..ba7886f0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/PropertyProfileActivator.java
@@ -0,0 +1,126 @@
+package org.apache.maven.model.profile.activation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.ActivationProperty;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.building.ModelProblem.Severity;
+import org.apache.maven.model.building.ModelProblem.Version;
+import org.apache.maven.model.building.ModelProblemCollectorRequest;
+import org.apache.maven.model.profile.ProfileActivationContext;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * Determines profile activation based on the existence or value of some execution property.
+ *
+ * @author Benjamin Bentmann
+ * @see ActivationProperty
+ */
+@Component( role = ProfileActivator.class, hint = "property" )
+public class PropertyProfileActivator
+ implements ProfileActivator
+{
+
+ @Override
+ public boolean isActive( Profile profile, ProfileActivationContext context, ModelProblemCollector problems )
+ {
+ Activation activation = profile.getActivation();
+
+ if ( activation == null )
+ {
+ return false;
+ }
+
+ ActivationProperty property = activation.getProperty();
+
+ if ( property == null )
+ {
+ return false;
+ }
+
+ String name = property.getName();
+ boolean reverseName = false;
+
+ if ( name != null && name.startsWith( "!" ) )
+ {
+ reverseName = true;
+ name = name.substring( 1 );
+ }
+
+ if ( name == null || name.length() <= 0 )
+ {
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
+ .setMessage( "The property name is required to activate the profile " + profile.getId() )
+ .setLocation( property.getLocation( "" ) ) );
+ return false;
+ }
+
+ String sysValue = context.getUserProperties().get( name );
+ if ( sysValue == null )
+ {
+ sysValue = context.getSystemProperties().get( name );
+ }
+
+ String propValue = property.getValue();
+ if ( StringUtils.isNotEmpty( propValue ) )
+ {
+ boolean reverseValue = false;
+ if ( propValue.startsWith( "!" ) )
+ {
+ reverseValue = true;
+ propValue = propValue.substring( 1 );
+ }
+
+ // we have a value, so it has to match the system value...
+ boolean result = propValue.equals( sysValue );
+
+ return reverseValue ? !result : result;
+ }
+ else
+ {
+ boolean result = StringUtils.isNotEmpty( sysValue );
+
+ return reverseName ? !result : result;
+ }
+ }
+
+ @Override
+ public boolean presentInConfig( Profile profile, ProfileActivationContext context, ModelProblemCollector problems )
+ {
+ Activation activation = profile.getActivation();
+
+ if ( activation == null )
+ {
+ return false;
+ }
+
+ ActivationProperty property = activation.getProperty();
+
+ if ( property == null )
+ {
+ return false;
+ }
+ return true;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/InvalidRepositoryException.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/InvalidRepositoryException.java
new file mode 100644
index 00000000..303aff08
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/InvalidRepositoryException.java
@@ -0,0 +1,73 @@
+package org.apache.maven.model.resolution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Repository;
+
+/**
+ * Signals an error when adding a repository to the model resolver.
+ *
+ * @author Benjamin Bentmann
+ */
+public class InvalidRepositoryException
+ extends Exception
+{
+
+ /**
+ * The repository that raised this error, can be {@code null}.
+ */
+ private Repository repository;
+
+ /**
+ * Creates a new exception with specified detail message and cause for the given repository.
+ *
+ * @param message The detail message, may be {@code null}.
+ * @param repository The repository that caused the error, may be {@code null}.
+ * @param cause The cause, may be {@code null}.
+ */
+ public InvalidRepositoryException( String message, Repository repository, Throwable cause )
+ {
+ super( message, cause );
+ this.repository = repository;
+ }
+
+ /**
+ * Creates a new exception with specified detail message for the given repository.
+ *
+ * @param message The detail message, may be {@code null}.
+ * @param repository The repository that caused the error, may be {@code null}.
+ */
+ public InvalidRepositoryException( String message, Repository repository )
+ {
+ super( message );
+ this.repository = repository;
+ }
+
+ /**
+ * Gets the repository that causes this error (if any).
+ *
+ * @return The repository that causes this error or {@code null} if not known.
+ */
+ public Repository getRepository()
+ {
+ return repository;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java
new file mode 100644
index 00000000..c81a5369
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java
@@ -0,0 +1,93 @@
+package org.apache.maven.model.resolution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.building.ModelSource;
+
+/**
+ * Resolves a POM from its coordinates. During the build process, the
+ * {@link org.apache.maven.model.building.ModelBuilder} will add any relevant repositories to the model resolver. In
+ * other words, the model resolver is stateful and should not be reused across multiple model building requests.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface ModelResolver
+{
+
+ /**
+ * Tries to resolve the POM for the specified coordinates.
+ *
+ * @param groupId The group identifier of the POM, must not be {@code null}.
+ * @param artifactId The artifact identifier of the POM, must not be {@code null}.
+ * @param version The version of the POM, must not be {@code null}.
+ * @return The source of the requested POM, never {@code null}.
+ * @throws UnresolvableModelException If the POM could not be resolved from any configured repository.
+ */
+ ModelSource resolveModel( String groupId, String artifactId, String version )
+ throws UnresolvableModelException;
+
+ /**
+ * Tries to resolve the POM for the specified parent coordinates possibly updating {@code parent}.
+ *
+ * @param parent The parent coordinates to resolve, must not be {@code null}.
+ * @return The source of the requested POM, never {@code null}.
+ * @throws UnresolvableModelException If the POM could not be resolved from any configured repository.
+ * @since 3.2.2
+ */
+ ModelSource resolveModel( Parent parent )
+ throws UnresolvableModelException;
+
+ /**
+ * Adds a repository to use for subsequent resolution requests. The order in which repositories are added matters,
+ * repositories that were added first should also be searched first. When multiple repositories with the same
+ * identifier are added, only the first repository being added will be used.
+ *
+ * @param repository The repository to add to the internal search chain, must not be {@code null}.
+ * @throws InvalidRepositoryException If the repository could not be added (e.g. due to invalid URL or layout).
+ */
+ void addRepository( Repository repository )
+ throws InvalidRepositoryException;
+
+ /**
+ * Adds a repository to use for subsequent resolution requests. The order in which repositories are added matters,
+ * repositories that were added first should also be searched first. When multiple repositories with the same
+ * identifier are added, then the value of the replace argument is determines the behaviour.
+ *
+ * If replace is false than any existing repository with the same Id will remain in use. If replace
+ * is true the new repository replaces the original.
+ *
+ * @param repository The repository to add to the internal search chain, must not be {@code null}.
+ * @throws InvalidRepositoryException If the repository could not be added (e.g. due to invalid URL or layout).
+ */
+ void addRepository( Repository repository, boolean replace )
+ throws InvalidRepositoryException;
+
+ /**
+ * Clones this resolver for usage in a forked resolution process. In general, implementors need not provide a deep
+ * clone. The only requirement is that invocations of {@link #addRepository(Repository)} on the clone do not affect
+ * the state of the original resolver and vice versa.
+ *
+ * @return The cloned resolver, never {@code null}.
+ */
+ ModelResolver newCopy();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/UnresolvableModelException.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/UnresolvableModelException.java
new file mode 100644
index 00000000..bdb623ac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/UnresolvableModelException.java
@@ -0,0 +1,126 @@
+package org.apache.maven.model.resolution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Signals an error when resolving the path to an external model.
+ *
+ * @author Benjamin Bentmann
+ */
+public class UnresolvableModelException
+ extends Exception
+{
+
+ /**
+ * The group id of the unresolvable model.
+ */
+ private final String groupId;
+
+ /**
+ * The artifact id of the unresolvable model.
+ */
+ private final String artifactId;
+
+ /**
+ * The version of the unresolvable model.
+ */
+ private final String version;
+
+ /**
+ * Creates a new exception with specified detail message and cause.
+ *
+ * @param message The detail message, may be {@code null}.
+ * @param groupId The group id of the unresolvable model, may be {@code null}.
+ * @param artifactId The artifact id of the unresolvable model, may be {@code null}.
+ * @param version The version of the unresolvable model, may be {@code null}.
+ * @param cause The cause, may be {@code null}.
+ */
+ public UnresolvableModelException( String message, String groupId, String artifactId, String version,
+ Throwable cause )
+ {
+ super( message, cause );
+ this.groupId = ( groupId != null ) ? groupId : "";
+ this.artifactId = ( artifactId != null ) ? artifactId : "";
+ this.version = ( version != null ) ? version : "";
+ }
+
+ /**
+ * Creates a new exception with specified detail message.
+ *
+ * @param message The detail message, may be {@code null}.
+ * @param groupId The group id of the unresolvable model, may be {@code null}.
+ * @param artifactId The artifact id of the unresolvable model, may be {@code null}.
+ * @param version The version of the unresolvable model, may be {@code null}.
+ */
+ public UnresolvableModelException( String message, String groupId, String artifactId, String version )
+ {
+ super( message );
+ this.groupId = ( groupId != null ) ? groupId : "";
+ this.artifactId = ( artifactId != null ) ? artifactId : "";
+ this.version = ( version != null ) ? version : "";
+ }
+
+ /**
+ * Creates a new exception with specified cause
+ *
+ * @param cause
+ * @param groupId
+ * @param artifactId
+ * @param version
+ */
+ public UnresolvableModelException( Throwable cause, String groupId, String artifactId, String version )
+ {
+ super( cause );
+ this.groupId = groupId;
+ this.artifactId = artifactId;
+ this.version = version;
+ }
+
+ /**
+ * Gets the group id of the unresolvable model.
+ *
+ * @return The group id of the unresolvable model, can be empty but never {@code null}.
+ */
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ /**
+ * Gets the artifact id of the unresolvable model.
+ *
+ * @return The artifact id of the unresolvable model, can be empty but never {@code null}.
+ */
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ /**
+ * Gets the version of the unresolvable model.
+ *
+ * @return The version of the unresolvable model, can be empty but never {@code null}.
+ */
+ public String getVersion()
+ {
+ return version;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/WorkspaceModelResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/WorkspaceModelResolver.java
new file mode 100644
index 00000000..d12edea7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/WorkspaceModelResolver.java
@@ -0,0 +1,33 @@
+package org.apache.maven.model.resolution;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+
+public interface WorkspaceModelResolver
+{
+
+ Model resolveRawModel( String groupId, String artifactId, String versionConstraint )
+ throws UnresolvableModelException;
+
+ Model resolveEffectiveModel( String groupId, String artifactId, String versionConstraint )
+ throws UnresolvableModelException;
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/superpom/DefaultSuperPomProvider.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/superpom/DefaultSuperPomProvider.java
new file mode 100644
index 00000000..7d4f66a8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/superpom/DefaultSuperPomProvider.java
@@ -0,0 +1,87 @@
+package org.apache.maven.model.superpom;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelProcessor;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+/**
+ * Provides the super POM that all models implicitly inherit from.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = SuperPomProvider.class )
+public class DefaultSuperPomProvider
+ implements SuperPomProvider
+{
+
+ /**
+ * The cached super POM, lazily created.
+ */
+ private Model superModel;
+
+ @Requirement
+ private ModelProcessor modelProcessor;
+
+ public DefaultSuperPomProvider setModelProcessor( ModelProcessor modelProcessor )
+ {
+ this.modelProcessor = modelProcessor;
+ return this;
+ }
+
+ @Override
+ public Model getSuperModel( String version )
+ {
+ if ( superModel == null )
+ {
+ String resource = "/org/apache/maven/model/pom-" + version + ".xml";
+
+ InputStream is = getClass().getResourceAsStream( resource );
+
+ if ( is == null )
+ {
+ throw new IllegalStateException( "The super POM " + resource + " was not found"
+ + ", please verify the integrity of your Maven installation" );
+ }
+
+ try
+ {
+ Map<String, String> options = new HashMap<String, String>();
+ options.put( "xml:4.0.0", "xml:4.0.0" );
+ superModel = modelProcessor.read( is, options );
+ }
+ catch ( IOException e )
+ {
+ throw new IllegalStateException( "The super POM " + resource + " is damaged"
+ + ", please verify the integrity of your Maven installation", e );
+ }
+ }
+
+ return superModel;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/superpom/SuperPomProvider.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/superpom/SuperPomProvider.java
new file mode 100644
index 00000000..3f44fb7e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/superpom/SuperPomProvider.java
@@ -0,0 +1,42 @@
+package org.apache.maven.model.superpom;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+
+/**
+ * Provides the super POM that all models implicitly inherit from.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface SuperPomProvider
+{
+
+ /**
+ * Gets the super POM for the specified model version. The returned model is supposed to be read-only, i.e. if the
+ * caller intends to make updates to the model the return value must be cloned before updating to ensure the
+ * modifications don't affect future retrievals of the super POM.
+ *
+ * @param version The model version to retrieve the super POM for (e.g. "4.0.0"), must not be {@code null}.
+ * @return The super POM, never {@code null}.
+ */
+ Model getSuperModel( String version );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
new file mode 100644
index 00000000..dd7bd4e2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
@@ -0,0 +1,1076 @@
+package org.apache.maven.model.validation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.ActivationFile;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.BuildBase;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.model.Exclusion;
+import org.apache.maven.model.InputLocation;
+import org.apache.maven.model.InputLocationTracker;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.model.PluginManagement;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.Reporting;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.Resource;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblem.Severity;
+import org.apache.maven.model.building.ModelProblem.Version;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.building.ModelProblemCollectorRequest;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
+ */
+@Component( role = ModelValidator.class )
+public class DefaultModelValidator
+ implements ModelValidator
+{
+
+ private static final Pattern ID_REGEX = Pattern.compile( "[A-Za-z0-9_\\-.]+" );
+
+ private static final Pattern ID_WITH_WILDCARDS_REGEX = Pattern.compile( "[A-Za-z0-9_\\-.?*]+" );
+
+ private static final String ILLEGAL_FS_CHARS = "\\/:\"<>|?*";
+
+ private static final String ILLEGAL_VERSION_CHARS = ILLEGAL_FS_CHARS;
+
+ private static final String ILLEGAL_REPO_ID_CHARS = ILLEGAL_FS_CHARS;
+
+ @Override
+ public void validateRawModel( Model m, ModelBuildingRequest request, ModelProblemCollector problems )
+ {
+ Parent parent = m.getParent();
+ if ( parent != null )
+ {
+ validateStringNotEmpty( "parent.groupId", problems, Severity.FATAL, Version.BASE, parent.getGroupId(),
+ parent );
+
+ validateStringNotEmpty( "parent.artifactId", problems, Severity.FATAL, Version.BASE,
+ parent.getArtifactId(), parent );
+
+ validateStringNotEmpty( "parent.version", problems, Severity.FATAL, Version.BASE, parent.getVersion(),
+ parent );
+
+ if ( equals( parent.getGroupId(), m.getGroupId() )
+ && equals( parent.getArtifactId(), m.getArtifactId() ) )
+ {
+ addViolation( problems, Severity.FATAL, Version.BASE, "parent.artifactId", null, "must be changed"
+ + ", the parent element cannot have the same groupId:artifactId as the project.", parent );
+ }
+ }
+
+ if ( request.getValidationLevel() >= ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 )
+ {
+ Severity errOn30 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0 );
+
+ validateEnum( "modelVersion", problems, Severity.ERROR, Version.V20, m.getModelVersion(), null, m,
+ "4.0.0" );
+
+ validateStringNoExpression( "groupId", problems, Severity.WARNING, Version.V20, m.getGroupId(), m );
+ if ( parent == null )
+ {
+ validateStringNotEmpty( "groupId", problems, Severity.FATAL, Version.V20, m.getGroupId(), m );
+ }
+
+ validateStringNoExpression( "artifactId", problems, Severity.WARNING, Version.V20, m.getArtifactId(), m );
+ validateStringNotEmpty( "artifactId", problems, Severity.FATAL, Version.V20, m.getArtifactId(), m );
+
+ validateVersionNoExpression( "version", problems, Severity.WARNING, Version.V20, m.getVersion(), m );
+ if ( parent == null )
+ {
+ validateStringNotEmpty( "version", problems, Severity.FATAL, Version.V20, m.getVersion(), m );
+ }
+
+ validate20RawDependencies( problems, m.getDependencies(), "dependencies.dependency", request );
+
+ if ( m.getDependencyManagement() != null )
+ {
+ validate20RawDependencies( problems, m.getDependencyManagement().getDependencies(),
+ "dependencyManagement.dependencies.dependency", request );
+ }
+
+ validateRawRepositories( problems, m.getRepositories(), "repositories.repository", request );
+
+ validateRawRepositories( problems, m.getPluginRepositories(), "pluginRepositories.pluginRepository",
+ request );
+
+ Build build = m.getBuild();
+ if ( build != null )
+ {
+ validate20RawPlugins( problems, build.getPlugins(), "build.plugins.plugin", request );
+
+ PluginManagement mngt = build.getPluginManagement();
+ if ( mngt != null )
+ {
+ validate20RawPlugins( problems, mngt.getPlugins(), "build.pluginManagement.plugins.plugin",
+ request );
+ }
+ }
+
+ Set<String> profileIds = new HashSet<String>();
+
+ for ( Profile profile : m.getProfiles() )
+ {
+ String prefix = "profiles.profile[" + profile.getId() + "]";
+
+ if ( !profileIds.add( profile.getId() ) )
+ {
+ addViolation( problems, errOn30, Version.V20, "profiles.profile.id", null,
+ "must be unique but found duplicate profile with id " + profile.getId(), profile );
+ }
+
+ validate30RawProfileActivation( problems, profile.getActivation(), profile.getId(), prefix
+ + ".activation", request );
+
+ validate20RawDependencies( problems, profile.getDependencies(), prefix + ".dependencies.dependency",
+ request );
+
+ if ( profile.getDependencyManagement() != null )
+ {
+ validate20RawDependencies( problems, profile.getDependencyManagement().getDependencies(), prefix
+ + ".dependencyManagement.dependencies.dependency", request );
+ }
+
+ validateRawRepositories( problems, profile.getRepositories(), prefix + ".repositories.repository",
+ request );
+
+ validateRawRepositories( problems, profile.getPluginRepositories(), prefix
+ + ".pluginRepositories.pluginRepository", request );
+
+ BuildBase buildBase = profile.getBuild();
+ if ( buildBase != null )
+ {
+ validate20RawPlugins( problems, buildBase.getPlugins(), prefix + ".plugins.plugin", request );
+
+ PluginManagement mngt = buildBase.getPluginManagement();
+ if ( mngt != null )
+ {
+ validate20RawPlugins( problems, mngt.getPlugins(), prefix + ".pluginManagement.plugins.plugin",
+ request );
+ }
+ }
+ }
+ }
+ }
+
+ private void validate30RawProfileActivation( ModelProblemCollector problems, Activation activation,
+ String sourceHint, String prefix, ModelBuildingRequest request )
+ {
+ if ( activation == null )
+ {
+ return;
+ }
+
+ ActivationFile file = activation.getFile();
+
+ if ( file != null )
+ {
+ String path;
+ boolean missing;
+
+ if ( StringUtils.isNotEmpty( file.getExists() ) )
+ {
+ path = file.getExists();
+ missing = false;
+ }
+ else if ( StringUtils.isNotEmpty( file.getMissing() ) )
+ {
+ path = file.getMissing();
+ missing = true;
+ }
+ else
+ {
+ return;
+ }
+
+ if ( path.contains( "${project.basedir}" ) )
+ {
+ addViolation( problems,
+ Severity.WARNING,
+ Version.V30,
+ prefix + ( missing ? ".file.missing" : ".file.exists" ),
+ null,
+ "Failed to interpolate file location " + path + " for profile " + sourceHint
+ + ": ${project.basedir} expression not supported during profile activation, "
+ + "use ${basedir} instead",
+ file.getLocation( missing ? "missing" : "exists" ) );
+ }
+ else if ( hasProjectExpression( path ) )
+ {
+ addViolation( problems,
+ Severity.WARNING,
+ Version.V30,
+ prefix + ( missing ? ".file.missing" : ".file.exists" ),
+ null,
+ "Failed to interpolate file location "
+ + path
+ + " for profile "
+ + sourceHint
+ + ": ${project.*} expressions are not supported during profile activation",
+ file.getLocation( missing ? "missing" : "exists" ) );
+ }
+ }
+ }
+
+ private void validate20RawPlugins( ModelProblemCollector problems, List<Plugin> plugins, String prefix,
+ ModelBuildingRequest request )
+ {
+ Severity errOn31 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_1 );
+
+ Map<String, Plugin> index = new HashMap<String, Plugin>();
+
+ for ( Plugin plugin : plugins )
+ {
+ String key = plugin.getKey();
+
+ Plugin existing = index.get( key );
+
+ if ( existing != null )
+ {
+ addViolation( problems, errOn31, Version.V20, prefix + ".(groupId:artifactId)", null,
+ "must be unique but found duplicate declaration of plugin " + key, plugin );
+ }
+ else
+ {
+ index.put( key, plugin );
+ }
+
+ Set<String> executionIds = new HashSet<String>();
+
+ for ( PluginExecution exec : plugin.getExecutions() )
+ {
+ if ( !executionIds.add( exec.getId() ) )
+ {
+ addViolation( problems, Severity.ERROR, Version.V20, prefix + "[" + plugin.getKey()
+ + "].executions.execution.id", null, "must be unique but found duplicate execution with id "
+ + exec.getId(), exec );
+ }
+ }
+ }
+ }
+
+ @Override
+ public void validateEffectiveModel( Model m, ModelBuildingRequest request, ModelProblemCollector problems )
+ {
+ validateStringNotEmpty( "modelVersion", problems, Severity.ERROR, Version.BASE, m.getModelVersion(), m );
+
+ validateId( "groupId", problems, m.getGroupId(), m );
+
+ validateId( "artifactId", problems, m.getArtifactId(), m );
+
+ validateStringNotEmpty( "packaging", problems, Severity.ERROR, Version.BASE, m.getPackaging(), m );
+
+ if ( !m.getModules().isEmpty() )
+ {
+ if ( !"pom".equals( m.getPackaging() ) )
+ {
+ addViolation( problems, Severity.ERROR, Version.BASE, "packaging", null,
+ "with value '" + m.getPackaging() + "' is invalid. Aggregator projects "
+ + "require 'pom' as packaging.", m );
+ }
+
+ for ( int i = 0, n = m.getModules().size(); i < n; i++ )
+ {
+ String module = m.getModules().get( i );
+ if ( StringUtils.isBlank( module ) )
+ {
+ addViolation( problems, Severity.ERROR, Version.BASE, "modules.module[" + i + "]", null,
+ "has been specified without a path to the project directory.",
+ m.getLocation( "modules" ) );
+ }
+ }
+ }
+
+ validateStringNotEmpty( "version", problems, Severity.ERROR, Version.BASE, m.getVersion(), m );
+
+ Severity errOn30 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0 );
+
+ validateEffectiveDependencies( problems, m.getDependencies(), false, request );
+
+ DependencyManagement mgmt = m.getDependencyManagement();
+ if ( mgmt != null )
+ {
+ validateEffectiveDependencies( problems, mgmt.getDependencies(), true, request );
+ }
+
+ if ( request.getValidationLevel() >= ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 )
+ {
+ Set<String> modules = new HashSet<String>();
+ for ( int i = 0, n = m.getModules().size(); i < n; i++ )
+ {
+ String module = m.getModules().get( i );
+ if ( !modules.add( module ) )
+ {
+ addViolation( problems, Severity.ERROR, Version.V20, "modules.module[" + i + "]", null,
+ "specifies duplicate child module " + module, m.getLocation( "modules" ) );
+ }
+ }
+
+ Severity errOn31 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_1 );
+
+ validateBannedCharacters( "version", problems, errOn31, Version.V20, m.getVersion(), null, m,
+ ILLEGAL_VERSION_CHARS );
+ validate20ProperSnapshotVersion( "version", problems, errOn31, Version.V20, m.getVersion(), null, m );
+
+ Build build = m.getBuild();
+ if ( build != null )
+ {
+ for ( Plugin p : build.getPlugins() )
+ {
+ validateStringNotEmpty( "build.plugins.plugin.artifactId", problems, Severity.ERROR, Version.V20,
+ p.getArtifactId(), p );
+
+ validateStringNotEmpty( "build.plugins.plugin.groupId", problems, Severity.ERROR, Version.V20,
+ p.getGroupId(), p );
+
+ validate20PluginVersion( "build.plugins.plugin.version", problems, p.getVersion(), p.getKey(), p,
+ request );
+
+ validateBoolean( "build.plugins.plugin.inherited", problems, errOn30, Version.V20,
+ p.getInherited(), p.getKey(), p );
+
+ validateBoolean( "build.plugins.plugin.extensions", problems, errOn30, Version.V20,
+ p.getExtensions(), p.getKey(), p );
+
+ validate20EffectivePluginDependencies( problems, p, request );
+ }
+
+ validate20RawResources( problems, build.getResources(), "build.resources.resource", request );
+
+ validate20RawResources( problems, build.getTestResources(), "build.testResources.testResource",
+ request );
+ }
+
+ Reporting reporting = m.getReporting();
+ if ( reporting != null )
+ {
+ for ( ReportPlugin p : reporting.getPlugins() )
+ {
+ validateStringNotEmpty( "reporting.plugins.plugin.artifactId", problems, Severity.ERROR,
+ Version.V20, p.getArtifactId(), p );
+
+ validateStringNotEmpty( "reporting.plugins.plugin.groupId", problems, Severity.ERROR, Version.V20,
+ p.getGroupId(), p );
+ }
+ }
+
+ for ( Repository repository : m.getRepositories() )
+ {
+ validate20EffectiveRepository( problems, repository, "repositories.repository", request );
+ }
+
+ for ( Repository repository : m.getPluginRepositories() )
+ {
+ validate20EffectiveRepository( problems, repository, "pluginRepositories.pluginRepository", request );
+ }
+
+ DistributionManagement distMgmt = m.getDistributionManagement();
+ if ( distMgmt != null )
+ {
+ if ( distMgmt.getStatus() != null )
+ {
+ addViolation( problems, Severity.ERROR, Version.V20, "distributionManagement.status", null,
+ "must not be specified.", distMgmt );
+ }
+
+ validate20EffectiveRepository( problems, distMgmt.getRepository(), "distributionManagement.repository",
+ request );
+ validate20EffectiveRepository( problems, distMgmt.getSnapshotRepository(),
+ "distributionManagement.snapshotRepository", request );
+ }
+ }
+ }
+
+ private void validate20RawDependencies( ModelProblemCollector problems, List<Dependency> dependencies,
+ String prefix, ModelBuildingRequest request )
+ {
+ Severity errOn30 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0 );
+ Severity errOn31 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_1 );
+
+ Map<String, Dependency> index = new HashMap<String, Dependency>();
+
+ for ( Dependency dependency : dependencies )
+ {
+ String key = dependency.getManagementKey();
+
+ if ( "import".equals( dependency.getScope() ) )
+ {
+ if ( !"pom".equals( dependency.getType() ) )
+ {
+ addViolation( problems, Severity.WARNING, Version.V20, prefix + ".type", key,
+ "must be 'pom' to import the managed dependencies.", dependency );
+ }
+ else if ( StringUtils.isNotEmpty( dependency.getClassifier() ) )
+ {
+ addViolation( problems, errOn30, Version.V20, prefix + ".classifier", key,
+ "must be empty, imported POM cannot have a classifier.", dependency );
+ }
+ }
+ else if ( "system".equals( dependency.getScope() ) )
+ {
+ String sysPath = dependency.getSystemPath();
+ if ( StringUtils.isNotEmpty( sysPath ) )
+ {
+ if ( !hasExpression( sysPath ) )
+ {
+ addViolation( problems, Severity.WARNING, Version.V20, prefix + ".systemPath", key,
+ "should use a variable instead of a hard-coded path " + sysPath, dependency );
+ }
+ else if ( sysPath.contains( "${basedir}" ) || sysPath.contains( "${project.basedir}" ) )
+ {
+ addViolation( problems, Severity.WARNING, Version.V20, prefix + ".systemPath", key,
+ "should not point at files within the project directory, " + sysPath
+ + " will be unresolvable by dependent projects", dependency );
+ }
+ }
+ }
+
+ Dependency existing = index.get( key );
+
+ if ( existing != null )
+ {
+ String msg;
+ if ( equals( existing.getVersion(), dependency.getVersion() ) )
+ {
+ msg =
+ "duplicate declaration of version "
+ + StringUtils.defaultString( dependency.getVersion(), "(?)" );
+ }
+ else
+ {
+ msg =
+ "version " + StringUtils.defaultString( existing.getVersion(), "(?)" ) + " vs "
+ + StringUtils.defaultString( dependency.getVersion(), "(?)" );
+ }
+
+ addViolation( problems, errOn31, Version.V20, prefix + ".(groupId:artifactId:type:classifier)", null,
+ "must be unique: " + key + " -> " + msg, dependency );
+ }
+ else
+ {
+ index.put( key, dependency );
+ }
+ }
+ }
+
+ private void validateEffectiveDependencies( ModelProblemCollector problems, List<Dependency> dependencies,
+ boolean management, ModelBuildingRequest request )
+ {
+ Severity errOn30 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0 );
+
+ String prefix = management ? "dependencyManagement.dependencies.dependency." : "dependencies.dependency.";
+
+ for ( Dependency d : dependencies )
+ {
+ validateEffectiveDependency( problems, d, management, prefix, request );
+
+ if ( request.getValidationLevel() >= ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 )
+ {
+ validateBoolean( prefix + "optional", problems, errOn30, Version.V20, d.getOptional(),
+ d.getManagementKey(), d );
+
+ if ( !management )
+ {
+ validateVersion( prefix + "version", problems, errOn30, Version.V20, d.getVersion(),
+ d.getManagementKey(), d );
+
+ /*
+ * TODO: Extensions like Flex Mojos use custom scopes like "merged", "internal", "external", etc.
+ * In order to don't break backward-compat with those, only warn but don't error out.
+ */
+ validateEnum( prefix + "scope", problems, Severity.WARNING, Version.V20, d.getScope(),
+ d.getManagementKey(), d, "provided", "compile", "runtime", "test", "system" );
+ }
+ }
+ }
+ }
+
+ private void validate20EffectivePluginDependencies( ModelProblemCollector problems, Plugin plugin,
+ ModelBuildingRequest request )
+ {
+ List<Dependency> dependencies = plugin.getDependencies();
+
+ if ( !dependencies.isEmpty() )
+ {
+ String prefix = "build.plugins.plugin[" + plugin.getKey() + "].dependencies.dependency.";
+
+ Severity errOn30 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0 );
+
+ for ( Dependency d : dependencies )
+ {
+ validateEffectiveDependency( problems, d, false, prefix, request );
+
+ validateVersion( prefix + "version", problems, errOn30, Version.BASE, d.getVersion(),
+ d.getManagementKey(), d );
+
+ validateEnum( prefix + "scope", problems, errOn30, Version.BASE, d.getScope(), d.getManagementKey(), d,
+ "compile", "runtime", "system" );
+ }
+ }
+ }
+
+ private void validateEffectiveDependency( ModelProblemCollector problems, Dependency d, boolean management,
+ String prefix, ModelBuildingRequest request )
+ {
+ validateId( prefix + "artifactId", problems, Severity.ERROR, Version.BASE, d.getArtifactId(),
+ d.getManagementKey(), d );
+
+ validateId( prefix + "groupId", problems, Severity.ERROR, Version.BASE, d.getGroupId(), d.getManagementKey(),
+ d );
+
+ if ( !management )
+ {
+ validateStringNotEmpty( prefix + "type", problems, Severity.ERROR, Version.BASE, d.getType(),
+ d.getManagementKey(), d );
+
+ validateDependencyVersion( problems, d, prefix );
+ }
+
+ if ( "system".equals( d.getScope() ) )
+ {
+ String systemPath = d.getSystemPath();
+
+ if ( StringUtils.isEmpty( systemPath ) )
+ {
+ addViolation( problems, Severity.ERROR, Version.BASE, prefix + "systemPath", d.getManagementKey(),
+ "is missing.", d );
+ }
+ else
+ {
+ File sysFile = new File( systemPath );
+ if ( !sysFile.isAbsolute() )
+ {
+ addViolation( problems, Severity.ERROR, Version.BASE, prefix + "systemPath", d.getManagementKey(),
+ "must specify an absolute path but is " + systemPath, d );
+ }
+ else if ( !sysFile.isFile() )
+ {
+ String msg = "refers to a non-existing file " + sysFile.getAbsolutePath();
+ systemPath = systemPath.replace( '/', File.separatorChar ).replace( '\\', File.separatorChar );
+ String jdkHome =
+ request.getSystemProperties().getProperty( "java.home", "" ) + File.separator + "..";
+ if ( systemPath.startsWith( jdkHome ) )
+ {
+ msg += ". Please verify that you run Maven using a JDK and not just a JRE.";
+ }
+ addViolation( problems, Severity.WARNING, Version.BASE, prefix + "systemPath",
+ d.getManagementKey(), msg, d );
+ }
+ }
+ }
+ else if ( StringUtils.isNotEmpty( d.getSystemPath() ) )
+ {
+ addViolation( problems, Severity.ERROR, Version.BASE, prefix + "systemPath", d.getManagementKey(),
+ "must be omitted." + " This field may only be specified for a dependency with system scope.",
+ d );
+ }
+
+ if ( request.getValidationLevel() >= ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 )
+ {
+ for ( Exclusion exclusion : d.getExclusions() )
+ {
+ if ( request.getValidationLevel() < ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0 )
+ {
+ validateId( prefix + "exclusions.exclusion.groupId", problems, Severity.WARNING, Version.V20,
+ exclusion.getGroupId(), d.getManagementKey(), exclusion );
+
+ validateId( prefix + "exclusions.exclusion.artifactId", problems, Severity.WARNING, Version.V20,
+ exclusion.getArtifactId(), d.getManagementKey(), exclusion );
+ }
+ else
+ {
+ validateIdWithWildcards( prefix + "exclusions.exclusion.groupId", problems, Severity.WARNING,
+ Version.V30, exclusion.getGroupId(), d.getManagementKey(), exclusion );
+
+ validateIdWithWildcards( prefix + "exclusions.exclusion.artifactId", problems, Severity.WARNING,
+ Version.V30, exclusion.getArtifactId(), d.getManagementKey(), exclusion );
+ }
+ }
+ }
+ }
+
+ /**
+ * @since 3.2.4
+ */
+ protected void validateDependencyVersion( ModelProblemCollector problems, Dependency d, String prefix )
+ {
+ validateStringNotEmpty( prefix + "version", problems, Severity.ERROR, Version.BASE, d.getVersion(),
+ d.getManagementKey(), d );
+ }
+
+ private void validateRawRepositories( ModelProblemCollector problems, List<Repository> repositories, String prefix,
+ ModelBuildingRequest request )
+ {
+ Map<String, Repository> index = new HashMap<String, Repository>();
+
+ for ( Repository repository : repositories )
+ {
+ validateStringNotEmpty( prefix + ".id", problems, Severity.ERROR, Version.V20, repository.getId(),
+ repository );
+
+ validateStringNotEmpty( prefix + "[" + repository.getId() + "].url", problems, Severity.ERROR, Version.V20,
+ repository.getUrl(), repository );
+
+ String key = repository.getId();
+
+ Repository existing = index.get( key );
+
+ if ( existing != null )
+ {
+ Severity errOn30 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0 );
+
+ addViolation( problems, errOn30, Version.V20, prefix + ".id", null,
+ "must be unique: " + repository.getId() + " -> " + existing.getUrl() + " vs "
+ + repository.getUrl(), repository );
+ }
+ else
+ {
+ index.put( key, repository );
+ }
+ }
+ }
+
+ private void validate20EffectiveRepository( ModelProblemCollector problems, Repository repository, String prefix,
+ ModelBuildingRequest request )
+ {
+ if ( repository != null )
+ {
+ Severity errOn31 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_1 );
+
+ validateBannedCharacters( prefix + ".id", problems, errOn31, Version.V20, repository.getId(), null,
+ repository, ILLEGAL_REPO_ID_CHARS );
+
+ if ( "local".equals( repository.getId() ) )
+ {
+ addViolation( problems, errOn31, Version.V20, prefix + ".id", null, "must not be 'local'"
+ + ", this identifier is reserved for the local repository"
+ + ", using it for other repositories will corrupt your repository metadata.", repository );
+ }
+
+ if ( "legacy".equals( repository.getLayout() ) )
+ {
+ addViolation( problems, Severity.WARNING, Version.V20, prefix + ".layout", repository.getId(),
+ "uses the unsupported value 'legacy', artifact resolution might fail.", repository );
+ }
+ }
+ }
+
+ private void validate20RawResources( ModelProblemCollector problems, List<Resource> resources, String prefix,
+ ModelBuildingRequest request )
+ {
+ Severity errOn30 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0 );
+
+ for ( Resource resource : resources )
+ {
+ validateStringNotEmpty( prefix + ".directory", problems, Severity.ERROR, Version.V20,
+ resource.getDirectory(), resource );
+
+ validateBoolean( prefix + ".filtering", problems, errOn30, Version.V20, resource.getFiltering(),
+ resource.getDirectory(), resource );
+ }
+ }
+
+ // ----------------------------------------------------------------------
+ // Field validation
+ // ----------------------------------------------------------------------
+
+ private boolean validateId( String fieldName, ModelProblemCollector problems, String id,
+ InputLocationTracker tracker )
+ {
+ return validateId( fieldName, problems, Severity.ERROR, Version.BASE, id, null, tracker );
+ }
+
+ private boolean validateId( String fieldName, ModelProblemCollector problems, Severity severity, Version version,
+ String id, String sourceHint, InputLocationTracker tracker )
+ {
+ if ( !validateStringNotEmpty( fieldName, problems, severity, version, id, sourceHint, tracker ) )
+ {
+ return false;
+ }
+ else
+ {
+ boolean match = ID_REGEX.matcher( id ).matches();
+ if ( !match )
+ {
+ addViolation( problems, severity, version, fieldName, sourceHint, "with value '" + id
+ + "' does not match a valid id pattern.", tracker );
+ }
+ return match;
+ }
+ }
+
+ private boolean validateIdWithWildcards( String fieldName, ModelProblemCollector problems, Severity severity,
+ Version version, String id, String sourceHint,
+ InputLocationTracker tracker )
+ {
+ if ( !validateStringNotEmpty( fieldName, problems, severity, version, id, sourceHint, tracker ) )
+ {
+ return false;
+ }
+ else
+ {
+ boolean match = ID_WITH_WILDCARDS_REGEX.matcher( id ).matches();
+ if ( !match )
+ {
+ addViolation( problems, severity, version, fieldName, sourceHint, "with value '" + id
+ + "' does not match a valid id pattern.", tracker );
+ }
+ return match;
+ }
+ }
+
+
+ private boolean validateStringNoExpression( String fieldName, ModelProblemCollector problems, Severity severity,
+ Version version, String string, InputLocationTracker tracker )
+ {
+ if ( !hasExpression( string ) )
+ {
+ return true;
+ }
+
+ addViolation( problems, severity, version, fieldName, null, "contains an expression but should be a constant.",
+ tracker );
+
+ return false;
+ }
+
+ private boolean validateVersionNoExpression( String fieldName, ModelProblemCollector problems, Severity severity,
+ Version version, String string, InputLocationTracker tracker )
+ {
+
+ if ( !hasExpression( string ) )
+ {
+ return true;
+ }
+
+ //
+ // Acceptable versions for continuous delivery
+ //
+ // changelist
+ // revision
+ // sha1
+ //
+ if ( string.trim().contains( "${changelist}" ) || string.trim().contains( "${revision}" )
+ || string.trim().contains( "${sha1}" ) )
+ {
+ return true;
+ }
+
+ addViolation( problems, severity, version, fieldName, null, "contains an expression but should be a constant.",
+ tracker );
+
+ return false;
+ }
+
+ private boolean hasExpression( String value )
+ {
+ return value != null && value.contains( "${" );
+ }
+
+ private boolean hasProjectExpression( String value )
+ {
+ return value != null && value.contains( "${project." );
+ }
+
+ private boolean validateStringNotEmpty( String fieldName, ModelProblemCollector problems, Severity severity,
+ Version version, String string, InputLocationTracker tracker )
+ {
+ return validateStringNotEmpty( fieldName, problems, severity, version, string, null, tracker );
+ }
+
+ /**
+ * Asserts:
+ * <p/>
+ * <ul>
+ * <li><code>string != null</code>
+ * <li><code>string.length > 0</code>
+ * </ul>
+ */
+ private boolean validateStringNotEmpty( String fieldName, ModelProblemCollector problems, Severity severity,
+ Version version, String string, String sourceHint,
+ InputLocationTracker tracker )
+ {
+ if ( !validateNotNull( fieldName, problems, severity, version, string, sourceHint, tracker ) )
+ {
+ return false;
+ }
+
+ if ( string.length() > 0 )
+ {
+ return true;
+ }
+
+ addViolation( problems, severity, version, fieldName, sourceHint, "is missing.", tracker );
+
+ return false;
+ }
+
+ /**
+ * Asserts:
+ * <p/>
+ * <ul>
+ * <li><code>string != null</code>
+ * </ul>
+ */
+ private boolean validateNotNull( String fieldName, ModelProblemCollector problems, Severity severity,
+ Version version, Object object, String sourceHint, InputLocationTracker tracker )
+ {
+ if ( object != null )
+ {
+ return true;
+ }
+
+ addViolation( problems, severity, version, fieldName, sourceHint, "is missing.", tracker );
+
+ return false;
+ }
+
+ private boolean validateBoolean( String fieldName, ModelProblemCollector problems, Severity severity,
+ Version version, String string, String sourceHint, InputLocationTracker tracker )
+ {
+ if ( string == null || string.length() <= 0 )
+ {
+ return true;
+ }
+
+ if ( "true".equalsIgnoreCase( string ) || "false".equalsIgnoreCase( string ) )
+ {
+ return true;
+ }
+
+ addViolation( problems, severity, version, fieldName, sourceHint, "must be 'true' or 'false' but is '" + string
+ + "'.", tracker );
+
+ return false;
+ }
+
+ private boolean validateEnum( String fieldName, ModelProblemCollector problems, Severity severity, Version version,
+ String string, String sourceHint, InputLocationTracker tracker,
+ String... validValues )
+ {
+ if ( string == null || string.length() <= 0 )
+ {
+ return true;
+ }
+
+ List<String> values = Arrays.asList( validValues );
+
+ if ( values.contains( string ) )
+ {
+ return true;
+ }
+
+ addViolation( problems, severity, version, fieldName, sourceHint, "must be one of " + values + " but is '"
+ + string + "'.", tracker );
+
+ return false;
+ }
+
+ private boolean validateBannedCharacters( String fieldName, ModelProblemCollector problems, Severity severity,
+ Version version, String string, String sourceHint,
+ InputLocationTracker tracker, String banned )
+ {
+ if ( string != null )
+ {
+ for ( int i = string.length() - 1; i >= 0; i-- )
+ {
+ if ( banned.indexOf( string.charAt( i ) ) >= 0 )
+ {
+ addViolation( problems, severity, version, fieldName, sourceHint,
+ "must not contain any of these characters " + banned + " but found "
+ + string.charAt( i ), tracker );
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ private boolean validateVersion( String fieldName, ModelProblemCollector problems, Severity severity,
+ Version version, String string, String sourceHint, InputLocationTracker tracker )
+ {
+ if ( string == null || string.length() <= 0 )
+ {
+ return true;
+ }
+
+ if ( hasExpression( string ) )
+ {
+ addViolation( problems, severity, version, fieldName, sourceHint,
+ "must be a valid version but is '" + string + "'.", tracker );
+ return false;
+ }
+
+ return validateBannedCharacters( fieldName, problems, severity, version, string, sourceHint, tracker,
+ ILLEGAL_VERSION_CHARS );
+
+ }
+
+ private boolean validate20ProperSnapshotVersion( String fieldName, ModelProblemCollector problems,
+ Severity severity, Version version, String string,
+ String sourceHint, InputLocationTracker tracker )
+ {
+ if ( string == null || string.length() <= 0 )
+ {
+ return true;
+ }
+
+ if ( string.endsWith( "SNAPSHOT" ) && !string.endsWith( "-SNAPSHOT" ) )
+ {
+ addViolation( problems, severity, version, fieldName, sourceHint,
+ "uses an unsupported snapshot version format, should be '*-SNAPSHOT' instead.", tracker );
+ return false;
+ }
+
+ return true;
+ }
+
+ private boolean validate20PluginVersion( String fieldName, ModelProblemCollector problems, String string,
+ String sourceHint, InputLocationTracker tracker,
+ ModelBuildingRequest request )
+ {
+ if ( string == null )
+ {
+ // NOTE: The check for missing plugin versions is handled directly by the model builder
+ return true;
+ }
+
+ Severity errOn30 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0 );
+
+ if ( !validateVersion( fieldName, problems, errOn30, Version.V20, string, sourceHint, tracker ) )
+ {
+ return false;
+ }
+
+ if ( string.length() <= 0 || "RELEASE".equals( string ) || "LATEST".equals( string ) )
+ {
+ addViolation( problems, errOn30, Version.V20, fieldName, sourceHint, "must be a valid version but is '"
+ + string + "'.", tracker );
+ return false;
+ }
+
+ return true;
+ }
+
+ private static void addViolation( ModelProblemCollector problems, Severity severity, Version version,
+ String fieldName, String sourceHint, String message,
+ InputLocationTracker tracker )
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+ buffer.append( '\'' ).append( fieldName ).append( '\'' );
+
+ if ( sourceHint != null )
+ {
+ buffer.append( " for " ).append( sourceHint );
+ }
+
+ buffer.append( ' ' ).append( message );
+
+ problems.add( new ModelProblemCollectorRequest( severity, version )
+ .setMessage( buffer.toString() ).setLocation( getLocation( fieldName, tracker ) ) );
+ }
+
+ private static InputLocation getLocation( String fieldName, InputLocationTracker tracker )
+ {
+ InputLocation location = null;
+
+ if ( tracker != null )
+ {
+ if ( fieldName != null )
+ {
+ Object key = fieldName;
+
+ int idx = fieldName.lastIndexOf( '.' );
+ if ( idx >= 0 )
+ {
+ fieldName = fieldName.substring( idx + 1 );
+ key = fieldName;
+ }
+
+ if ( fieldName.endsWith( "]" ) )
+ {
+ key = fieldName.substring( fieldName.lastIndexOf( '[' ) + 1, fieldName.length() - 1 );
+ try
+ {
+ key = Integer.valueOf( key.toString() );
+ }
+ catch ( NumberFormatException e )
+ {
+ // use key as is
+ }
+ }
+
+ location = tracker.getLocation( key );
+ }
+
+ if ( location == null )
+ {
+ location = tracker.getLocation( "" );
+ }
+ }
+
+ return location;
+ }
+
+ private static boolean equals( String s1, String s2 )
+ {
+ return StringUtils.clean( s1 ).equals( StringUtils.clean( s2 ) );
+ }
+
+ private static Severity getSeverity( ModelBuildingRequest request, int errorThreshold )
+ {
+ return getSeverity( request.getValidationLevel(), errorThreshold );
+ }
+
+ private static Severity getSeverity( int validationLevel, int errorThreshold )
+ {
+ if ( validationLevel < errorThreshold )
+ {
+ return Severity.WARNING;
+ }
+ else
+ {
+ return Severity.ERROR;
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/validation/ModelValidator.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/validation/ModelValidator.java
new file mode 100644
index 00000000..84e3fadd
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/validation/ModelValidator.java
@@ -0,0 +1,54 @@
+package org.apache.maven.model.validation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblemCollector;
+
+/**
+ * Checks the model for missing or invalid values.
+ *
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
+ */
+public interface ModelValidator
+{
+
+ /**
+ * Checks the specified (raw) model for missing or invalid values. The raw model is directly created from the POM
+ * file and has not been subjected to inheritance, interpolation or profile/default injection.
+ *
+ * @param model The model to validate, must not be {@code null}.
+ * @param request The model building request that holds further settings, must not be {@code null}.
+ * @param problems The container used to collect problems that were encountered, must not be {@code null}.
+ */
+ void validateRawModel( Model model, ModelBuildingRequest request, ModelProblemCollector problems );
+
+ /**
+ * Checks the specified (effective) model for missing or invalid values. The effective model is fully assembled and
+ * has undergone inheritance, interpolation and other model operations.
+ *
+ * @param model The model to validate, must not be {@code null}.
+ * @param request The model building request that holds further settings, must not be {@code null}.
+ * @param problems The container used to collect problems that were encountered, must not be {@code null}.
+ */
+ void validateEffectiveModel( Model model, ModelBuildingRequest request, ModelProblemCollector problems );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/mdo/profiles.mdo b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/mdo/profiles.mdo
new file mode 100644
index 00000000..26f0d122
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/mdo/profiles.mdo
@@ -0,0 +1,399 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<model xmlns="http://modello.codehaus.org/MODELLO/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.0.0 http://modello.codehaus.org/xsd/modello-1.0.0.xsd"
+ xml.namespace="http://maven.apache.org/PROFILES/${version}"
+ xml.schemaLocation="http://maven.apache.org/xsd/profiles-${version}.xsd">
+ <id>profiles</id>
+ <name>Profiles</name>
+ <description><![CDATA[
+ Project-local overrides to the build process based on detected or user-provided environmental parameters.
+ This is the model specification for ${basedir}/profiles.xml.
+ ]]></description>
+ <defaults>
+ <default>
+ <key>package</key>
+ <value>org.apache.maven.profiles</value>
+ </default>
+ </defaults>
+ <classes>
+ <class rootElement="true" xml.tagName="profilesXml">
+ <name>ProfilesRoot</name>
+ <version>1.0.0</version>
+ <description>Root element of the profiles.xml file.</description>
+ <fields>
+ <field>
+ <name>profiles</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ Configuration of build profiles for adjusting the build
+ according to environmental parameters
+ ]]></description>
+ <association>
+ <type>Profile</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>activeProfiles</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ List of manually-activated build profiles, specified in the order in which
+ they should be applied.
+ ]]></description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>Profile</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ Modifications to the build process which is keyed on some
+ sort of environmental parameter.
+ ]]></description>
+ <fields>
+ <field>
+ <name>id</name>
+ <required>true</required>
+ <version>1.0.0</version>
+ <type>String</type>
+ <defaultValue>default</defaultValue>
+ <description>The ID of this build profile, for activation
+ purposes.</description>
+ </field>
+ <field>
+ <name>activation</name>
+ <version>1.0.0</version>
+ <description><![CDATA[The conditional logic which will automatically
+ trigger the inclusion of this profile.]]></description>
+ <association>
+ <type>Activation</type>
+ </association>
+ </field>
+ <field>
+ <name>properties</name>
+ <description>Extended configuration specific to this profile goes
+ here.</description>
+ <type>Properties</type>
+ <association xml.mapStyle="inline">
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>repositories</name>
+ <version>1.0.0</version>
+ <description><![CDATA[The lists of the remote repositories]]>
+ </description>
+ <association>
+ <type>Repository</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>pluginRepositories</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ The lists of the remote repositories for discovering plugins
+ ]]></description>
+ <association>
+ <type>Repository</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ <comment><![CDATA[ This may be removed or relocated in the near
+ future. It is undecided whether plugins really need a remote
+ repository set of their own. ]]></comment>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>Activation</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ The conditions within the build runtime environment which will trigger
+ the automatic inclusion of the parent build profile.
+ ]]></description>
+ <fields>
+ <field>
+ <name>activeByDefault</name>
+ <version>1.0.0</version>
+ <type>boolean</type>
+ <description>Flag specifying whether this profile is active as a default.</description>
+ </field>
+ <field>
+ <name>jdk</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description><![CDATA[
+ Specifies that this profile will be activated when a matching JDK is detected.
+ ]]></description>
+ </field>
+ <field>
+ <name>os</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ Specifies that this profile will be activated when matching OS attributes are detected.
+ ]]></description>
+ <association>
+ <type>ActivationOS</type>
+ </association>
+ </field>
+ <field>
+ <name>property</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ Specifies that this profile will be activated when this System property is specified.
+ ]]></description>
+ <association>
+ <type>ActivationProperty</type>
+ </association>
+ </field>
+ <field>
+ <name>file</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ Specifies that this profile will be activated based on existence of a file.
+ ]]></description>
+ <association>
+ <type>ActivationFile</type>
+ </association>
+ </field>
+ </fields>
+ </class>
+
+ <!-- TODO: reproduced from maven-model/maven.mdo, instead should inherit code and link to external docs -->
+ <class>
+ <name>RepositoryBase</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ Repository contains the information needed
+ for establishing connections with remote repoistory
+ ]]></description>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ A unique identifier for a repository.
+ ]]></description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>name</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ Human readable name of the repository
+ ]]></description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ The url of the repository
+ ]]></description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>layout</name>
+ <version>1.0.0</version>
+ <description>The type of layout this repository uses for locating and storing artifacts - can be "legacy" or
+ "default".</description>
+ <type>String</type>
+ <defaultValue>default</defaultValue>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0</version>
+ <code><![CDATA[
+ public boolean equals( Object obj )
+ {
+ RepositoryBase other = (RepositoryBase) obj;
+
+ boolean retValue = false;
+
+ if ( id != null )
+ {
+ retValue = id.equals( other.id );
+ }
+
+ return retValue;
+ }
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <name>Repository</name>
+ <superClass>RepositoryBase</superClass>
+ <version>1.0.0</version>
+ <description>
+ Repository contains the information needed for establishing connections with remote repoistory
+ </description>
+ <fields>
+ <field>
+ <name>releases</name>
+ <version>1.0.0</version>
+ <description>How to handle downloading of releases from this repository</description>
+ <association>
+ <type>RepositoryPolicy</type>
+ </association>
+ </field>
+ <field>
+ <name>snapshots</name>
+ <version>1.0.0</version>
+ <description>How to handle downloading of snapshots from this repository</description>
+ <association>
+ <type>RepositoryPolicy</type>
+ </association>
+ </field>
+ </fields>
+ <!-- prevent modello generation of an incorrect equals method. Could be avoided by using <identity/> tags to mark ID as the only identity field -->
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0</version>
+ <code><![CDATA[
+ public boolean equals( Object obj )
+ {
+ return super.equals( obj );
+ }
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+
+ <class>
+ <name>RepositoryPolicy</name>
+ <version>1.0.0</version>
+ <description>Download policy</description>
+ <fields>
+ <field>
+ <name>enabled</name>
+ <version>1.0.0</version>
+ <description>Whether to use this repository for downloading this type of artifact</description>
+ <type>boolean</type>
+ <defaultValue>true</defaultValue>
+ </field>
+ <field>
+ <name>updatePolicy</name>
+ <version>1.0.0</version>
+ <description>
+ The frequency for downloading updates - can be "always", "daily" (default), "interval:XXX" (in minutes) or
+ "never" (only if it doesn't exist locally).
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>checksumPolicy</name>
+ <version>1.0.0</version>
+ <description>What to do when verification of an artifact checksum fails - warn, fail, etc. Valid values are
+ "fail" or "warn"</description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>ActivationProperty</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ This is the property specification used to activate a profile. If the value field is empty,
+ then the existence of the named property will activate the profile, otherwise it does a case-sensitive
+ match against the property value as well.
+ ]]></description>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <required>true</required>
+ <description>The name of the property to be used to activate a profile</description>
+ </field>
+ <field>
+ <name>value</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The value of the property to be used to activate a profile</description>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>ActivationFile</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ This is the file specification used to activate a profile. The missing value will be a the location
+ of a file that needs to exist, and if it doesn't the profile must run. On the other hand exists will test
+ for the existence of the file and if it is there will run the profile.
+ ]]></description>
+ <fields>
+ <field>
+ <name>missing</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The name of the file that should be missing to activate a profile</description>
+ </field>
+ <field>
+ <name>exists</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The name of the file that should exist to activate a profile</description>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>ActivationOS</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ This is an activator which will detect an operating system's attributes in order to activate
+ its profile.
+ ]]></description>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The name of the OS to be used to activate a profile</description>
+ </field>
+ <field>
+ <name>family</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The general family of the OS to be used to activate a profile (e.g. 'windows')</description>
+ </field>
+ <field>
+ <name>arch</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The architecture of the OS to be used to activate a profile</description>
+ </field>
+ <field>
+ <name>version</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The version of the OS to be used to activate a profile</description>
+ </field>
+ </fields>
+ </class>
+ </classes>
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/resources/org/apache/maven/model/pom-4.0.0.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/resources/org/apache/maven/model/pom-4.0.0.xml
new file mode 100644
index 00000000..91492a92
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/resources/org/apache/maven/model/pom-4.0.0.xml
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!-- START SNIPPET: superpom -->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <repositories>
+ <repository>
+ <id>central</id>
+ <name>Central Repository</name>
+ <url>https://repo.maven.apache.org/maven2</url>
+ <layout>default</layout>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>central</id>
+ <name>Central Repository</name>
+ <url>https://repo.maven.apache.org/maven2</url>
+ <layout>default</layout>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ <releases>
+ <updatePolicy>never</updatePolicy>
+ </releases>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <build>
+ <directory>${project.basedir}/target</directory>
+ <outputDirectory>${project.build.directory}/classes</outputDirectory>
+ <finalName>${project.artifactId}-${project.version}</finalName>
+ <testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
+ <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
+ <scriptSourceDirectory>${project.basedir}/src/main/scripts</scriptSourceDirectory>
+ <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
+ <resources>
+ <resource>
+ <directory>${project.basedir}/src/main/resources</directory>
+ </resource>
+ </resources>
+ <testResources>
+ <testResource>
+ <directory>${project.basedir}/src/test/resources</directory>
+ </testResource>
+ </testResources>
+ <pluginManagement>
+ <!-- NOTE: These plugins will be removed from future versions of the super POM -->
+ <!-- They are kept for the moment as they are very unlikely to conflict with lifecycle mappings (MNG-4453) -->
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>1.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.2-beta-5</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <version>2.8</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-release-plugin</artifactId>
+ <version>2.3.2</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <reporting>
+ <outputDirectory>${project.build.directory}/site</outputDirectory>
+ </reporting>
+
+ <profiles>
+ <!-- NOTE: The release profile will be removed from future versions of the super POM -->
+ <profile>
+ <id>release-profile</id>
+
+ <activation>
+ <property>
+ <name>performRelease</name>
+ <value>true</value>
+ </property>
+ </activation>
+
+ <build>
+ <plugins>
+ <plugin>
+ <inherited>true</inherited>
+ <artifactId>maven-source-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-sources</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <inherited>true</inherited>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-javadocs</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <inherited>true</inherited>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <configuration>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+</project>
+<!-- END SNIPPET: superpom -->
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/site/apt/index.apt b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/site/apt/index.apt
new file mode 100644
index 00000000..64cb805c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/site/apt/index.apt
@@ -0,0 +1,187 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ Introduction
+ -----
+ Hervé Boutemy
+ -----
+ 2013-03-19
+ -----
+
+Maven Model Builder
+
+ The effective model builder, with profile activation, inheritance, interpolation, ...
+
+ The main component is <<<ModelBuilder>>>
+ ({{{./apidocs/org/apache/maven/model/building/ModelBuilder.html}javadoc}},
+ {{{./xref/org/apache/maven/model/building/ModelBuilder.html}source}}),
+ with its <<<DefaultModelBuilder>>> implementation
+ ({{{./apidocs/org/apache/maven/model/building/DefaultModelBuilder.html}javadoc}},
+ {{{./xref/org/apache/maven/model/building/DefaultModelBuilder.html}source}})
+ that manages the steps sequence.
+
+ The sequence is divided into 2 phases:
+
+ * phase 1
+
+ ** profile activation: see {{{./apidocs/org/apache/maven/model/profile/activation/package-summary.html}available activators}}.
+ Notice that model interpolation hasn't happened yet, then interpolation for file-based activation is limited to
+ <<<$\{basedir}>>> (since Maven 3), System properties and request properties
+
+ ** raw model validation: <<<ModelValidator>>> ({{{./apidocs/org/apache/maven/model/validation/ModelValidator.html}javadoc}}),
+ with its <<<DefaultModelValidator>>> implementation
+ ({{{./xref/org/apache/maven/model/validation/DefaultModelValidator.html}source}})
+
+ ** model normalization - merge duplicates: <<<ModelNormalizer>>> ({{{./apidocs/org/apache/maven/model/normalization/ModelNormalizer.html}javadoc}}),
+ with its <<<DefaultModelNormalizer>>> implementation
+ ({{{./xref/org/apache/maven/model/normalization/DefaultModelNormalizer.html}source}})
+
+ ** profile injection: <<<ProfileInjector>>> ({{{./apidocs/org/apache/maven/model/profile/ProfileInjector.html}javadoc}}),
+ with its <<<DefaultProfileInjector>>> implementation
+ ({{{./xref/org/apache/maven/model/profile/DefaultProfileInjector.html}source}})
+
+ ** parent resolution until {{{./super-pom.html}super-pom}}
+
+ ** inheritance assembly: <<<InheritanceAssembler>>> ({{{./apidocs/org/apache/maven/model/inheritance/InheritanceAssembler.html}javadoc}}),
+ with its <<<DefaultInheritanceAssembler>>> implementation
+ ({{{./xref/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.html}source}})
+
+ ** model interpolation (see below)
+
+ ** url normalization: <<<UrlNormalizer>>> ({{{./apidocs/org/apache/maven/model/path/UrlNormalizer.html}javadoc}}),
+ with its <<<DefaultUrlNormalizer>>> implementation
+ ({{{./xref/org/apache/maven/model/path/DefaultUrlNormalizer.html}source}})
+
+ []
+
+ * phase 2, with optional plugin processing
+
+ ** model path translation: <<<ModelPathTranslator>>> ({{{./apidocs/org/apache/maven/model/path/ModelPathTranslator.html}javadoc}}),
+ with its <<<DefaultModelPathTranslator>>> implementation
+ ({{{./xref/org/apache/maven/model/path/DefaultModelPathTranslator.html}source}})
+
+ ** plugin management injection: <<<PluginManagementInjector>>> ({{{./apidocs/org/apache/maven/model/management/PluginManagementInjector.html}javadoc}}),
+ with its <<<DefaultPluginManagementInjector>>> implementation
+ ({{{./xref/org/apache/maven/model/management/DefaultPluginManagementInjector.html}source}})
+
+ ** <(optional)> lifecycle bindings injection: <<<LifecycleBindingsInjector>>> ({{{./apidocs/org/apache/maven/model/plugin/LifecycleBindingsInjector.html}javadoc}}),
+ with its <<<DefaultLifecycleBindingsInjector>>> implementation
+ ({{{./xref/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.html}source}})
+
+ ** dependency management import (for dependencies of type <<<pom>>> in the <<<\<dependencyManagement\>>>> section)
+
+ ** dependency management injection: <<<DependencyManagementInjector>>> ({{{./apidocs/org/apache/maven/model/management/DependencyManagementInjector.html}javadoc}}),
+ with its <<<DefaultDependencyManagementInjector>>> implementation
+ ({{{./xref/org/apache/maven/model/management/DefaultDependencyManagementInjector.html}source}})
+
+ ** model normalization - inject default values: <<<ModelNormalizer>>> ({{{./apidocs/org/apache/maven/model/normalization/ModelNormalizer.html}javadoc}}),
+ with its <<<DefaultModelNormalizer>>> implementation
+ ({{{./xref/org/apache/maven/model/normalization/DefaultModelNormalizer.html}source}})
+
+ ** <(optional)> reports configuration: <<<ReportConfigurationExpander>>> ({{{./apidocs/org/apache/maven/model/plugin/ReportConfigurationExpander.html}javadoc}}),
+ with its <<<DefaultReportConfigurationExpander>>> implementation
+ ({{{./xref/org/apache/maven/model/plugin/DefaultReportConfigurationExpander.html}source}})
+
+ ** <(optional)> reports conversion to decoupled site plugin: <<<ReportingConverter>>> ({{{./apidocs/org/apache/maven/model/plugin/ReportingConverter.html}javadoc}}),
+ with its <<<DefaultReportingConverter>>> implementation
+ ({{{./xref/org/apache/maven/model/plugin/DefaultReportingConverter.html}source}})
+
+ ** <(optional)> plugins configuration: <<<PluginConfigurationExpander>>> ({{{./apidocs/org/apache/maven/model/plugin/PluginConfigurationExpander.html}javadoc}}),
+ with its <<<DefaultPluginConfigurationExpander>>> implementation
+ ({{{./xref/org/apache/maven/model/plugin/DefaultPluginConfigurationExpander.html}source}})
+
+ ** effective model validation: <<<ModelValidator>>> ({{{./apidocs/org/apache/maven/model/validation/ModelValidator.html}javadoc}}),
+ with its <<<DefaultModelValidator>>> implementation
+ ({{{./xref/org/apache/maven/model/validation/DefaultModelValidator.html}source}})
+
+ []
+
+ []
+
+
+* Model Interpolation
+
+ Model Interpolation consists in replacing <<<$\{...\}>>> with calculated value. It is done in <<<StringSearchModelInterpolator>>>
+ ({{{./apidocs/org/apache/maven/model/interpolation/StringSearchModelInterpolator.html}javadoc}},
+ {{{./xref/org/apache/maven/model/interpolation/StringSearchModelInterpolator.html}source}}).
+
+ Notice that model interpolation happens <after> profile activation, then profile activation doesn't benefit from every values:
+ interpolation for file-based activation is limited to <<<$\{basedir}>>> (which was introduced in Maven 3 and is not deprecated
+ in this context), System properties and request properties.
+
+ Values are evaluated in sequence from different syntaxes:
+
+*----+------+------+
+|| value || evaluation result || common examples ||
+*----+------+------+
+| <<<project.*>>>\
+<<<pom.*>>> (<deprecated>)\
+<<<*>>> (<deprecated>) | POM content (see {{{../maven-model/maven.html}POM reference}}) | <<<$\{project.version\}>>>\
+ | | <<<$\{project.build.finalName\}>>>\
+ | | <<<$\{project.artifactId\}>>>\
+ | | <<<$\{project.build.directory\}>>> |
+*----+------+------+
+| <<<project.basedir>>>\
+<<<pom.basedir>>> (<deprecated>)\
+<<<basedir>>> (<deprecated>) | the directory containing the <<<pom.xml>>> file | <<<$\{project.basedir\}>>> |
+*----+------+------+
+| <<<project.baseUri>>>\
+<<<pom.baseUri>>> (<deprecated>) | the directory containing the <<<pom.xml>>> file as URI | <<<$\{project.baseUri\}>>> |
+*----+------+------+
+| <<<build.timestamp>>>\
+<<<maven.build.timestamp>>> | the UTC timestamp of build start, in <<<yyyy-MM-dd'T'HH:mm:ss'Z'>>> default format, which can be overridden with <<<maven.build.timestamp.format>>> POM property | <<<$\{maven.build.timestamp\}>>> |
+*----+------+------+
+| <<<*>>> | user properties, set from CLI with <<<-Dproperty=value>>> | <<<$\{skipTests\}>>> |
+*----+------+------+
+| <<<*>>> | model properties, such as project properties set in the pom | <<<$\{any.key\}>>> |
+*----+------+------+
+| <<<maven.home>>> | The path to the current Maven home. | <<<$\{maven.home\}>>> |
+*----+------+------+
+| <<<maven.version>>> | The version number of the current Maven execution <(since 3.0.4)>. For example, "<<<3.0.5>>>". | <<<$\{maven.version\}>>> |
+*----+------+------+
+| <<<maven.build.version>>> | The full build version of the current Maven execution <(since 3.0.4)>. For example, "<<<Apache Maven 3.2.2 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19T14:51:28+01:00)>>>". | <<<$\{maven.build.version\}>>> |
+*----+------+------+
+| <<<*>>> | Java system properties (see {{{http://download.oracle.com/javase/6/docs/api/java/lang/System.html#getProperties()}JDK reference}}) | <<<$\{user.home\}>>>\
+ | | <<<$\{java.home\}>>> |
+*----+------+------+
+| <<<env.*>>>\
+<<<*>>> | environment variables | <<<$\{env.PATH\}>>> |
+*----+------+------+
+| <<<settings.*>>> | Local user settings (see {{{../maven-settings/settings.xml/settings.html}settings reference}}) | <<<$\{settings.localRepository\}>>> |
+*----+------+------+
+
+** Notice
+
+ * after model interpolation, <<<$\{...\}>>> content can remain in the model that will be evaluated later
+ when setting plugin parameters. This happens in particular with <<<settings.*>>> values for
+ {{{../maven-settings/settings.html}Settings Model}},
+
+ * encoding configuration have been defined as POM properties looking like POM content but not added to POM model to maintain
+ compatibility with previous Maven versions:
+
+ * <<<$\{project.build.sourceEncoding\}>>> for
+ {{{http://docs.codehaus.org/display/MAVENUSER/POM+Element+for+Source+File+Encoding}source files encoding}}
+ (defaults to platform encoding)
+
+ * <<<$\{project.reporting.outputEncoding\}>>> for
+ {{{https://cwiki.apache.org/confluence/display/MAVENOLD/Reporting+Encoding+Configuration}reporting output files encoding}}
+ (defaults to <<<UTF-8>>>)
+
+ []
+
+ []
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/site/apt/super-pom.apt.vm b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/site/apt/super-pom.apt.vm
new file mode 100644
index 00000000..df86d70e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/site/apt/super-pom.apt.vm
@@ -0,0 +1,30 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ Super POM
+ -----
+ Hervé Boutemy
+ -----
+ 2011-09-12
+ -----
+
+Super POM
+
+ All models implicitly inherit from a super-POM:
+
+%{snippet|id=superpom|file=${project.build.sourceDirectory}/../resources/org/apache/maven/model/pom-4.0.0.xml}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/site/site.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/site/site.xml
new file mode 100644
index 00000000..04f54455
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/site/site.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
+ <body>
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ <item name="JavaDocs" href="apidocs/index.html"/>
+ <item name="Source Xref" href="xref/index.html"/>
+ <!--item name="FAQ" href="faq.html"/-->
+ </menu>
+
+ <menu name="Reference">
+ <item name="Super POM" href="super-pom.html"/>
+ </menu>
+
+ <menu ref="parent"/>
+ <menu ref="reports"/>
+ </body>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/building/ComplexActivationTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/building/ComplexActivationTest.java
new file mode 100644
index 00000000..9ef31b3d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/building/ComplexActivationTest.java
@@ -0,0 +1,60 @@
+package org.apache.maven.model.building;
+
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+import java.io.File;
+import java.util.Properties;
+
+/**
+ * @author Konstantin Perikov
+ */
+public class ComplexActivationTest
+ extends TestCase
+{
+
+ private File getPom( String name )
+ {
+ return new File( "src/test/resources/poms/factory/" + name + ".xml" ).getAbsoluteFile();
+ }
+
+ public void testAndConditionInActivation()
+ throws Exception
+ {
+ Properties sysProperties = new Properties();
+ sysProperties.setProperty( "myproperty", "test" );
+
+ ModelBuilder builder = new DefaultModelBuilderFactory().newInstance();
+ assertNotNull( builder );
+
+ DefaultModelBuildingRequest request = new DefaultModelBuildingRequest();
+ request.setProcessPlugins( true );
+ request.setPomFile( getPom( "complex" ) );
+ request.setSystemProperties( sysProperties );
+
+ ModelBuildingResult result = builder.build( request );
+ assertNotNull( result );
+ assertNotNull( result.getEffectiveModel() );
+ assertEquals( "activated-1", result.getEffectiveModel().getProperties().get( "profile.file" ) );
+ assertNull( result.getEffectiveModel().getProperties().get( "profile.miss" ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/building/DefaultModelBuilderFactoryTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/building/DefaultModelBuilderFactoryTest.java
new file mode 100644
index 00000000..90b65a4c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/building/DefaultModelBuilderFactoryTest.java
@@ -0,0 +1,59 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class DefaultModelBuilderFactoryTest
+ extends TestCase
+{
+
+ private File getPom( String name )
+ {
+ return new File( "src/test/resources/poms/factory/" + name + ".xml" ).getAbsoluteFile();
+ }
+
+ public void testCompleteWiring()
+ throws Exception
+ {
+ ModelBuilder builder = new DefaultModelBuilderFactory().newInstance();
+ assertNotNull( builder );
+
+ DefaultModelBuildingRequest request = new DefaultModelBuildingRequest();
+ request.setProcessPlugins( true );
+ request.setPomFile( getPom( "simple" ) );
+
+ ModelBuildingResult result = builder.build( request );
+ assertNotNull( result );
+ assertNotNull( result.getEffectiveModel() );
+ assertEquals( "activated", result.getEffectiveModel().getProperties().get( "profile.file" ) );
+ Xpp3Dom conf = (Xpp3Dom) result.getEffectiveModel().getBuild().getPlugins().get( 0 ).getConfiguration();
+ assertEquals( "1.5", conf.getChild( "source" ).getValue() );
+ assertEquals( " 1.5 ", conf.getChild( "target" ).getValue() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/building/SimpleProblemCollector.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/building/SimpleProblemCollector.java
new file mode 100644
index 00000000..bb0ccff9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/building/SimpleProblemCollector.java
@@ -0,0 +1,89 @@
+package org.apache.maven.model.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.model.Model;
+
+
+/**
+ * A simple model problem collector for testing the model building components.
+ *
+ * @author Benjamin Bentmann
+ */
+public class SimpleProblemCollector
+ implements ModelProblemCollector
+{
+ private Model model;
+
+ private List<String> warnings = new ArrayList<String>();
+
+ private List<String> errors = new ArrayList<String>();
+
+ private List<String> fatals = new ArrayList<String>();
+
+ public SimpleProblemCollector()
+ {
+ }
+
+ public SimpleProblemCollector( Model model )
+ {
+ this.model = model;
+ }
+
+ public Model getModel()
+ {
+ return model;
+ }
+
+ public List<String> getWarnings()
+ {
+ return warnings;
+ }
+
+ public List<String> getErrors()
+ {
+ return errors;
+ }
+
+ public List<String> getFatals()
+ {
+ return fatals;
+ }
+
+ public void add( ModelProblemCollectorRequest req )
+ {
+ switch ( req.getSeverity() )
+ {
+ case FATAL:
+ fatals.add( req.getMessage() );
+ break;
+ case ERROR:
+ errors.add( req.getMessage() );
+ break;
+ case WARNING:
+ warnings.add( req.getMessage() );
+ break;
+ }
+
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java
new file mode 100644
index 00000000..1aef12ec
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java
@@ -0,0 +1,108 @@
+package org.apache.maven.model.inheritance;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.SimpleProblemCollector;
+import org.apache.maven.model.io.ModelParseException;
+import org.apache.maven.model.io.ModelReader;
+import org.apache.maven.model.io.ModelWriter;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.IOUtil;
+import org.custommonkey.xmlunit.XMLAssert;
+import org.custommonkey.xmlunit.XMLUnit;
+
+/**
+ * @author Hervé Boutemy
+ */
+public class DefaultInheritanceAssemblerTest
+ extends PlexusTestCase
+{
+ private ModelReader reader;
+
+ private ModelWriter writer;
+
+ private InheritanceAssembler assembler;
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ reader = lookup( ModelReader.class );
+ writer = lookup( ModelWriter.class );
+ assembler = lookup( InheritanceAssembler.class );
+ }
+
+ private File getPom( String name )
+ {
+ return getTestFile( "src/test/resources/poms/inheritance/" + name + ".xml" );
+ }
+
+ private Model getModel( String name )
+ throws ModelParseException, IOException
+ {
+ return reader.read( getPom( name ), null );
+ }
+
+ public void testPluginConfiguration()
+ throws Exception
+ {
+ Model parent = getModel( "plugin-configuration-parent" );
+
+ Model child = getModel( "plugin-configuration-child" );
+
+ SimpleProblemCollector problems = new SimpleProblemCollector();
+
+ assembler.assembleModelInheritance( child, parent, null, problems );
+
+ File actual = getTestFile( "target/test-classes/poms/inheritance/plugin-configuration-actual.xml" );
+
+ writer.write( actual, null, child );
+
+ // check with getPom( "plugin-configuration-effective" )
+ Reader control = null;
+ Reader test = null;
+ try
+ {
+ File expected = getPom( "plugin-configuration-expected" );
+ control = new InputStreamReader( new FileInputStream( expected ), "UTF-8" );
+
+ test = new InputStreamReader( new FileInputStream( actual ), "UTF-8" );
+
+ XMLUnit.setIgnoreComments( true );
+ XMLUnit.setIgnoreWhitespace( true );
+ XMLAssert.assertXMLEqual( control, test );
+ }
+ catch ( IOException ioe )
+ {
+ IOUtil.close( control );
+ IOUtil.close( test );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java
new file mode 100644
index 00000000..99842dfe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java
@@ -0,0 +1,494 @@
+package org.apache.maven.model.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Organization;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.Resource;
+import org.apache.maven.model.Scm;
+import org.apache.maven.model.building.DefaultModelBuildingRequest;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.SimpleProblemCollector;
+import org.apache.maven.model.path.PathTranslator;
+import org.codehaus.plexus.PlexusTestCase;
+
+import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.TimeZone;
+
+/**
+ * @author jdcasey
+ */
+public abstract class AbstractModelInterpolatorTest
+ extends PlexusTestCase
+{
+ private Properties context;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ context = new Properties();
+ context.put( "basedir", "myBasedir" );
+ context.put( "project.baseUri", "myBaseUri" );
+ }
+
+
+ protected void assertProblemFree( SimpleProblemCollector collector )
+ {
+ assertEquals( "Expected no errors", 0, collector.getErrors().size() );
+ assertEquals( "Expected no warnings", 0, collector.getWarnings().size() );
+ assertEquals( "Expected no fatals", 0, collector.getFatals().size() );
+ }
+
+ protected void assertColllectorState( int numFatals, int numErrors, int numWarnings,
+ SimpleProblemCollector collector )
+ {
+ assertEquals( "Errors", numErrors, collector.getErrors().size() );
+ assertEquals( "Warnings", numWarnings, collector.getWarnings().size() );
+ assertEquals( "Fatals", numFatals, collector.getFatals().size() );
+ }
+
+ private ModelBuildingRequest createModelBuildingRequest( Properties p )
+ {
+ ModelBuildingRequest config = new DefaultModelBuildingRequest();
+ if ( p != null )
+ {
+ config.setSystemProperties( p );
+ }
+ return config;
+ }
+
+ public void testDefaultBuildTimestampFormatShouldFormatTimeIn24HourFormat()
+ {
+ Calendar cal = Calendar.getInstance();
+ cal.setTimeZone(TimeZone.getTimeZone("UTC"));
+ cal.set( Calendar.HOUR, 12 );
+ cal.set( Calendar.AM_PM, Calendar.AM );
+
+ // just to make sure all the bases are covered...
+ cal.set( Calendar.HOUR_OF_DAY, 0 );
+ cal.set( Calendar.MINUTE, 16 );
+ cal.set( Calendar.SECOND, 0 );
+ cal.set( Calendar.YEAR, 1976 );
+ cal.set( Calendar.MONTH, Calendar.NOVEMBER );
+ cal.set( Calendar.DATE, 11 );
+
+ Date firstTestDate = cal.getTime();
+
+ cal.set( Calendar.HOUR, 11 );
+ cal.set( Calendar.AM_PM, Calendar.PM );
+
+ // just to make sure all the bases are covered...
+ cal.set( Calendar.HOUR_OF_DAY, 23 );
+
+ Date secondTestDate = cal.getTime();
+
+ SimpleDateFormat format =
+ new SimpleDateFormat( MavenBuildTimestamp.DEFAULT_BUILD_TIMESTAMP_FORMAT );
+ format.setTimeZone(TimeZone.getTimeZone("UTC"));
+ assertEquals( "1976-11-11T00:16:00Z", format.format( firstTestDate ) );
+ assertEquals( "1976-11-11T23:16:00Z", format.format( secondTestDate ) );
+ }
+
+ public void testDefaultBuildTimestampFormatWithLocalTimeZoneMidnightRollover()
+ {
+ Calendar cal = Calendar.getInstance();
+ cal.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
+
+ cal.set( Calendar.HOUR_OF_DAY, 1 );
+ cal.set( Calendar.MINUTE, 16 );
+ cal.set( Calendar.SECOND, 0 );
+ cal.set( Calendar.YEAR, 2014 );
+ cal.set( Calendar.MONTH, Calendar.JUNE );
+ cal.set( Calendar.DATE, 16 );
+
+ Date firstTestDate = cal.getTime();
+
+ cal.set( Calendar.MONTH, Calendar.NOVEMBER );
+
+ Date secondTestDate = cal.getTime();
+
+ SimpleDateFormat format =
+ new SimpleDateFormat( MavenBuildTimestamp.DEFAULT_BUILD_TIMESTAMP_FORMAT );
+ format.setTimeZone(TimeZone.getTimeZone("UTC"));
+ assertEquals( "2014-06-15T23:16:00Z", format.format( firstTestDate ) );
+ assertEquals( "2014-11-16T00:16:00Z", format.format( secondTestDate ) );
+ }
+
+ public void testShouldNotThrowExceptionOnReferenceToNonExistentValue()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Scm scm = new Scm();
+ scm.setConnection( "${test}/somepath" );
+
+ model.setScm( scm );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
+
+ assertProblemFree( collector );
+ assertEquals( "${test}/somepath", out.getScm().getConnection() );
+ }
+
+ public void testShouldThrowExceptionOnRecursiveScmConnectionReference()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Scm scm = new Scm();
+ scm.setConnection( "${project.scm.connection}/somepath" );
+
+ model.setScm( scm );
+
+ try
+ {
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ interpolator.interpolateModel( model, null, createModelBuildingRequest( context ), collector );
+ assertColllectorState( 0, 1, 0, collector );
+ }
+ catch ( Exception e )
+ {
+
+ }
+ }
+
+ public void testShouldNotThrowExceptionOnReferenceToValueContainingNakedExpression()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Scm scm = new Scm();
+ scm.setConnection( "${test}/somepath" );
+
+ model.setScm( scm );
+
+ model.addProperty( "test", "test" );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
+
+ assertProblemFree( collector );
+
+ assertEquals( "test/somepath", out.getScm().getConnection() );
+ }
+
+ public void testShouldInterpolateOrganizationNameCorrectly()
+ throws Exception
+ {
+ String orgName = "MyCo";
+
+ Model model = new Model();
+ model.setName( "${pom.organization.name} Tools" );
+
+ Organization org = new Organization();
+ org.setName( orgName );
+
+ model.setOrganization( org );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ),
+ new SimpleProblemCollector() );
+
+ assertEquals( orgName + " Tools", out.getName() );
+ }
+
+ public void testShouldInterpolateDependencyVersionToSetSameAsProjectVersion()
+ throws Exception
+ {
+ Model model = new Model();
+ model.setVersion( "3.8.1" );
+
+ Dependency dep = new Dependency();
+ dep.setVersion( "${version}" );
+
+ model.addDependency( dep );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
+ assertColllectorState(0, 0, 1, collector );
+
+ assertEquals( "3.8.1", ( out.getDependencies().get( 0 ) ).getVersion() );
+ }
+
+ public void testShouldNotInterpolateDependencyVersionWithInvalidReference()
+ throws Exception
+ {
+ Model model = new Model();
+ model.setVersion( "3.8.1" );
+
+ Dependency dep = new Dependency();
+ dep.setVersion( "${something}" );
+
+ model.addDependency( dep );
+
+ /*
+ // This is the desired behaviour, however there are too many crappy poms in the repo and an issue with the
+ // timing of executing the interpolation
+
+ try
+ {
+ new RegexBasedModelInterpolator().interpolate( model, context );
+ fail( "Should have failed to interpolate with invalid reference" );
+ }
+ catch ( ModelInterpolationException expected )
+ {
+ assertTrue( true );
+ }
+ */
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
+ assertProblemFree( collector );
+
+ assertEquals( "${something}", ( out.getDependencies().get( 0 ) ).getVersion() );
+ }
+
+ public void testTwoReferences()
+ throws Exception
+ {
+ Model model = new Model();
+ model.setVersion( "3.8.1" );
+ model.setArtifactId( "foo" );
+
+ Dependency dep = new Dependency();
+ dep.setVersion( "${artifactId}-${version}" );
+
+ model.addDependency( dep );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
+ assertColllectorState( 0, 0, 2, collector );
+
+ assertEquals( "foo-3.8.1", ( out.getDependencies().get( 0 ) ).getVersion() );
+ }
+
+ public void testBasedir()
+ throws Exception
+ {
+ Model model = new Model();
+ model.setVersion( "3.8.1" );
+ model.setArtifactId( "foo" );
+
+ Repository repository = new Repository();
+
+ repository.setUrl( "file://localhost/${basedir}/temp-repo" );
+
+ model.addRepository( repository );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out = interpolator.interpolateModel( model, null, createModelBuildingRequest( context ), collector );
+ assertProblemFree( collector );
+
+ assertEquals( "file://localhost/myBasedir/temp-repo", ( out.getRepositories().get( 0 ) ).getUrl() );
+ }
+
+ public void testBaseUri()
+ throws Exception
+ {
+ Model model = new Model();
+ model.setVersion( "3.8.1" );
+ model.setArtifactId( "foo" );
+
+ Repository repository = new Repository();
+
+ repository.setUrl( "${project.baseUri}/temp-repo" );
+
+ model.addRepository( repository );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out = interpolator.interpolateModel( model, null, createModelBuildingRequest( context ), collector );
+ assertProblemFree( collector );
+
+ assertEquals( "myBaseUri/temp-repo", ( out.getRepositories().get( 0 ) ).getUrl() );
+ }
+
+ public void testEnvars()
+ throws Exception
+ {
+ Properties context = new Properties();
+
+ context.put( "env.HOME", "/path/to/home" );
+
+ Model model = new Model();
+
+ Properties modelProperties = new Properties();
+
+ modelProperties.setProperty( "outputDirectory", "${env.HOME}" );
+
+ model.setProperties( modelProperties );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
+ assertProblemFree( collector );
+
+ assertEquals( "/path/to/home", out.getProperties().getProperty( "outputDirectory" ) );
+ }
+
+ public void testEnvarExpressionThatEvaluatesToNullReturnsTheLiteralString()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Properties modelProperties = new Properties();
+
+ modelProperties.setProperty( "outputDirectory", "${env.DOES_NOT_EXIST}" );
+
+ model.setProperties( modelProperties );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
+ assertProblemFree( collector );
+
+ assertEquals( out.getProperties().getProperty( "outputDirectory" ), "${env.DOES_NOT_EXIST}" );
+ }
+
+ public void testExpressionThatEvaluatesToNullReturnsTheLiteralString()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Properties modelProperties = new Properties();
+
+ modelProperties.setProperty( "outputDirectory", "${DOES_NOT_EXIST}" );
+
+ model.setProperties( modelProperties );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
+ assertProblemFree( collector );
+
+ assertEquals( out.getProperties().getProperty( "outputDirectory" ), "${DOES_NOT_EXIST}" );
+ }
+
+ public void testShouldInterpolateSourceDirectoryReferencedFromResourceDirectoryCorrectly()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Build build = new Build();
+ build.setSourceDirectory( "correct" );
+
+ Resource res = new Resource();
+ res.setDirectory( "${project.build.sourceDirectory}" );
+
+ build.addResource( res );
+
+ Resource res2 = new Resource();
+ res2.setDirectory( "${pom.build.sourceDirectory}" );
+
+ build.addResource( res2 );
+
+ Resource res3 = new Resource();
+ res3.setDirectory( "${build.sourceDirectory}" );
+
+ build.addResource( res3 );
+
+ model.setBuild( build );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out = interpolator.interpolateModel( model, null, createModelBuildingRequest( context ), collector );
+ assertColllectorState( 0, 0, 2, collector );
+
+
+ List<Resource> outResources = out.getBuild().getResources();
+ Iterator<Resource> resIt = outResources.iterator();
+
+ assertEquals( build.getSourceDirectory(), resIt.next().getDirectory() );
+ assertEquals( build.getSourceDirectory(), resIt.next().getDirectory() );
+ assertEquals( build.getSourceDirectory(), resIt.next().getDirectory() );
+ }
+
+ public void testShouldInterpolateUnprefixedBasedirExpression()
+ throws Exception
+ {
+ File basedir = new File( "/test/path" );
+ Model model = new Model();
+ Dependency dep = new Dependency();
+ dep.setSystemPath( "${basedir}/artifact.jar" );
+
+ model.addDependency( dep );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model result = interpolator.interpolateModel( model, basedir, createModelBuildingRequest( context ), collector );
+ assertProblemFree( collector );
+
+
+ List<Dependency> rDeps = result.getDependencies();
+ assertNotNull( rDeps );
+ assertEquals( 1, rDeps.size() );
+ assertEquals( new File( basedir, "artifact.jar" ).getAbsolutePath(),
+ new File( rDeps.get( 0 ).getSystemPath() ).getAbsolutePath() );
+ }
+
+ protected abstract ModelInterpolator createInterpolator( PathTranslator translator )
+ throws Exception;
+
+ protected abstract ModelInterpolator createInterpolator()
+ throws Exception;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/MavenBuildTimestampTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/MavenBuildTimestampTest.java
new file mode 100644
index 00000000..8af32fc5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/MavenBuildTimestampTest.java
@@ -0,0 +1,38 @@
+package org.apache.maven.model.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Date;
+import java.util.Properties;
+
+import junit.framework.TestCase;
+
+public class MavenBuildTimestampTest
+ extends TestCase
+{
+ public void testMavenBuildTimestampUsesUTC()
+ {
+ Properties interpolationProperties = new Properties();
+ interpolationProperties.setProperty( "maven.build.timestamp.format", "yyyyMMdd'T'HHmm'Z'" );
+ MavenBuildTimestamp timestamp = new MavenBuildTimestamp( new Date(), interpolationProperties );
+ String formattedTimestamp = timestamp.formattedTimestamp();
+ assertTrue( "We expect the UTC marker at the end of the timestamp.", formattedTimestamp.endsWith( "Z" ) );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java
new file mode 100644
index 00000000..c4cae3d4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java
@@ -0,0 +1,505 @@
+package org.apache.maven.model.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.InputLocation;
+import org.apache.maven.model.InputSource;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.DefaultModelBuildingRequest;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.SimpleProblemCollector;
+
+import java.io.File;
+import java.util.*;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Future;
+import java.util.concurrent.FutureTask;
+
+/**
+ * @author jdcasey
+ * @author Benjamin Bentmann
+ */
+public class StringSearchModelInterpolatorTest
+ extends AbstractModelInterpolatorTest
+{
+
+ protected ModelInterpolator interpolator;
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ interpolator = lookup( ModelInterpolator.class );
+ }
+
+
+ protected ModelInterpolator createInterpolator( org.apache.maven.model.path.PathTranslator translator )
+ throws Exception
+ {
+ return this.interpolator;
+ }
+
+ protected ModelInterpolator createInterpolator()
+ throws Exception
+ {
+ return this.interpolator;
+ }
+
+ public void testInterpolateStringArray()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Properties p = new Properties();
+ p.setProperty( "key", "value" );
+ p.setProperty( "key2", "value2" );
+
+ String[] values = { "${key}", "${key2}" };
+
+ StringSearchModelInterpolator interpolator = (StringSearchModelInterpolator) createInterpolator();
+
+ ModelBuildingRequest config = createModelBuildingRequest(p);
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ interpolator.interpolateObject( values, model, new File( "." ), config, collector );
+ assertProblemFree( collector );
+
+ assertEquals( "value", values[0] );
+ assertEquals( "value2", values[1] );
+ }
+
+ private ModelBuildingRequest createModelBuildingRequest( Properties p )
+ {
+ ModelBuildingRequest config = new DefaultModelBuildingRequest();
+ config.setSystemProperties( p );
+ return config;
+ }
+
+ public void testInterpolateObjectWithStringArrayField()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Properties p = new Properties();
+ p.setProperty( "key", "value" );
+ p.setProperty( "key2", "value2" );
+
+ String[] values = { "${key}", "${key2}" };
+
+ ObjectWithStringArrayField obj = new ObjectWithStringArrayField( values );
+
+ StringSearchModelInterpolator interpolator = (StringSearchModelInterpolator) createInterpolator();
+
+ ModelBuildingRequest config = createModelBuildingRequest( p );
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ interpolator.interpolateObject( obj, model, new File( "." ), config, collector );
+ assertProblemFree( collector );
+
+ assertEquals( "value", obj.values[0] );
+ assertEquals( "value2", obj.values[1] );
+ }
+
+ public void testInterpolateObjectWithStringListField()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Properties p = new Properties();
+ p.setProperty( "key", "value" );
+ p.setProperty( "key2", "value2" );
+
+ List<String> values = new ArrayList<String>();
+ values.add( "${key}" );
+ values.add( "${key2}" );
+
+ ObjectWithListField obj = new ObjectWithListField( values );
+
+ StringSearchModelInterpolator interpolator = (StringSearchModelInterpolator) createInterpolator();
+
+ ModelBuildingRequest config = createModelBuildingRequest( p );
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ interpolator.interpolateObject( obj, model, new File( "." ), config, collector );
+ assertProblemFree( collector );
+
+ assertEquals( "value", obj.values.get( 0 ) );
+ assertEquals( "value2", obj.values.get( 1 ) );
+ }
+
+ public void testInterpolateObjectWithStringListFieldAndOneLiteralValue()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Properties p = new Properties();
+ p.setProperty( "key", "value" );
+ p.setProperty( "key2", "value2" );
+
+ List<String> values = new ArrayList<String>();
+ values.add( "key" );
+ values.add( "${key2}" );
+
+ ObjectWithListField obj = new ObjectWithListField( values );
+
+ StringSearchModelInterpolator interpolator = (StringSearchModelInterpolator) createInterpolator();
+
+ ModelBuildingRequest config = createModelBuildingRequest( p );
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ interpolator.interpolateObject( obj, model, new File( "." ), config, collector );
+ assertProblemFree( collector );
+
+ assertEquals( "key", obj.values.get( 0 ) );
+ assertEquals( "value2", obj.values.get( 1 ) );
+ }
+
+ public void testInterpolateObjectWithUnmodifiableStringListField()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Properties p = new Properties();
+ p.setProperty( "key", "value" );
+ p.setProperty( "key2", "value2" );
+
+ List<String> values = Collections.unmodifiableList( Collections.singletonList( "${key}" ) );
+
+ ObjectWithListField obj = new ObjectWithListField( values );
+
+ StringSearchModelInterpolator interpolator = (StringSearchModelInterpolator) createInterpolator();
+
+ ModelBuildingRequest config = createModelBuildingRequest( p );
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ interpolator.interpolateObject( obj, model, new File( "." ), config, collector );
+ assertProblemFree( collector );
+
+ assertEquals( "${key}", obj.values.get( 0 ) );
+ }
+
+ public void testInterpolateObjectWithStringArrayListField()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Properties p = new Properties();
+ p.setProperty( "key", "value" );
+ p.setProperty( "key2", "value2" );
+ p.setProperty( "key3", "value3" );
+ p.setProperty( "key4", "value4" );
+
+ List<String[]> values = new ArrayList<String[]>();
+ values.add( new String[] { "${key}", "${key2}" } );
+ values.add( new String[] { "${key3}", "${key4}" } );
+
+ ObjectWithListField obj = new ObjectWithListField( values );
+
+ StringSearchModelInterpolator interpolator = (StringSearchModelInterpolator) createInterpolator();
+
+ ModelBuildingRequest config = createModelBuildingRequest( p );
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ interpolator.interpolateObject( obj, model, new File( "." ), config, collector );
+ assertProblemFree( collector );
+
+ assertEquals( "value", ( (String[]) obj.values.get( 0 ) )[0] );
+ assertEquals( "value2", ( (String[]) obj.values.get( 0 ) )[1] );
+ assertEquals( "value3", ( (String[]) obj.values.get( 1 ) )[0] );
+ assertEquals( "value4", ( (String[]) obj.values.get( 1 ) )[1] );
+ }
+
+ public void testInterpolateObjectWithStringToStringMapField()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Properties p = new Properties();
+ p.setProperty( "key", "value" );
+ p.setProperty( "key2", "value2" );
+
+ Map<String, String> values = new HashMap<String, String>();
+ values.put( "key", "${key}" );
+ values.put( "key2", "${key2}" );
+
+ ObjectWithMapField obj = new ObjectWithMapField( values );
+
+ StringSearchModelInterpolator interpolator = (StringSearchModelInterpolator) createInterpolator();
+
+ ModelBuildingRequest config = createModelBuildingRequest( p );
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ interpolator.interpolateObject( obj, model, new File( "." ), config, collector );
+ assertProblemFree( collector );
+
+ assertEquals( "value", obj.values.get( "key" ) );
+ assertEquals( "value2", obj.values.get( "key2" ) );
+ }
+
+ public void testInterpolateObjectWithStringToStringMapFieldAndOneLiteralValue()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Properties p = new Properties();
+ p.setProperty( "key", "value" );
+ p.setProperty( "key2", "value2" );
+
+ Map<String, String> values = new HashMap<String, String>();
+ values.put( "key", "val" );
+ values.put( "key2", "${key2}" );
+
+ ObjectWithMapField obj = new ObjectWithMapField( values );
+
+ StringSearchModelInterpolator interpolator = (StringSearchModelInterpolator) createInterpolator();
+
+ ModelBuildingRequest config = createModelBuildingRequest( p );
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ interpolator.interpolateObject( obj, model, new File( "." ), config, collector );
+ assertProblemFree( collector );
+
+ assertEquals( "val", obj.values.get( "key" ) );
+ assertEquals( "value2", obj.values.get( "key2" ) );
+ }
+
+ public void testInterpolateObjectWithUnmodifiableStringToStringMapField()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Properties p = new Properties();
+ p.setProperty( "key", "value" );
+ p.setProperty( "key2", "value2" );
+
+ Map<String, String> values = Collections.unmodifiableMap( Collections.singletonMap( "key", "${key}" ) );
+
+ ObjectWithMapField obj = new ObjectWithMapField( values );
+
+ StringSearchModelInterpolator interpolator = (StringSearchModelInterpolator) createInterpolator();
+
+ ModelBuildingRequest config = createModelBuildingRequest( p );
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ interpolator.interpolateObject( obj, model, new File( "." ), config, collector );
+ assertProblemFree( collector );
+
+ assertEquals( "${key}", obj.values.get( "key" ) );
+ }
+
+ public void testInterpolateObjectWithStringToStringArrayMapField()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Properties p = new Properties();
+ p.setProperty( "key", "value" );
+ p.setProperty( "key2", "value2" );
+ p.setProperty( "key3", "value3" );
+ p.setProperty( "key4", "value4" );
+
+ Map<String, String[]> values = new HashMap<String, String[]>();
+ values.put( "key", new String[] { "${key}", "${key2}" } );
+ values.put( "key2", new String[] { "${key3}", "${key4}" } );
+
+ ObjectWithMapField obj = new ObjectWithMapField( values );
+
+ StringSearchModelInterpolator interpolator = (StringSearchModelInterpolator) createInterpolator();
+
+ ModelBuildingRequest config = createModelBuildingRequest( p );
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ interpolator.interpolateObject( obj, model, new File( "." ), config, collector );
+ assertProblemFree( collector );
+
+ assertEquals( "value", ( (String[]) obj.values.get( "key" ) )[0] );
+ assertEquals( "value2", ( (String[]) obj.values.get( "key" ) )[1] );
+ assertEquals( "value3", ( (String[]) obj.values.get( "key2" ) )[0] );
+ assertEquals( "value4", ( (String[]) obj.values.get( "key2" ) )[1] );
+ }
+
+
+ public void testConcurrentInterpolation()
+ throws Exception
+ {
+ final Model model = new Model();
+
+ final Properties p = new Properties();
+ p.setProperty( "key", "value" );
+ p.setProperty( "key2", "value2" );
+ p.setProperty( "key3", "value3" );
+ p.setProperty( "key4", "value4" );
+ p.setProperty( "key5", "value5" );
+
+ final StringSearchModelInterpolator interpolator = (StringSearchModelInterpolator) createInterpolator();
+
+
+ int numItems = 100;
+ final CountDownLatch countDownLatch = new CountDownLatch(1);
+
+ List<Future<SimpleProblemCollector>> futures = new ArrayList<Future<SimpleProblemCollector>>();
+ for ( int i = 0; i < numItems; i++ )
+ {
+ Callable<SimpleProblemCollector> future = new Callable<SimpleProblemCollector>()
+ {
+ public SimpleProblemCollector call()
+ throws Exception
+ {
+ final ObjectWithMixedProtection obj = getValueList();
+ final ModelBuildingRequest config = createModelBuildingRequest( p );
+
+ countDownLatch.await();
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ interpolator.interpolateObject( obj, model, new File( "." ), config, collector );
+ return collector;
+ }
+ };
+ FutureTask<SimpleProblemCollector> task = new FutureTask<SimpleProblemCollector>( future );
+ futures.add( task );
+ new Thread( task ).start();
+ }
+ countDownLatch.countDown(); // Start all the threads
+ for ( Future<SimpleProblemCollector> result : futures )
+ {
+ SimpleProblemCollector problemCollector = result.get(); // ArrayIndexOutOfBoundsException are typical indication of threading issues
+ assertProblemFree( problemCollector );
+ }
+ }
+
+ private ObjectWithMixedProtection getValueList()
+ {
+ List<String[]> values = new ArrayList<String[]>();
+
+ values.add( new String[] { "${key}", "${key2}" } );
+ values.add( new String[] { "${key3}", "${key4}" } );
+ List<String> values2 = new ArrayList<String>();
+ values.add( new String[] { "${key}", "${key2}" } );
+ values.add( new String[] { "${key3}", "${key4}" } );
+ List<String> values3 = new ArrayList<String>();
+ values.add( new String[] { "${key}", "${key2}" } );
+ values.add( new String[] { "${key3}", "${key4}" } );
+
+ return new ObjectWithMixedProtection( values, values2, values3, "${key5}" );
+ }
+
+
+ private static final class ObjectWithStringArrayField
+ {
+ private final String[] values;
+
+ public ObjectWithStringArrayField( String[] values )
+ {
+ this.values = values;
+ }
+ }
+
+ private static final class ObjectWithListField
+ {
+ private final List<?> values;
+
+ public ObjectWithListField( List<?> values )
+ {
+ this.values = values;
+ }
+ }
+
+ private static final class ObjectWithMapField
+ {
+ private final Map<?, ?> values;
+
+ public ObjectWithMapField( Map<?, ?> values )
+ {
+ this.values = values;
+ }
+ }
+
+ @SuppressWarnings( "unused" )
+ private static final class ObjectWithMixedProtection
+ {
+ private List<?> values1;
+ protected List<?> values2;
+ List<?> values3;
+ private String fooBar;
+
+ private ObjectWithMixedProtection( List<?> values1, List<?> values2, List<?> values3 )
+ {
+ this.values1 = values1;
+ this.values2 = values2;
+ this.values3 = values3;
+ }
+
+ private ObjectWithMixedProtection( List<?> values1, List<?> values2, List<?> values3, String fooBar )
+ {
+ this.values1 = values1;
+ this.values2 = values2;
+ this.values3 = values3;
+ this.fooBar = fooBar;
+ }
+
+ public String getFooBar()
+ {
+ return fooBar;
+ }
+ }
+
+ public void testFinalFieldsExcludedFromInterpolation()
+ {
+ Properties props = new Properties();
+ props.setProperty( "expression", "value" );
+ DefaultModelBuildingRequest request = new DefaultModelBuildingRequest();
+ request.setUserProperties( props );
+
+ SimpleProblemCollector problems = new SimpleProblemCollector();
+ StringSearchModelInterpolator interpolator = new StringSearchModelInterpolator();
+ interpolator.interpolateObject( new ClassWithFinalField(), new Model(), null, request, problems );
+
+ assertProblemFree( problems );
+ }
+
+ static class ClassWithFinalField
+ {
+ public static final String CONSTANT = "${expression}";
+ }
+
+ public void testLocationTrackerShouldBeExcludedFromInterpolation()
+ {
+ Properties props = new Properties();
+ props.setProperty( "expression", "value" );
+ DefaultModelBuildingRequest request = new DefaultModelBuildingRequest();
+ request.setUserProperties( props );
+
+ InputSource source = new InputSource();
+ source.setLocation( "${expression}" );
+ source.setModelId( "${expression}" );
+ Model model = new Model();
+ model.setLocation( "", new InputLocation( 1, 1, source ) );
+
+ SimpleProblemCollector problems = new SimpleProblemCollector();
+ StringSearchModelInterpolator interpolator = new StringSearchModelInterpolator();
+ interpolator.interpolateObject( model, model, null, request, problems );
+
+ assertProblemFree( problems );
+ assertEquals( "${expression}", source.getLocation() );
+ assertEquals( "${expression}", source.getModelId() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/path/DefaultUrlNormalizerTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/path/DefaultUrlNormalizerTest.java
new file mode 100644
index 00000000..88fdc9cf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/path/DefaultUrlNormalizerTest.java
@@ -0,0 +1,85 @@
+package org.apache.maven.model.path;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class DefaultUrlNormalizerTest
+ extends TestCase
+{
+
+ private UrlNormalizer normalizer;
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ normalizer = new DefaultUrlNormalizer();
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ normalizer = null;
+
+ super.tearDown();
+ }
+
+ private String normalize( String url )
+ {
+ return normalizer.normalize( url );
+ }
+
+ public void testNullSafe()
+ {
+ assertNull( normalize( null ) );
+ }
+
+ public void testTrailingSlash()
+ {
+ assertEquals( "", normalize( "" ) );
+ assertEquals( "http://server.org/dir", normalize( "http://server.org/dir" ) );
+ assertEquals( "http://server.org/dir/", normalize( "http://server.org/dir/" ) );
+ }
+
+ public void testRemovalOfParentRefs()
+ {
+ assertEquals( "http://server.org/child", normalize( "http://server.org/parent/../child" ) );
+ assertEquals( "http://server.org/child", normalize( "http://server.org/grand/parent/../../child" ) );
+
+ assertEquals( "http://server.org//child", normalize( "http://server.org/parent/..//child" ) );
+ assertEquals( "http://server.org/child", normalize( "http://server.org/parent//../child" ) );
+ }
+
+ public void testPreservationOfDoubleSlashes()
+ {
+ assertEquals( "scm:hg:ssh://localhost//home/user", normalize( "scm:hg:ssh://localhost//home/user" ) );
+ assertEquals( "file:////UNC/server", normalize( "file:////UNC/server" ) );
+ assertEquals( "[fetch=]http://server.org/[push=]ssh://server.org/",
+ normalize( "[fetch=]http://server.org/[push=]ssh://server.org/" ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/AbstractProfileActivatorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/AbstractProfileActivatorTest.java
new file mode 100644
index 00000000..0ec3b326
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/AbstractProfileActivatorTest.java
@@ -0,0 +1,92 @@
+package org.apache.maven.model.profile.activation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Properties;
+
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.building.SimpleProblemCollector;
+import org.apache.maven.model.profile.DefaultProfileActivationContext;
+import org.apache.maven.model.profile.ProfileActivationContext;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.component.annotations.Component;
+
+/**
+ * Provides common services to test {@link ProfileActivator} implementations.
+ *
+ * @author Benjamin Bentmann
+ */
+public abstract class AbstractProfileActivatorTest<T extends ProfileActivator>
+ extends PlexusTestCase
+{
+
+ private Class<T> activatorClass;
+
+ private String roleHint;
+
+ protected T activator;
+
+ public AbstractProfileActivatorTest( Class<T> activatorClass )
+ {
+ if ( activatorClass == null )
+ {
+ throw new IllegalArgumentException( "class of profile activator to test is not specified" );
+ }
+
+ this.activatorClass = activatorClass;
+
+ roleHint = activatorClass.getAnnotation( Component.class ).hint();
+ }
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ activator = activatorClass.cast( lookup( ProfileActivator.class, roleHint ) );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ activator = null;
+
+ super.tearDown();
+ }
+
+ protected ProfileActivationContext newContext( final Properties userProperties, final Properties systemProperties )
+ {
+ DefaultProfileActivationContext context = new DefaultProfileActivationContext();
+ return context.setUserProperties( userProperties ).setSystemProperties( systemProperties );
+ }
+
+ protected void assertActivation( boolean active, Profile profile, ProfileActivationContext context )
+ {
+ SimpleProblemCollector problems = new SimpleProblemCollector();
+
+ assertEquals( active, activator.isActive( profile, context, problems ) );
+
+ assertEquals( problems.getErrors().toString(), 0, problems.getErrors().size() );
+ assertEquals( problems.getWarnings().toString(), 0, problems.getWarnings().size() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivatorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivatorTest.java
new file mode 100644
index 00000000..440f120b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivatorTest.java
@@ -0,0 +1,185 @@
+package org.apache.maven.model.profile.activation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Properties;
+
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.Profile;
+
+/**
+ * Tests {@link JdkVersionProfileActivator}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class JdkVersionProfileActivatorTest
+ extends AbstractProfileActivatorTest<JdkVersionProfileActivator>
+{
+
+ public JdkVersionProfileActivatorTest()
+ {
+ super( JdkVersionProfileActivator.class );
+ }
+
+ private Profile newProfile( String jdkVersion )
+ {
+ Activation a = new Activation();
+ a.setJdk( jdkVersion );
+
+ Profile p = new Profile();
+ p.setActivation( a );
+
+ return p;
+ }
+
+ private Properties newProperties( String javaVersion )
+ {
+ Properties props = new Properties();
+ props.setProperty( "java.version", javaVersion );
+ return props;
+ }
+
+ public void testNullSafe()
+ throws Exception
+ {
+ Profile p = new Profile();
+
+ assertActivation( false, p, newContext( null, null ) );
+
+ p.setActivation( new Activation() );
+
+ assertActivation( false, p, newContext( null, null ) );
+ }
+
+ public void testPrefix()
+ throws Exception
+ {
+ Profile profile = newProfile( "1.4" );
+
+ assertActivation( true, profile, newContext( null, newProperties( "1.4" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.4.2" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.4.2_09" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.4.2_09-b03" ) ) );
+
+ assertActivation( false, profile, newContext( null, newProperties( "1.3" ) ) );
+
+ assertActivation( false, profile, newContext( null, newProperties( "1.5" ) ) );
+ }
+
+ public void testPrefixNegated()
+ throws Exception
+ {
+ Profile profile = newProfile( "!1.4" );
+
+ assertActivation( false, profile, newContext( null, newProperties( "1.4" ) ) );
+ assertActivation( false, profile, newContext( null, newProperties( "1.4.2" ) ) );
+ assertActivation( false, profile, newContext( null, newProperties( "1.4.2_09" ) ) );
+ assertActivation( false, profile, newContext( null, newProperties( "1.4.2_09-b03" ) ) );
+
+ assertActivation( true, profile, newContext( null, newProperties( "1.3" ) ) );
+
+ assertActivation( true, profile, newContext( null, newProperties( "1.5" ) ) );
+ }
+
+ public void testVersionRangeInclusiveBounds()
+ throws Exception
+ {
+ Profile profile = newProfile( "[1.5,1.6]" );
+
+ assertActivation( false, profile, newContext( null, newProperties( "1.4" ) ) );
+ assertActivation( false, profile, newContext( null, newProperties( "1.4.2" ) ) );
+ assertActivation( false, profile, newContext( null, newProperties( "1.4.2_09" ) ) );
+ assertActivation( false, profile, newContext( null, newProperties( "1.4.2_09-b03" ) ) );
+
+ assertActivation( true, profile, newContext( null, newProperties( "1.5" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.5.0" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.5.0_09" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.5.0_09-b03" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.5.1" ) ) );
+
+ assertActivation( true, profile, newContext( null, newProperties( "1.6" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.6.0" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.6.0_09" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.6.0_09-b03" ) ) );
+ }
+
+ public void testVersionRangeExclusiveBounds()
+ throws Exception
+ {
+ Profile profile = newProfile( "(1.3,1.6)" );
+
+ assertActivation( false, profile, newContext( null, newProperties( "1.3" ) ) );
+ assertActivation( false, profile, newContext( null, newProperties( "1.3.0" ) ) );
+ assertActivation( false, profile, newContext( null, newProperties( "1.3.0_09" ) ) );
+ assertActivation( false, profile, newContext( null, newProperties( "1.3.0_09-b03" ) ) );
+
+ assertActivation( true, profile, newContext( null, newProperties( "1.3.1" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.3.1_09" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.3.1_09-b03" ) ) );
+
+ assertActivation( true, profile, newContext( null, newProperties( "1.5" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.5.0" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.5.0_09" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.5.0_09-b03" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.5.1" ) ) );
+
+ assertActivation( false, profile, newContext( null, newProperties( "1.6" ) ) );
+ }
+
+ public void testVersionRangeInclusiveLowerBound()
+ throws Exception
+ {
+ Profile profile = newProfile( "[1.5,)" );
+
+ assertActivation( false, profile, newContext( null, newProperties( "1.4" ) ) );
+ assertActivation( false, profile, newContext( null, newProperties( "1.4.2" ) ) );
+ assertActivation( false, profile, newContext( null, newProperties( "1.4.2_09" ) ) );
+ assertActivation( false, profile, newContext( null, newProperties( "1.4.2_09-b03" ) ) );
+
+ assertActivation( true, profile, newContext( null, newProperties( "1.5" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.5.0" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.5.0_09" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.5.0_09-b03" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.5.1" ) ) );
+
+ assertActivation( true, profile, newContext( null, newProperties( "1.6" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.6.0" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.6.0_09" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.6.0_09-b03" ) ) );
+ }
+
+ public void testVersionRangeExclusiveUpperBound()
+ throws Exception
+ {
+ Profile profile = newProfile( "(,1.6)" );
+
+ assertActivation( true, profile, newContext( null, newProperties( "1.5" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.5.0" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.5.0_09" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.5.0_09-b03" ) ) );
+ assertActivation( true, profile, newContext( null, newProperties( "1.5.1" ) ) );
+
+ assertActivation( false, profile, newContext( null, newProperties( "1.6" ) ) );
+ assertActivation( false, profile, newContext( null, newProperties( "1.6.0" ) ) );
+ assertActivation( false, profile, newContext( null, newProperties( "1.6.0_09" ) ) );
+ assertActivation( false, profile, newContext( null, newProperties( "1.6.0_09-b03" ) ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/PropertyProfileActivatorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/PropertyProfileActivatorTest.java
new file mode 100644
index 00000000..73ab967e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/PropertyProfileActivatorTest.java
@@ -0,0 +1,185 @@
+package org.apache.maven.model.profile.activation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Properties;
+
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.ActivationProperty;
+import org.apache.maven.model.Profile;
+
+/**
+ * Tests {@link PropertyProfileActivator}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class PropertyProfileActivatorTest
+ extends AbstractProfileActivatorTest<PropertyProfileActivator>
+{
+
+ public PropertyProfileActivatorTest()
+ {
+ super( PropertyProfileActivator.class );
+ }
+
+ private Profile newProfile( String key, String value )
+ {
+ ActivationProperty ap = new ActivationProperty();
+ ap.setName( key );
+ ap.setValue( value );
+
+ Activation a = new Activation();
+ a.setProperty( ap );
+
+ Profile p = new Profile();
+ p.setActivation( a );
+
+ return p;
+ }
+
+ private Properties newProperties( String key, String value )
+ {
+ Properties props = new Properties();
+ props.setProperty( key, value );
+ return props;
+ }
+
+ public void testNullSafe()
+ throws Exception
+ {
+ Profile p = new Profile();
+
+ assertActivation( false, p, newContext( null, null ) );
+
+ p.setActivation( new Activation() );
+
+ assertActivation( false, p, newContext( null, null ) );
+ }
+
+ public void testWithNameOnly_UserProperty()
+ throws Exception
+ {
+ Profile profile = newProfile( "prop", null );
+
+ assertActivation( true, profile, newContext( newProperties( "prop", "value" ), null ) );
+
+ assertActivation( false, profile, newContext( newProperties( "prop", "" ), null ) );
+
+ assertActivation( false, profile, newContext( newProperties( "other", "value" ), null ) );
+ }
+
+ public void testWithNameOnly_SystemProperty()
+ throws Exception
+ {
+ Profile profile = newProfile( "prop", null );
+
+ assertActivation( true, profile, newContext( null, newProperties( "prop", "value" ) ) );
+
+ assertActivation( false, profile, newContext( null, newProperties( "prop", "" ) ) );
+
+ assertActivation( false, profile, newContext( null, newProperties( "other", "value" ) ) );
+ }
+
+ public void testWithNegatedNameOnly_UserProperty()
+ throws Exception
+ {
+ Profile profile = newProfile( "!prop", null );
+
+ assertActivation( false, profile, newContext( newProperties( "prop", "value" ), null ) );
+
+ assertActivation( true, profile, newContext( newProperties( "prop", "" ), null ) );
+
+ assertActivation( true, profile, newContext( newProperties( "other", "value" ), null ) );
+ }
+
+ public void testWithNegatedNameOnly_SystemProperty()
+ throws Exception
+ {
+ Profile profile = newProfile( "!prop", null );
+
+ assertActivation( false, profile, newContext( null, newProperties( "prop", "value" ) ) );
+
+ assertActivation( true, profile, newContext( null, newProperties( "prop", "" ) ) );
+
+ assertActivation( true, profile, newContext( null, newProperties( "other", "value" ) ) );
+ }
+
+ public void testWithValue_UserProperty()
+ throws Exception
+ {
+ Profile profile = newProfile( "prop", "value" );
+
+ assertActivation( true, profile, newContext( newProperties( "prop", "value" ), null ) );
+
+ assertActivation( false, profile, newContext( newProperties( "prop", "other" ), null ) );
+
+ assertActivation( false, profile, newContext( newProperties( "prop", "" ), null ) );
+ }
+
+ public void testWithValue_SystemProperty()
+ throws Exception
+ {
+ Profile profile = newProfile( "prop", "value" );
+
+ assertActivation( true, profile, newContext( null, newProperties( "prop", "value" ) ) );
+
+ assertActivation( false, profile, newContext( null, newProperties( "prop", "other" ) ) );
+
+ assertActivation( false, profile, newContext( null, newProperties( "other", "" ) ) );
+ }
+
+ public void testWithNegatedValue_UserProperty()
+ throws Exception
+ {
+ Profile profile = newProfile( "prop", "!value" );
+
+ assertActivation( false, profile, newContext( newProperties( "prop", "value" ), null ) );
+
+ assertActivation( true, profile, newContext( newProperties( "prop", "other" ), null ) );
+
+ assertActivation( true, profile, newContext( newProperties( "prop", "" ), null ) );
+ }
+
+ public void testWithNegatedValue_SystemProperty()
+ throws Exception
+ {
+ Profile profile = newProfile( "prop", "!value" );
+
+ assertActivation( false, profile, newContext( null, newProperties( "prop", "value" ) ) );
+
+ assertActivation( true, profile, newContext( null, newProperties( "prop", "other" ) ) );
+
+ assertActivation( true, profile, newContext( null, newProperties( "other", "" ) ) );
+ }
+
+ public void testWithValue_UserPropertyDominantOverSystemProperty()
+ throws Exception
+ {
+ Profile profile = newProfile( "prop", "value" );
+
+ Properties props1 = newProperties( "prop", "value" );
+ Properties props2 = newProperties( "prop", "other" );
+
+ assertActivation( true, profile, newContext( props1, props2 ) );
+
+ assertActivation( false, profile, newContext( props2, props1 ) );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java
new file mode 100644
index 00000000..dde532d8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java
@@ -0,0 +1,630 @@
+package org.apache.maven.model.validation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.InputStream;
+import java.util.List;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.DefaultModelBuildingRequest;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.SimpleProblemCollector;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.codehaus.plexus.PlexusTestCase;
+
+/**
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
+ */
+public class DefaultModelValidatorTest
+ extends PlexusTestCase
+{
+
+ private ModelValidator validator;
+
+ private Model read( String pom )
+ throws Exception
+ {
+ String resource = "/poms/validation/" + pom;
+ InputStream is = getClass().getResourceAsStream( resource );
+ assertNotNull( "missing resource: " + resource, is );
+ return new MavenXpp3Reader().read( is );
+ }
+
+ private SimpleProblemCollector validate( String pom )
+ throws Exception
+ {
+ return validateEffective( pom, ModelBuildingRequest.VALIDATION_LEVEL_STRICT );
+ }
+
+ private SimpleProblemCollector validateRaw( String pom )
+ throws Exception
+ {
+ return validateRaw( pom, ModelBuildingRequest.VALIDATION_LEVEL_STRICT );
+ }
+
+ private SimpleProblemCollector validateEffective( String pom, int level )
+ throws Exception
+ {
+ ModelBuildingRequest request = new DefaultModelBuildingRequest().setValidationLevel( level );
+
+ SimpleProblemCollector problems = new SimpleProblemCollector( read( pom ) );
+
+ validator.validateEffectiveModel( problems.getModel(), request, problems );
+
+ return problems;
+ }
+
+ private SimpleProblemCollector validateRaw( String pom, int level )
+ throws Exception
+ {
+ ModelBuildingRequest request = new DefaultModelBuildingRequest().setValidationLevel( level );
+
+ SimpleProblemCollector problems = new SimpleProblemCollector( read( pom ) );
+
+ validator.validateRawModel( problems.getModel(), request, problems );
+
+ return problems;
+ }
+
+ private void assertContains( String msg, String substring )
+ {
+ assertTrue( "\"" + substring + "\" was not found in: " + msg, msg.contains( substring ) );
+ }
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ validator = lookup( ModelValidator.class );
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ this.validator = null;
+
+ super.tearDown();
+ }
+
+ private void assertViolations( SimpleProblemCollector result, int fatals, int errors, int warnings )
+ {
+ assertEquals( String.valueOf( result.getFatals() ), fatals, result.getFatals().size() );
+ assertEquals( String.valueOf( result.getErrors() ), errors, result.getErrors().size() );
+ assertEquals( String.valueOf( result.getWarnings() ), warnings, result.getWarnings().size() );
+ }
+
+ public void testMissingModelVersion()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-modelVersion-pom.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertEquals( "'modelVersion' is missing.", result.getErrors().get( 0 ) );
+ }
+
+ public void testBadModelVersion()
+ throws Exception
+ {
+ SimpleProblemCollector result =
+ validateRaw( "bad-modelVersion.xml", ModelBuildingRequest.VALIDATION_LEVEL_STRICT );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertTrue( result.getErrors().get( 0 ).contains( "modelVersion" ) );
+ }
+
+ public void testMissingArtifactId()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-artifactId-pom.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertEquals( "'artifactId' is missing.", result.getErrors().get( 0 ) );
+ }
+
+ public void testMissingGroupId()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-groupId-pom.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertEquals( "'groupId' is missing.", result.getErrors().get( 0 ) );
+ }
+
+ public void testInvalidIds()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "invalid-ids-pom.xml" );
+
+ assertViolations( result, 0, 2, 0 );
+
+ assertEquals( "'groupId' with value 'o/a/m' does not match a valid id pattern.", result.getErrors().get( 0 ) );
+
+ assertEquals( "'artifactId' with value 'm$-do$' does not match a valid id pattern.", result.getErrors().get( 1 ) );
+ }
+
+ public void testMissingType()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-type-pom.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertEquals( "'packaging' is missing.", result.getErrors().get( 0 ) );
+ }
+
+ public void testMissingVersion()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-version-pom.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertEquals( "'version' is missing.", result.getErrors().get( 0 ) );
+ }
+
+ public void testInvalidAggregatorPackaging()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "invalid-aggregator-packaging-pom.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertTrue( result.getErrors().get( 0 ).contains( "Aggregator projects require 'pom' as packaging." ) );
+ }
+
+ public void testMissingDependencyArtifactId()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-dependency-artifactId-pom.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertTrue( result.getErrors().get( 0 ).contains(
+ "'dependencies.dependency.artifactId' for groupId:null:jar is missing" ) );
+ }
+
+ public void testMissingDependencyGroupId()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-dependency-groupId-pom.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertTrue( result.getErrors().get( 0 ).contains(
+ "'dependencies.dependency.groupId' for null:artifactId:jar is missing" ) );
+ }
+
+ public void testMissingDependencyVersion()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-dependency-version-pom.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertTrue( result.getErrors().get( 0 ).contains(
+ "'dependencies.dependency.version' for groupId:artifactId:jar is missing" ) );
+ }
+
+ public void testMissingDependencyManagementArtifactId()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-dependency-mgmt-artifactId-pom.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertTrue( result.getErrors().get( 0 ).contains(
+ "'dependencyManagement.dependencies.dependency.artifactId' for groupId:null:jar is missing" ) );
+ }
+
+ public void testMissingDependencyManagementGroupId()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-dependency-mgmt-groupId-pom.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertTrue( result.getErrors().get( 0 ).contains(
+ "'dependencyManagement.dependencies.dependency.groupId' for null:artifactId:jar is missing" ) );
+ }
+
+ public void testMissingAll()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-1-pom.xml" );
+
+ assertViolations( result, 0, 4, 0 );
+
+ List<String> messages = result.getErrors();
+
+ assertTrue( messages.contains( "\'modelVersion\' is missing." ) );
+ assertTrue( messages.contains( "\'groupId\' is missing." ) );
+ assertTrue( messages.contains( "\'artifactId\' is missing." ) );
+ assertTrue( messages.contains( "\'version\' is missing." ) );
+ // type is inherited from the super pom
+ }
+
+ public void testMissingPluginArtifactId()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-plugin-artifactId-pom.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertEquals( "'build.plugins.plugin.artifactId' is missing.", result.getErrors().get( 0 ) );
+ }
+
+ public void testEmptyPluginVersion()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "empty-plugin-version.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertEquals( "'build.plugins.plugin.version' for org.apache.maven.plugins:maven-it-plugin"
+ + " must be a valid version but is ''.", result.getErrors().get( 0 ) );
+ }
+
+ public void testMissingRepositoryId()
+ throws Exception
+ {
+ SimpleProblemCollector result =
+ validateRaw( "missing-repository-id-pom.xml", ModelBuildingRequest.VALIDATION_LEVEL_STRICT );
+
+ assertViolations( result, 0, 4, 0 );
+
+ assertEquals( "'repositories.repository.id' is missing.", result.getErrors().get( 0 ) );
+
+ assertEquals( "'repositories.repository[null].url' is missing.", result.getErrors().get( 1 ) );
+
+ assertEquals( "'pluginRepositories.pluginRepository.id' is missing.", result.getErrors().get( 2 ) );
+
+ assertEquals( "'pluginRepositories.pluginRepository[null].url' is missing.", result.getErrors().get( 3 ) );
+ }
+
+ public void testMissingResourceDirectory()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-resource-directory-pom.xml" );
+
+ assertViolations( result, 0, 2, 0 );
+
+ assertEquals( "'build.resources.resource.directory' is missing.", result.getErrors().get( 0 ) );
+
+ assertEquals( "'build.testResources.testResource.directory' is missing.", result.getErrors().get( 1 ) );
+ }
+
+ public void testBadPluginDependencyScope()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "bad-plugin-dependency-scope.xml" );
+
+ assertViolations( result, 0, 3, 0 );
+
+ assertTrue( result.getErrors().get( 0 ).contains( "test:d" ) );
+
+ assertTrue( result.getErrors().get( 1 ).contains( "test:e" ) );
+
+ assertTrue( result.getErrors().get( 2 ).contains( "test:f" ) );
+ }
+
+ public void testBadDependencyScope()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "bad-dependency-scope.xml" );
+
+ assertViolations( result, 0, 0, 2 );
+
+ assertTrue( result.getWarnings().get( 0 ).contains( "test:f" ) );
+
+ assertTrue( result.getWarnings().get( 1 ).contains( "test:g" ) );
+ }
+
+ public void testBadDependencyVersion()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "bad-dependency-version.xml" );
+
+ assertViolations( result, 0, 2, 0 );
+
+ assertContains( result.getErrors().get( 0 ),
+ "'dependencies.dependency.version' for test:b:jar must be a valid version" );
+ assertContains( result.getErrors().get( 1 ),
+ "'dependencies.dependency.version' for test:c:jar must not contain any of these characters" );
+ }
+
+ public void testDuplicateModule()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "duplicate-module.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertTrue( result.getErrors().get( 0 ).contains( "child" ) );
+ }
+
+ public void testDuplicateProfileId()
+ throws Exception
+ {
+ SimpleProblemCollector result = validateRaw( "duplicate-profile-id.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertTrue( result.getErrors().get( 0 ).contains( "non-unique-id" ) );
+ }
+
+ public void testBadPluginVersion()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "bad-plugin-version.xml" );
+
+ assertViolations( result, 0, 4, 0 );
+
+ assertContains( result.getErrors().get( 0 ),
+ "'build.plugins.plugin.version' for test:mip must be a valid version" );
+ assertContains( result.getErrors().get( 1 ),
+ "'build.plugins.plugin.version' for test:rmv must be a valid version" );
+ assertContains( result.getErrors().get( 2 ),
+ "'build.plugins.plugin.version' for test:lmv must be a valid version" );
+ assertContains( result.getErrors().get( 3 ),
+ "'build.plugins.plugin.version' for test:ifsc must not contain any of these characters" );
+ }
+
+ public void testDistributionManagementStatus()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "distribution-management-status.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertTrue( result.getErrors().get( 0 ).contains( "distributionManagement.status" ) );
+ }
+
+ public void testIncompleteParent()
+ throws Exception
+ {
+ SimpleProblemCollector result = validateRaw( "incomplete-parent.xml" );
+
+ assertViolations( result, 3, 0, 0 );
+
+ assertTrue( result.getFatals().get( 0 ).contains( "parent.groupId" ) );
+ assertTrue( result.getFatals().get( 1 ).contains( "parent.artifactId" ) );
+ assertTrue( result.getFatals().get( 2 ).contains( "parent.version" ) );
+ }
+
+ public void testHardCodedSystemPath()
+ throws Exception
+ {
+ SimpleProblemCollector result = validateRaw( "hard-coded-system-path.xml" );
+
+ assertViolations( result, 0, 0, 1 );
+
+ assertTrue( result.getWarnings().get( 0 ).contains( "test:a:jar" ) );
+ }
+
+ public void testEmptyModule()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "empty-module.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertTrue( result.getErrors().get( 0 ).contains( "'modules.module[0]' has been specified without a path" ) );
+ }
+
+ public void testDuplicatePlugin()
+ throws Exception
+ {
+ SimpleProblemCollector result = validateRaw( "duplicate-plugin.xml" );
+
+ assertViolations( result, 0, 0, 4 );
+
+ assertTrue( result.getWarnings().get( 0 ).contains( "duplicate declaration of plugin test:duplicate" ) );
+ assertTrue( result.getWarnings().get( 1 ).contains( "duplicate declaration of plugin test:managed-duplicate" ) );
+ assertTrue( result.getWarnings().get( 2 ).contains( "duplicate declaration of plugin profile:duplicate" ) );
+ assertTrue( result.getWarnings().get( 3 ).contains( "duplicate declaration of plugin profile:managed-duplicate" ) );
+ }
+
+ public void testDuplicatePluginExecution()
+ throws Exception
+ {
+ SimpleProblemCollector result = validateRaw( "duplicate-plugin-execution.xml" );
+
+ assertViolations( result, 0, 4, 0 );
+
+ assertContains( result.getErrors().get( 0 ), "duplicate execution with id a" );
+ assertContains( result.getErrors().get( 1 ), "duplicate execution with id default" );
+ assertContains( result.getErrors().get( 2 ), "duplicate execution with id c" );
+ assertContains( result.getErrors().get( 3 ), "duplicate execution with id b" );
+ }
+
+ public void testReservedRepositoryId()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "reserved-repository-id.xml" );
+
+ assertViolations( result, 0, 0, 4 );
+
+ assertContains( result.getWarnings().get( 0 ), "'repositories.repository.id'" + " must not be 'local'" );
+ assertContains( result.getWarnings().get( 1 ), "'pluginRepositories.pluginRepository.id' must not be 'local'" );
+ assertContains( result.getWarnings().get( 2 ), "'distributionManagement.repository.id' must not be 'local'" );
+ assertContains( result.getWarnings().get( 3 ),
+ "'distributionManagement.snapshotRepository.id' must not be 'local'" );
+ }
+
+ public void testMissingPluginDependencyGroupId()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-plugin-dependency-groupId.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertTrue( result.getErrors().get( 0 ).contains( ":a:" ) );
+ }
+
+ public void testMissingPluginDependencyArtifactId()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-plugin-dependency-artifactId.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertTrue( result.getErrors().get( 0 ).contains( "test:" ) );
+ }
+
+ public void testMissingPluginDependencyVersion()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-plugin-dependency-version.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertTrue( result.getErrors().get( 0 ).contains( "test:a" ) );
+ }
+
+ public void testBadPluginDependencyVersion()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "bad-plugin-dependency-version.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertTrue( result.getErrors().get( 0 ).contains( "test:b" ) );
+ }
+
+ public void testBadVersion()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "bad-version.xml" );
+
+ assertViolations( result, 0, 0, 1 );
+
+ assertContains( result.getWarnings().get( 0 ), "'version' must not contain any of these characters" );
+ }
+
+ public void testBadSnapshotVersion()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "bad-snapshot-version.xml" );
+
+ assertViolations( result, 0, 0, 1 );
+
+ assertContains( result.getWarnings().get( 0 ), "'version' uses an unsupported snapshot version format" );
+ }
+
+ public void testBadRepositoryId()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "bad-repository-id.xml" );
+
+ assertViolations( result, 0, 0, 4 );
+
+ assertContains( result.getWarnings().get( 0 ),
+ "'repositories.repository.id' must not contain any of these characters" );
+ assertContains( result.getWarnings().get( 1 ),
+ "'pluginRepositories.pluginRepository.id' must not contain any of these characters" );
+ assertContains( result.getWarnings().get( 2 ),
+ "'distributionManagement.repository.id' must not contain any of these characters" );
+ assertContains( result.getWarnings().get( 3 ),
+ "'distributionManagement.snapshotRepository.id' must not contain any of these characters" );
+ }
+
+ public void testBadDependencyExclusionId()
+ throws Exception
+ {
+ SimpleProblemCollector result = validateEffective( "bad-dependency-exclusion-id.xml", ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 );
+
+ assertViolations( result, 0, 0, 2 );
+
+ assertContains( result.getWarnings().get( 0 ),
+ "'dependencies.dependency.exclusions.exclusion.groupId' for gid:aid:jar" );
+ assertContains( result.getWarnings().get( 1 ),
+ "'dependencies.dependency.exclusions.exclusion.artifactId' for gid:aid:jar" );
+
+ // MNG-3832: Aether (part of M3+) supports wildcard expressions for exclusions
+
+ SimpleProblemCollector result_30 = validate( "bad-dependency-exclusion-id.xml" );
+
+ assertViolations( result_30, 0, 0, 0 );
+
+ }
+
+ public void testMissingDependencyExclusionId()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-dependency-exclusion-id.xml" );
+
+ assertViolations( result, 0, 0, 2 );
+
+ assertContains( result.getWarnings().get( 0 ),
+ "'dependencies.dependency.exclusions.exclusion.groupId' for gid:aid:jar is missing" );
+ assertContains( result.getWarnings().get( 1 ),
+ "'dependencies.dependency.exclusions.exclusion.artifactId' for gid:aid:jar is missing" );
+ }
+
+ public void testBadImportScopeType()
+ throws Exception
+ {
+ SimpleProblemCollector result = validateRaw( "bad-import-scope-type.xml" );
+
+ assertViolations( result, 0, 0, 1 );
+
+ assertContains( result.getWarnings().get( 0 ),
+ "'dependencyManagement.dependencies.dependency.type' for test:a:jar must be 'pom'" );
+ }
+
+ public void testBadImportScopeClassifier()
+ throws Exception
+ {
+ SimpleProblemCollector result = validateRaw( "bad-import-scope-classifier.xml" );
+
+ assertViolations( result, 0, 1, 0 );
+
+ assertContains( result.getErrors().get( 0 ),
+ "'dependencyManagement.dependencies.dependency.classifier' for test:a:pom:cls must be empty" );
+ }
+
+ public void testSystemPathRefersToProjectBasedir()
+ throws Exception
+ {
+ SimpleProblemCollector result = validateRaw( "basedir-system-path.xml" );
+
+ assertViolations( result, 0, 0, 2 );
+
+ assertContains( result.getWarnings().get( 0 ), "'dependencies.dependency.systemPath' for test:a:jar "
+ + "should not point at files within the project directory" );
+ assertContains( result.getWarnings().get( 1 ), "'dependencies.dependency.systemPath' for test:b:jar "
+ + "should not point at files within the project directory" );
+ }
+
+ public void testMissingReportPluginVersion()
+ throws Exception
+ {
+ SimpleProblemCollector result = validate( "missing-report-version-pom.xml" );
+
+ assertViolations( result, 0, 0, 0 );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/factory/complex.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/factory/complex.xml
new file mode 100644
index 00000000..80060ffb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/factory/complex.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>test</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <properties>
+ <my.filter.value>hello</my.filter.value>
+ </properties>
+
+ <profiles>
+ <profile>
+ <id>two-conditions</id>
+ <activation>
+ <file>
+ <exists>simple.xml</exists>
+ </file>
+ <property>
+ <name>myproperty</name>
+ <value>test</value>
+ </property>
+ </activation>
+ <properties>
+ <profile.file>activated-1</profile.file>
+ </properties>
+ </profile>
+ <profile>
+ <id>another-two-conditions</id>
+ <activation>
+ <property>
+ <name>myproperty</name>
+ <value>test</value>
+ </property>
+ <file>
+ <missing>simple.xml</missing>
+ </file>
+ </activation>
+ <properties>
+ <profile.miss>activated-2</profile.miss>
+ </properties>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/factory/simple.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/factory/simple.xml
new file mode 100644
index 00000000..71900731
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/factory/simple.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>test</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.1</version>
+ <configuration>
+ <source> 1.5 </source>
+ <target xml:space="preserve"> 1.5 </target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>test</id>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>default</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+ </profile>
+ <profile>
+ <id>file</id>
+ <activation>
+ <file>
+ <exists>simple.xml</exists>
+ </file>
+ </activation>
+ <properties>
+ <profile.file>activated</profile.file>
+ </properties>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/inheritance/plugin-configuration-child.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/inheritance/plugin-configuration-child.xml
new file mode 100644
index 00000000..feb3cb89
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/inheritance/plugin-configuration-child.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>child</artifactId>
+ <version>12-SNAPSHOT</version>
+
+ <mailingLists>
+ <!--mailingList> MNG-3124: no way to add a list to parent content, only full override
+ <name>child</name>
+ <post>post@mailing.list.com</post>
+ <subscribe>subscribe@mailing.list.com</subscribe>
+ <unsubscribe>unsubscribe@mailing.list.com</unsubscribe>
+ </mailingList-->
+ </mailingLists>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>inheritance.configuration</groupId>
+ <artifactId>default</artifactId>
+ <version>3.0</version>
+ <configuration>
+ <defaults>
+ <parent>child</parent>
+ <child>child</child>
+ </defaults>
+ <appends combine.children="append">
+ <parent>child</parent>
+ <child>child</child>
+ </appends>
+ <overrides combine.self="override">
+ <parent>child</parent>
+ <child>child</child>
+ </overrides>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/inheritance/plugin-configuration-expected.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/inheritance/plugin-configuration-expected.xml
new file mode 100644
index 00000000..00a21f3d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/inheritance/plugin-configuration-expected.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>inheritance</groupId>
+ <artifactId>child</artifactId>
+ <version>12-SNAPSHOT</version>
+
+ <!-- name is not inherited, but description is -->
+ <description>Model inheritance description</description>
+ <url>http://www.apache.org/child/</url><!-- child's artifactId appended to parent url -->
+
+ <mailingLists>
+ <mailingList>
+ <name>parent</name>
+ <post>post@mailing.list.com</post>
+ <subscribe>subscribe@mailing.list.com</subscribe>
+ <unsubscribe>unsubscribe@mailing.list.com</unsubscribe>
+ </mailingList>
+ </mailingLists>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>inheritance.configuration</groupId>
+ <artifactId>default</artifactId>
+ <version>3.0</version>
+ <configuration>
+ <defaults><!-- equivalent to combine.children="merge" combine.self="merge" -->
+ <!-- merge the content of the configuration element according to element name -->
+ <parent>child</parent>
+ <child>child</child>
+ <parent-only>parent</parent-only>
+ </defaults>
+ <appends combine.children="append">
+ <parent-only>parent</parent-only>
+ <parent>parent</parent>
+ <parent>child</parent>
+ <child>child</child>
+ </appends>
+ <overrides combine.self="override">
+ <parent>child</parent>
+ <child>child</child>
+ </overrides>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <artifactId>MNG-5115</artifactId>
+ <reportSets>
+ <reportSet>
+ <id>default-inherited</id>
+ <reports>
+ <report>to-be-inherited</report>
+ </reports>
+ </reportSet>
+ <!-- reportSet with inherited=false is not here -->
+ </reportSets>
+ </plugin>
+ </plugins>
+ </reporting>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/inheritance/plugin-configuration-parent.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/inheritance/plugin-configuration-parent.xml
new file mode 100644
index 00000000..2b973a15
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/inheritance/plugin-configuration-parent.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>inheritance</groupId>
+ <artifactId>parent</artifactId>
+ <version>11-SNAPSHOT</version>
+
+ <name>Model inheritance test</name>
+ <description>Model inheritance description</description>
+ <url>http://www.apache.org/</url>
+
+ <mailingLists>
+ <mailingList>
+ <name>parent</name>
+ <post>post@mailing.list.com</post>
+ <subscribe>subscribe@mailing.list.com</subscribe>
+ <unsubscribe>unsubscribe@mailing.list.com</unsubscribe>
+ </mailingList>
+ </mailingLists>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>inheritance.configuration</groupId>
+ <artifactId>default</artifactId>
+ <version>2.0</version>
+ <configuration>
+ <defaults>
+ <parent-only>parent</parent-only>
+ <parent>parent</parent>
+ </defaults>
+ <appends>
+ <parent-only>parent</parent-only>
+ <parent>parent</parent>
+ </appends>
+ <overrides>
+ <parent-only>parent</parent-only>
+ <parent>parent</parent>
+ </overrides>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <artifactId>MNG-5115</artifactId>
+ <reportSets>
+ <reportSet>
+ <id>default-inherited</id>
+ <reports>
+ <report>to-be-inherited</report>
+ </reports>
+ </reportSet>
+ <reportSet>
+ <id>inherited-false</id>
+ <inherited>false</inherited>
+ <reports>
+ <report>not-to-be-inherited</report>
+ </reports>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ </plugins>
+ </reporting>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-dependency-exclusion-id.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-dependency-exclusion-id.xml
new file mode 100644
index 00000000..1e02b154
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-dependency-exclusion-id.xml
@@ -0,0 +1,40 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>foo</artifactId>
+ <groupId>foo</groupId>
+ <version>99.44</version>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>gid</groupId>
+ <artifactId>aid</artifactId>
+ <version>1.0</version>
+ <exclusions>
+ <exclusion>
+ <groupId>test?</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-dependency-scope.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-dependency-scope.xml
new file mode 100644
index 00000000..0ae0b45f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-dependency-scope.xml
@@ -0,0 +1,69 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>0.1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>a</artifactId>
+ <version>0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>b</artifactId>
+ <version>0.2</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>c</artifactId>
+ <version>0.2</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>d</artifactId>
+ <version>0.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>e</artifactId>
+ <version>0.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>f</artifactId>
+ <version>0.2</version>
+ <scope>import</scope>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>g</artifactId>
+ <version>0.2</version>
+ <scope>optional</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-dependency-version.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-dependency-version.xml
new file mode 100644
index 00000000..cb75e7b7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-dependency-version.xml
@@ -0,0 +1,43 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>0.1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>a</artifactId>
+ <version>0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>b</artifactId>
+ <version>${missing.property}</version>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>c</artifactId>
+ <version>1/1</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-import-scope-classifier.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-import-scope-classifier.xml
new file mode 100644
index 00000000..83313451
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-import-scope-classifier.xml
@@ -0,0 +1,38 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>0.1</version>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ <scope>import</scope>
+ <type>pom</type>
+ <classifier>cls</classifier>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-import-scope-type.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-import-scope-type.xml
new file mode 100644
index 00000000..fb505c54
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-import-scope-type.xml
@@ -0,0 +1,37 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>0.1</version>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ <scope>import</scope>
+ <!-- missing type=pom -->
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-modelVersion.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-modelVersion.xml
new file mode 100644
index 00000000..1f381b3b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-modelVersion.xml
@@ -0,0 +1,25 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>99.0.0</modelVersion>
+ <groupId>foo</groupId>
+ <artifactId>bar</artifactId>
+ <version>0.1</version>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-plugin-dependency-scope.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-plugin-dependency-scope.xml
new file mode 100644
index 00000000..3b06e620
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-plugin-dependency-scope.xml
@@ -0,0 +1,70 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>0.1</version>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-it-plugin</artifactId>
+ <version>0.1</version>
+ <dependencies>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>a</artifactId>
+ <version>0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>b</artifactId>
+ <version>0.2</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>c</artifactId>
+ <version>0.2</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>d</artifactId>
+ <version>0.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>e</artifactId>
+ <version>0.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>f</artifactId>
+ <version>0.2</version>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-plugin-dependency-version.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-plugin-dependency-version.xml
new file mode 100644
index 00000000..64382529
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-plugin-dependency-version.xml
@@ -0,0 +1,46 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>0.1</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-it-plugin</artifactId>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>a</artifactId>
+ <version>0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>b</artifactId>
+ <version>${missing.property}</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-plugin-version.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-plugin-version.xml
new file mode 100644
index 00000000..2ca936aa
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-plugin-version.xml
@@ -0,0 +1,55 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>0.1</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>test</groupId>
+ <artifactId>good</artifactId>
+ <version>1.0</version>
+ </plugin>
+ <plugin>
+ <groupId>test</groupId>
+ <artifactId>mip</artifactId>
+ <version>${missing.property}</version>
+ </plugin>
+ <plugin>
+ <groupId>test</groupId>
+ <artifactId>rmv</artifactId>
+ <version>RELEASE</version>
+ </plugin>
+ <plugin>
+ <groupId>test</groupId>
+ <artifactId>lmv</artifactId>
+ <version>LATEST</version>
+ </plugin>
+ <plugin>
+ <groupId>test</groupId>
+ <artifactId>ifsc</artifactId>
+ <version>1/1</version>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-repository-id.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-repository-id.xml
new file mode 100644
index 00000000..70553eb3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-repository-id.xml
@@ -0,0 +1,50 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>gid</groupId>
+ <artifactId>aid</artifactId>
+ <version>1.0</version>
+
+ <repositories>
+ <repository>
+ <id>this/is\bad</id>
+ <url>http://localhost</url>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>this/is\bad</id>
+ <url>http://localhost</url>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <distributionManagement>
+ <repository>
+ <id>this/is\bad</id>
+ <url>http://localhost</url>
+ </repository>
+ <snapshotRepository>
+ <id>this/is\bad</id>
+ <url>http://localhost</url>
+ </snapshotRepository>
+ </distributionManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-snapshot-version.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-snapshot-version.xml
new file mode 100644
index 00000000..70b5ddcb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-snapshot-version.xml
@@ -0,0 +1,25 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>foo</groupId>
+ <artifactId>bar</artifactId>
+ <version>1.2.3.SNAPSHOT</version>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-version.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-version.xml
new file mode 100644
index 00000000..bf6a1fc8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-version.xml
@@ -0,0 +1,25 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>foo</groupId>
+ <artifactId>bar</artifactId>
+ <version>this\is/bad</version>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/basedir-system-path.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/basedir-system-path.xml
new file mode 100644
index 00000000..24d49d3d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/basedir-system-path.xml
@@ -0,0 +1,42 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>0.1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>a</artifactId>
+ <version>0.2</version>
+ <scope>system</scope>
+ <systemPath>${basedir}/lib/a.jar</systemPath>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ <scope>system</scope>
+ <systemPath>${project.basedir}/lib/b.jar</systemPath>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/distribution-management-status.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/distribution-management-status.xml
new file mode 100644
index 00000000..3a5968b0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/distribution-management-status.xml
@@ -0,0 +1,29 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>foo</groupId>
+ <artifactId>bar</artifactId>
+ <version>0.1</version>
+
+ <distributionManagement>
+ <status>generated</status>
+ </distributionManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-module.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-module.xml
new file mode 100644
index 00000000..d3ef528f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-module.xml
@@ -0,0 +1,31 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>child</module>
+ <module>child</module>
+ </modules>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-plugin-execution.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-plugin-execution.xml
new file mode 100644
index 00000000..0d4256de
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-plugin-execution.xml
@@ -0,0 +1,103 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>build</groupId>
+ <artifactId>managed-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>test</phase>
+ </execution>
+ <execution>
+ <phase>test</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>build</groupId>
+ <artifactId>plugin</artifactId>
+ <executions>
+ <execution>
+ <id>a</id>
+ <phase>test</phase>
+ </execution>
+ <execution>
+ <id>a</id>
+ <phase>test</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>test</id>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>profile</groupId>
+ <artifactId>managed-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>b</id>
+ <phase>test</phase>
+ </execution>
+ <execution>
+ <id>b</id>
+ <phase>test</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>profile</groupId>
+ <artifactId>plugin</artifactId>
+ <executions>
+ <execution>
+ <id>c</id>
+ <phase>test</phase>
+ </execution>
+ <execution>
+ <id>c</id>
+ <phase>test</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-plugin.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-plugin.xml
new file mode 100644
index 00000000..06a6a657
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-plugin.xml
@@ -0,0 +1,81 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>test</groupId>
+ <artifactId>managed-duplicate</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>test</groupId>
+ <artifactId>managed-duplicate</artifactId>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>test</groupId>
+ <artifactId>duplicate</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>test</groupId>
+ <artifactId>duplicate</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>test</id>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>profile</groupId>
+ <artifactId>managed-duplicate</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>profile</groupId>
+ <artifactId>managed-duplicate</artifactId>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>profile</groupId>
+ <artifactId>duplicate</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>profile</groupId>
+ <artifactId>duplicate</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-profile-id.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-profile-id.xml
new file mode 100644
index 00000000..2379c3db
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-profile-id.xml
@@ -0,0 +1,35 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <profiles>
+ <profile>
+ <id>non-unique-id</id>
+ </profile>
+ <profile>
+ <id>non-unique-id</id>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/empty-module.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/empty-module.xml
new file mode 100644
index 00000000..f7a91d1d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/empty-module.xml
@@ -0,0 +1,30 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>0.1</version>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module> </module>
+ </modules>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/empty-plugin-version.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/empty-plugin-version.xml
new file mode 100644
index 00000000..340efc5c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/empty-plugin-version.xml
@@ -0,0 +1,34 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>foo</artifactId>
+ <groupId>bar</groupId>
+ <version>1.0</version>
+ <packaging>pack</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-it-plugin</artifactId>
+ <version></version>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/hard-coded-system-path.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/hard-coded-system-path.xml
new file mode 100644
index 00000000..b5a4dd67
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/hard-coded-system-path.xml
@@ -0,0 +1,42 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>0.1</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>a</artifactId>
+ <version>0.2</version>
+ <scope>system</scope>
+ <systemPath>should-use-variables-and-not-hard-code-this-path</systemPath>
+ </dependency>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>b</artifactId>
+ <version>0.1</version>
+ <scope>system</scope>
+ <systemPath>${java.home}/lib/good.jar</systemPath>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/incomplete-parent.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/incomplete-parent.xml
new file mode 100644
index 00000000..2fc94d57
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/incomplete-parent.xml
@@ -0,0 +1,30 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <!-- all fields missing -->
+ </parent>
+
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>0.1</version>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/invalid-aggregator-packaging-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/invalid-aggregator-packaging-pom.xml
new file mode 100644
index 00000000..977f5db4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/invalid-aggregator-packaging-pom.xml
@@ -0,0 +1,30 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>foo</artifactId>
+ <groupId>foo</groupId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+
+ <modules>
+ <module>test-module</module>
+ </modules>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/invalid-ids-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/invalid-ids-pom.xml
new file mode 100644
index 00000000..bbb8e9c8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/invalid-ids-pom.xml
@@ -0,0 +1,26 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>o/a/m</groupId>
+ <artifactId>m$-do$</artifactId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-1-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-1-pom.xml
new file mode 100644
index 00000000..fe297e6e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-1-pom.xml
@@ -0,0 +1,21 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-artifactId-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-artifactId-pom.xml
new file mode 100644
index 00000000..39f0d7bc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-artifactId-pom.xml
@@ -0,0 +1,25 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>foo</groupId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-artifactId-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-artifactId-pom.xml
new file mode 100644
index 00000000..3a5b6479
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-artifactId-pom.xml
@@ -0,0 +1,32 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>foo</artifactId>
+ <groupId>foo</groupId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+ <dependencies>
+ <dependency>
+ <groupId>groupId</groupId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-exclusion-id.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-exclusion-id.xml
new file mode 100644
index 00000000..b9baada1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-exclusion-id.xml
@@ -0,0 +1,39 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>foo</artifactId>
+ <groupId>foo</groupId>
+ <version>99.44</version>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>gid</groupId>
+ <artifactId>aid</artifactId>
+ <version>1.0</version>
+ <exclusions>
+ <exclusion>
+ <groupId></groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-groupId-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-groupId-pom.xml
new file mode 100644
index 00000000..5799c572
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-groupId-pom.xml
@@ -0,0 +1,32 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>foo</artifactId>
+ <groupId>foo</groupId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+ <dependencies>
+ <dependency>
+ <artifactId>artifactId</artifactId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-mgmt-artifactId-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-mgmt-artifactId-pom.xml
new file mode 100644
index 00000000..e050ef43
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-mgmt-artifactId-pom.xml
@@ -0,0 +1,34 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>foo</artifactId>
+ <groupId>foo</groupId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>groupId</groupId>
+ <version>version</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-mgmt-groupId-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-mgmt-groupId-pom.xml
new file mode 100644
index 00000000..a012d0f5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-mgmt-groupId-pom.xml
@@ -0,0 +1,34 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>foo</artifactId>
+ <groupId>foo</groupId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <artifactId>artifactId</artifactId>
+ <version>version</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-mgmt-version-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-mgmt-version-pom.xml
new file mode 100644
index 00000000..cc5ff5b3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-mgmt-version-pom.xml
@@ -0,0 +1,34 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>foo</artifactId>
+ <groupId>foo</groupId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <artifactId>artifactId</artifactId>
+ <groupId>groupId</groupId>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-version-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-version-pom.xml
new file mode 100644
index 00000000..217b036d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-version-pom.xml
@@ -0,0 +1,32 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>foo</artifactId>
+ <groupId>foo</groupId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+ <dependencies>
+ <dependency>
+ <artifactId>artifactId</artifactId>
+ <groupId>groupId</groupId>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-groupId-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-groupId-pom.xml
new file mode 100644
index 00000000..528b8b6a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-groupId-pom.xml
@@ -0,0 +1,25 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>bar</artifactId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-modelVersion-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-modelVersion-pom.xml
new file mode 100644
index 00000000..f0273d9e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-modelVersion-pom.xml
@@ -0,0 +1,25 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <groupId>foo</groupId>
+ <artifactId>foo</artifactId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-artifactId-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-artifactId-pom.xml
new file mode 100644
index 00000000..27e27d6b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-artifactId-pom.xml
@@ -0,0 +1,33 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>foo</artifactId>
+ <groupId>foo</groupId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <version>1.0</version>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-dependency-artifactId.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-dependency-artifactId.xml
new file mode 100644
index 00000000..5c21e363
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-dependency-artifactId.xml
@@ -0,0 +1,41 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>1.0</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-it-plugin</artifactId>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>test</groupId>
+ <!-- artifact id missing -->
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-dependency-groupId.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-dependency-groupId.xml
new file mode 100644
index 00000000..831c05f2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-dependency-groupId.xml
@@ -0,0 +1,41 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>1.0</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-it-plugin</artifactId>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <!-- groupd id missing -->
+ <artifactId>a</artifactId>
+ <version>2.0</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-dependency-version.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-dependency-version.xml
new file mode 100644
index 00000000..29e0b7e7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-dependency-version.xml
@@ -0,0 +1,41 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>aid</artifactId>
+ <groupId>gid</groupId>
+ <version>1.0</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-it-plugin</artifactId>
+ <version>1.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>test</groupId>
+ <artifactId>a</artifactId>
+ <!-- version missing -->
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-version-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-version-pom.xml
new file mode 100644
index 00000000..b0ea7aa7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-version-pom.xml
@@ -0,0 +1,33 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>foo</artifactId>
+ <groupId>foo</groupId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-it-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-report-artifactId-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-report-artifactId-pom.xml
new file mode 100644
index 00000000..4cb5649c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-report-artifactId-pom.xml
@@ -0,0 +1,33 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>foo</artifactId>
+ <groupId>foo</groupId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+ <reporting>
+ <plugins>
+ <plugin>
+
+ </plugin>
+ </plugins>
+ </reporting>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-report-version-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-report-version-pom.xml
new file mode 100644
index 00000000..46a560f6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-report-version-pom.xml
@@ -0,0 +1,57 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>foo</artifactId>
+ <groupId>foo</groupId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-from-pluginManagement-plugin</artifactId>
+ <version>1.0</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-from-plugins-plugin</artifactId>
+ <version>1.0</version>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <artifactId>maven-noversion-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-from-plugins-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-from-pluginManagement-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </reporting>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-repository-id-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-repository-id-pom.xml
new file mode 100644
index 00000000..1d385f29
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-repository-id-pom.xml
@@ -0,0 +1,36 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>foo</artifactId>
+ <groupId>foo</groupId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+ <repositories>
+ <repository>
+
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+
+ </pluginRepository>
+ </pluginRepositories>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-resource-directory-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-resource-directory-pom.xml
new file mode 100644
index 00000000..232db095
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-resource-directory-pom.xml
@@ -0,0 +1,38 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>foo</artifactId>
+ <groupId>foo</groupId>
+ <version>99.44</version>
+ <packaging>bleh</packaging>
+ <build>
+ <resources>
+ <resource>
+
+ </resource>
+ </resources>
+ <testResources>
+ <testResource>
+
+ </testResource>
+ </testResources>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-type-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-type-pom.xml
new file mode 100644
index 00000000..663e58ad
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-type-pom.xml
@@ -0,0 +1,26 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>foo</groupId>
+ <artifactId>bar</artifactId>
+ <version>99.44</version>
+ <packaging></packaging>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-version-pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-version-pom.xml
new file mode 100644
index 00000000..2a111f19
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-version-pom.xml
@@ -0,0 +1,25 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>foo</groupId>
+ <artifactId>bar</artifactId>
+ <packaging>bleh</packaging>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/reserved-repository-id.xml b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/reserved-repository-id.xml
new file mode 100644
index 00000000..90a6c88c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/reserved-repository-id.xml
@@ -0,0 +1,50 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>gid</groupId>
+ <artifactId>aid</artifactId>
+ <version>99.44</version>
+
+ <repositories>
+ <repository>
+ <id>local</id>
+ <url>http://localhost</url>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>local</id>
+ <url>http://localhost</url>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <distributionManagement>
+ <repository>
+ <id>local</id>
+ <url>http://localhost</url>
+ </repository>
+ <snapshotRepository>
+ <id>local</id>
+ <url>http://localhost</url>
+ </snapshotRepository>
+ </distributionManagement>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-model/pom.xml
new file mode 100644
index 00000000..851c3e32
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/pom.xml
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.3.3</version>
+ </parent>
+
+ <artifactId>maven-model</artifactId>
+
+ <name>Maven Model</name>
+ <description>Model for Maven POM (Project Object Model)</description>
+
+ <scm><!-- remove when git scm url format can accept artifact-id at the end, as automatically inherited -->
+ <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
+ <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
+ <tag>maven-3.3.3</tag>
+ </scm>
+
+ <properties>
+ <checkstyle.violation.ignore>FileLength</checkstyle.violation.ignore>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <configuration>
+ <version>4.0.0</version>
+ <models>
+ <model>src/main/mdo/maven.mdo</model>
+ </models>
+ </configuration>
+ <executions>
+ <execution>
+ <id>standard</id>
+ <goals>
+ <goal>java</goal>
+ <goal>xpp3-reader</goal>
+ <goal>xpp3-extended-reader</goal>
+ <goal>xpp3-writer</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <configuration>
+ <!-- Exclude the navigation file for Maven 1 sites
+ as it interferes with the site generation. -->
+ <moduleExcludes>
+ <xdoc>navigation.xml</xdoc>
+ </moduleExcludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>all-models</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>v3</id>
+ <goals>
+ <goal>java</goal>
+ <goal>xpp3-writer</goal>
+ <goal>xpp3-reader</goal>
+ <goal>xsd</goal>
+ </goals>
+ <configuration>
+ <version>3.0.0</version>
+ <packageWithVersion>true</packageWithVersion>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ <configuration>
+ <classifier>all</classifier>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/io/xpp3/package-info.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/io/xpp3/package-info.java
new file mode 100644
index 00000000..648607ce
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/io/xpp3/package-info.java
@@ -0,0 +1,30 @@
+// CHECKSTYLE_OFF: RegexpHeader|LineLength
+/**
+ * XML reader and writer classes for Maven POM, generated from <code>maven.mdo</code> model.
+ * These classes use
+ * <a href="http://plexus.codehaus.org/plexus-utils/apidocs/org/codehaus/plexus/util/xml/pull/package-summary.html">plexus-utils'
+ * XML Pull Parser API</a> for their internal XML handling and
+ * <a href="http://plexus.codehaus.org/plexus-utils/apidocs/org/codehaus/plexus/util/xml/Xpp3DomBuilder.html">Xpp3DomBuilder</a> +
+ * <a href="http://plexus.codehaus.org/plexus-utils/apidocs/org/codehaus/plexus/util/xml/Xpp3Dom.html">Xpp3Dom</a> for
+ * DOM content representation (see <code>&lt;configuration&gt;</code> elements).
+ */
+package org.apache.maven.model.io.xpp3;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */ \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
new file mode 100644
index 00000000..b671d981
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
@@ -0,0 +1,2924 @@
+package org.apache.maven.model.merge;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.BuildBase;
+import org.apache.maven.model.CiManagement;
+import org.apache.maven.model.ConfigurationContainer;
+import org.apache.maven.model.Contributor;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.DeploymentRepository;
+import org.apache.maven.model.Developer;
+import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.model.Exclusion;
+import org.apache.maven.model.Extension;
+import org.apache.maven.model.FileSet;
+import org.apache.maven.model.InputLocation;
+import org.apache.maven.model.IssueManagement;
+import org.apache.maven.model.License;
+import org.apache.maven.model.MailingList;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.ModelBase;
+import org.apache.maven.model.Notifier;
+import org.apache.maven.model.Organization;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.PatternSet;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginConfiguration;
+import org.apache.maven.model.PluginContainer;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.model.PluginManagement;
+import org.apache.maven.model.Prerequisites;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.Relocation;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.ReportSet;
+import org.apache.maven.model.Reporting;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.RepositoryBase;
+import org.apache.maven.model.RepositoryPolicy;
+import org.apache.maven.model.Resource;
+import org.apache.maven.model.Scm;
+import org.apache.maven.model.Site;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * This is a hand-crafted prototype of the default model merger that should eventually be generated by Modello by a new
+ * Java plugin. Code structure to merge source (read-only) object into the target object is:<ul>
+ * <li><code>merge<i>Classname</i>( <i>Classname</i> target, <i>Classname</i> source, boolean sourceDominant,
+ * Map<Object, Object> context )</code> for each model class</li>
+ * <li><code>merge<i>Classname</i>_<i>FieldName</i>( <i>Classname</i> target, <i>Classname</i> source, boolean
+ * sourceDominant, Map<Object, Object> context )</code> for each field of each model class</li>
+ * <li><code>Object get<i>Classname</i>Key( <i>Classname</i> <i>classname</i> )</code>
+ * for each class that is used in a list</li>
+ * </ul>
+ * Code is written like it could be generated, with default behaviour to be overridden when necessary.
+ * This is particularly the case for <code>Object get<i>Classname</i>Key( <i>Classname</i> <i>classname</i> )</code>
+ * method, which by default return the object itself and is expected to be overridden to calculate better suited key
+ * value.
+ *
+ * @author Benjamin Bentmann
+ */
+@SuppressWarnings( { "checkstyle:methodname" } )
+public class ModelMerger
+{
+
+ /**
+ * Merges the specified source object into the given target object.
+ *
+ * @param target The target object whose existing contents should be merged with the source, must not be
+ * <code>null</code>.
+ * @param source The (read-only) source object that should be merged into the target object, may be
+ * <code>null</code>.
+ * @param sourceDominant A flag indicating whether either the target object or the source object provides the
+ * dominant data.
+ * @param hints A set of key-value pairs that customized merger implementations can use to carry domain-specific
+ * information along, may be <code>null</code>.
+ */
+ public void merge( Model target, Model source, boolean sourceDominant, Map<?, ?> hints )
+ {
+ if ( target == null )
+ {
+ throw new IllegalArgumentException( "target missing" );
+ }
+
+ if ( source == null )
+ {
+ return;
+ }
+
+ Map<Object, Object> context = new HashMap<Object, Object>();
+ if ( hints != null )
+ {
+ context.putAll( hints );
+ }
+
+ mergeModel( target, source, sourceDominant, context );
+ }
+
+ protected void mergeModel( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeModelBase( target, source, sourceDominant, context );
+
+ mergeModel_ModelVersion( target, source, sourceDominant, context );
+ mergeModel_Parent( target, source, sourceDominant, context );
+ mergeModel_GroupId( target, source, sourceDominant, context );
+ mergeModel_ArtifactId( target, source, sourceDominant, context );
+ mergeModel_Version( target, source, sourceDominant, context );
+ mergeModel_Packaging( target, source, sourceDominant, context );
+ mergeModel_Name( target, source, sourceDominant, context );
+ mergeModel_Description( target, source, sourceDominant, context );
+ mergeModel_Url( target, source, sourceDominant, context );
+ mergeModel_InceptionYear( target, source, sourceDominant, context );
+ mergeModel_Organization( target, source, sourceDominant, context );
+ mergeModel_Licenses( target, source, sourceDominant, context );
+ mergeModel_MailingLists( target, source, sourceDominant, context );
+ mergeModel_Developers( target, source, sourceDominant, context );
+ mergeModel_Contributors( target, source, sourceDominant, context );
+ mergeModel_IssueManagement( target, source, sourceDominant, context );
+ mergeModel_Scm( target, source, sourceDominant, context );
+ mergeModel_CiManagement( target, source, sourceDominant, context );
+ mergeModel_Prerequisites( target, source, sourceDominant, context );
+ mergeModel_Build( target, source, sourceDominant, context );
+ mergeModel_Profiles( target, source, sourceDominant, context );
+ }
+
+ protected void mergeModel_ModelVersion( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getModelVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getModelVersion() == null )
+ {
+ target.setModelVersion( src );
+ target.setLocation( "modelVersion", source.getLocation( "modelVersion" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_Parent( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ Parent src = source.getParent();
+ if ( src != null )
+ {
+ Parent tgt = target.getParent();
+ if ( tgt == null )
+ {
+ tgt = new Parent();
+ tgt.setRelativePath( null );
+ target.setParent( tgt );
+ }
+ mergeParent( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModel_GroupId( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ target.setLocation( "groupId", source.getLocation( "groupId" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_ArtifactId( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_Version( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getVersion() == null )
+ {
+ target.setVersion( src );
+ target.setLocation( "version", source.getLocation( "version" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_Packaging( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getPackaging();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getPackaging() == null )
+ {
+ target.setPackaging( src );
+ target.setLocation( "packaging", source.getLocation( "packaging" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_Name( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getName();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getName() == null )
+ {
+ target.setName( src );
+ target.setLocation( "name", source.getLocation( "name" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_Description( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getDescription();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getDescription() == null )
+ {
+ target.setDescription( src );
+ target.setLocation( "description", source.getLocation( "description" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_Url( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_InceptionYear( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getInceptionYear();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getInceptionYear() == null )
+ {
+ target.setInceptionYear( src );
+ target.setLocation( "inceptionYear", source.getLocation( "inceptionYear" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_Organization( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Organization src = source.getOrganization();
+ if ( src != null )
+ {
+ Organization tgt = target.getOrganization();
+ if ( tgt == null )
+ {
+ tgt = new Organization();
+ target.setOrganization( tgt );
+ }
+ mergeOrganization( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModel_Licenses( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<License> src = source.getLicenses();
+ if ( !src.isEmpty() )
+ {
+ List<License> tgt = target.getLicenses();
+ Map<Object, License> merged = new LinkedHashMap<Object, License>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( License element : tgt )
+ {
+ Object key = getLicenseKey( element );
+ merged.put( key, element );
+ }
+
+ for ( License element : src )
+ {
+ Object key = getLicenseKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setLicenses( new ArrayList<License>( merged.values() ) );
+ }
+ }
+
+ protected void mergeModel_MailingLists( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<MailingList> src = source.getMailingLists();
+ if ( !src.isEmpty() )
+ {
+ List<MailingList> tgt = target.getMailingLists();
+ Map<Object, MailingList> merged = new LinkedHashMap<Object, MailingList>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( MailingList element : tgt )
+ {
+ Object key = getMailingListKey( element );
+ merged.put( key, element );
+ }
+
+ for ( MailingList element : src )
+ {
+ Object key = getMailingListKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setMailingLists( new ArrayList<MailingList>( merged.values() ) );
+ }
+ }
+
+ protected void mergeModel_Developers( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Developer> src = source.getDevelopers();
+ if ( !src.isEmpty() )
+ {
+ List<Developer> tgt = target.getDevelopers();
+ Map<Object, Developer> merged = new LinkedHashMap<Object, Developer>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Developer element : tgt )
+ {
+ Object key = getDeveloperKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Developer element : src )
+ {
+ Object key = getDeveloperKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setDevelopers( new ArrayList<Developer>( merged.values() ) );
+ }
+ }
+
+ protected void mergeModel_Contributors( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Contributor> src = source.getContributors();
+ if ( !src.isEmpty() )
+ {
+ List<Contributor> tgt = target.getContributors();
+ Map<Object, Contributor> merged = new LinkedHashMap<Object, Contributor>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Contributor element : tgt )
+ {
+ Object key = getContributorKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Contributor element : src )
+ {
+ Object key = getContributorKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setContributors( new ArrayList<Contributor>( merged.values() ) );
+ }
+ }
+
+ protected void mergeModel_IssueManagement( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ IssueManagement src = source.getIssueManagement();
+ if ( src != null )
+ {
+ IssueManagement tgt = target.getIssueManagement();
+ if ( tgt == null )
+ {
+ tgt = new IssueManagement();
+ target.setIssueManagement( tgt );
+ }
+ mergeIssueManagement( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModel_Scm( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ Scm src = source.getScm();
+ if ( src != null )
+ {
+ Scm tgt = target.getScm();
+ if ( tgt == null )
+ {
+ tgt = new Scm();
+ tgt.setTag( null );
+ target.setScm( tgt );
+ }
+ mergeScm( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModel_CiManagement( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ CiManagement src = source.getCiManagement();
+ if ( src != null )
+ {
+ CiManagement tgt = target.getCiManagement();
+ if ( tgt == null )
+ {
+ tgt = new CiManagement();
+ target.setCiManagement( tgt );
+ }
+ mergeCiManagement( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModel_Prerequisites( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Prerequisites src = source.getPrerequisites();
+ if ( src != null )
+ {
+ Prerequisites tgt = target.getPrerequisites();
+ if ( tgt == null )
+ {
+ tgt = new Prerequisites();
+ tgt.setMaven( null );
+ target.setPrerequisites( tgt );
+ }
+ mergePrerequisites( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModel_Build( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ Build src = source.getBuild();
+ if ( src != null )
+ {
+ Build tgt = target.getBuild();
+ if ( tgt == null )
+ {
+ tgt = new Build();
+ target.setBuild( tgt );
+ }
+ mergeBuild( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModel_Profiles( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Profile> src = source.getProfiles();
+ if ( !src.isEmpty() )
+ {
+ List<Profile> tgt = target.getProfiles();
+ Map<Object, Profile> merged = new LinkedHashMap<Object, Profile>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Profile element : tgt )
+ {
+ Object key = getProfileKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Profile element : src )
+ {
+ Object key = getProfileKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setProfiles( new ArrayList<Profile>( merged.values() ) );
+ }
+ }
+
+ protected void mergeModelBase( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeModelBase_DistributionManagement( target, source, sourceDominant, context );
+ mergeModelBase_Modules( target, source, sourceDominant, context );
+ mergeModelBase_Repositories( target, source, sourceDominant, context );
+ mergeModelBase_PluginRepositories( target, source, sourceDominant, context );
+ mergeModelBase_Dependencies( target, source, sourceDominant, context );
+ mergeModelBase_Reporting( target, source, sourceDominant, context );
+ mergeModelBase_DependencyManagement( target, source, sourceDominant, context );
+ mergeModelBase_Properties( target, source, sourceDominant, context );
+ }
+
+ protected void mergeModelBase_Modules( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getModules();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getModules();
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ merged.addAll( src );
+ target.setModules( merged );
+ }
+ }
+
+ protected void mergeModelBase_Dependencies( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Dependency> src = source.getDependencies();
+ if ( !src.isEmpty() )
+ {
+ List<Dependency> tgt = target.getDependencies();
+ Map<Object, Dependency> merged = new LinkedHashMap<Object, Dependency>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Dependency element : tgt )
+ {
+ Object key = getDependencyKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Dependency element : src )
+ {
+ Object key = getDependencyKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setDependencies( new ArrayList<Dependency>( merged.values() ) );
+ }
+ }
+
+ protected void mergeModelBase_Repositories( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Repository> src = source.getRepositories();
+ if ( !src.isEmpty() )
+ {
+ List<Repository> tgt = target.getRepositories();
+ Map<Object, Repository> merged = new LinkedHashMap<Object, Repository>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Repository element : tgt )
+ {
+ Object key = getRepositoryKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Repository element : src )
+ {
+ Object key = getRepositoryKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setRepositories( new ArrayList<Repository>( merged.values() ) );
+ }
+ }
+
+ protected void mergeModelBase_PluginRepositories( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Repository> src = source.getPluginRepositories();
+ if ( !src.isEmpty() )
+ {
+ List<Repository> tgt = target.getPluginRepositories();
+ Map<Object, Repository> merged = new LinkedHashMap<Object, Repository>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Repository element : tgt )
+ {
+ Object key = getRepositoryKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Repository element : src )
+ {
+ Object key = getRepositoryKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setPluginRepositories( new ArrayList<Repository>( merged.values() ) );
+ }
+ }
+
+ protected void mergeModelBase_DistributionManagement( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ DistributionManagement src = source.getDistributionManagement();
+ if ( src != null )
+ {
+ DistributionManagement tgt = target.getDistributionManagement();
+ if ( tgt == null )
+ {
+ tgt = new DistributionManagement();
+ target.setDistributionManagement( tgt );
+ }
+ mergeDistributionManagement( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModelBase_Reporting( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Reporting src = source.getReporting();
+ if ( src != null )
+ {
+ Reporting tgt = target.getReporting();
+ if ( tgt == null )
+ {
+ tgt = new Reporting();
+ target.setReporting( tgt );
+ }
+ mergeReporting( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModelBase_DependencyManagement( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ DependencyManagement src = source.getDependencyManagement();
+ if ( src != null )
+ {
+ DependencyManagement tgt = target.getDependencyManagement();
+ if ( tgt == null )
+ {
+ tgt = new DependencyManagement();
+ target.setDependencyManagement( tgt );
+ }
+ mergeDependencyManagement( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModelBase_Properties( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Properties merged = new Properties();
+ if ( sourceDominant )
+ {
+ merged.putAll( target.getProperties() );
+ merged.putAll( source.getProperties() );
+ }
+ else
+ {
+ merged.putAll( source.getProperties() );
+ merged.putAll( target.getProperties() );
+ }
+ target.setProperties( merged );
+ target.setLocation( "properties", InputLocation.merge( target.getLocation( "properties" ),
+ source.getLocation( "properties" ), sourceDominant ) );
+ }
+
+ protected void mergeDistributionManagement( DistributionManagement target, DistributionManagement source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeDistributionManagement_Repository( target, source, sourceDominant, context );
+ mergeDistributionManagement_SnapshotRepository( target, source, sourceDominant, context );
+ mergeDistributionManagement_Site( target, source, sourceDominant, context );
+ mergeDistributionManagement_Status( target, source, sourceDominant, context );
+ mergeDistributionManagement_DownloadUrl( target, source, sourceDominant, context );
+ }
+
+ protected void mergeDistributionManagement_Repository( DistributionManagement target,
+ DistributionManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ DeploymentRepository src = source.getRepository();
+ if ( src != null )
+ {
+ DeploymentRepository tgt = target.getRepository();
+ if ( tgt == null )
+ {
+ tgt = new DeploymentRepository();
+ target.setRepository( tgt );
+ }
+ mergeDeploymentRepository( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeDistributionManagement_SnapshotRepository( DistributionManagement target,
+ DistributionManagement source,
+ boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ DeploymentRepository src = source.getSnapshotRepository();
+ if ( src != null )
+ {
+ DeploymentRepository tgt = target.getSnapshotRepository();
+ if ( tgt == null )
+ {
+ tgt = new DeploymentRepository();
+ target.setSnapshotRepository( tgt );
+ }
+ mergeDeploymentRepository( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeDistributionManagement_Site( DistributionManagement target, DistributionManagement source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ Site src = source.getSite();
+ if ( src != null )
+ {
+ Site tgt = target.getSite();
+ if ( tgt == null )
+ {
+ tgt = new Site();
+ target.setSite( tgt );
+ }
+ mergeSite( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeDistributionManagement_Status( DistributionManagement target, DistributionManagement source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getStatus();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getStatus() == null )
+ {
+ target.setStatus( src );
+ target.setLocation( "status", source.getLocation( "status" ) );
+ }
+ }
+ }
+
+ protected void mergeDistributionManagement_DownloadUrl( DistributionManagement target,
+ DistributionManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getDownloadUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getDownloadUrl() == null )
+ {
+ target.setDownloadUrl( src );
+ target.setLocation( "downloadUrl", source.getLocation( "downloadUrl" ) );
+ }
+ }
+ }
+
+ protected void mergeRelocation( Relocation target, Relocation source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeRelocation_GroupId( target, source, sourceDominant, context );
+ mergeRelocation_ArtifactId( target, source, sourceDominant, context );
+ mergeRelocation_Version( target, source, sourceDominant, context );
+ mergeRelocation_Message( target, source, sourceDominant, context );
+ }
+
+ protected void mergeRelocation_GroupId( Relocation target, Relocation source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ target.setLocation( "groupId", source.getLocation( "groupId" ) );
+ }
+ }
+ }
+
+ protected void mergeRelocation_ArtifactId( Relocation target, Relocation source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
+ }
+ }
+ }
+
+ protected void mergeRelocation_Version( Relocation target, Relocation source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getVersion() == null )
+ {
+ target.setVersion( src );
+ target.setLocation( "version", source.getLocation( "version" ) );
+ }
+ }
+ }
+
+ protected void mergeRelocation_Message( Relocation target, Relocation source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getMessage();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getMessage() == null )
+ {
+ target.setMessage( src );
+ target.setLocation( "message", source.getLocation( "message" ) );
+ }
+ }
+ }
+
+ protected void mergeDeploymentRepository( DeploymentRepository target, DeploymentRepository source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeRepository( target, source, sourceDominant, context );
+ mergeDeploymentRepository_UniqueVersion( target, source, sourceDominant, context );
+ }
+
+ protected void mergeDeploymentRepository_UniqueVersion( DeploymentRepository target, DeploymentRepository source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ if ( sourceDominant )
+ {
+ target.setUniqueVersion( source.isUniqueVersion() );
+ target.setLocation( "uniqueVersion", source.getLocation( "uniqueVersion" ) );
+ }
+ }
+
+ protected void mergeSite( Site target, Site source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeSite_Id( target, source, sourceDominant, context );
+ mergeSite_Name( target, source, sourceDominant, context );
+ mergeSite_Url( target, source, sourceDominant, context );
+ }
+
+ protected void mergeSite_Id( Site target, Site source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getId() == null )
+ {
+ target.setId( src );
+ target.setLocation( "id", source.getLocation( "id" ) );
+ }
+ }
+ }
+
+ protected void mergeSite_Name( Site target, Site source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getName();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getName() == null )
+ {
+ target.setName( src );
+ target.setLocation( "name", source.getLocation( "name" ) );
+ }
+ }
+ }
+
+ protected void mergeSite_Url( Site target, Site source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeRepository( Repository target, Repository source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeRepositoryBase( target, source, sourceDominant, context );
+ mergeRepository_Releases( target, source, sourceDominant, context );
+ mergeRepository_Snapshots( target, source, sourceDominant, context );
+ }
+
+ protected void mergeRepository_Releases( Repository target, Repository source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ RepositoryPolicy src = source.getReleases();
+ if ( src != null )
+ {
+ RepositoryPolicy tgt = target.getReleases();
+ if ( tgt == null )
+ {
+ tgt = new RepositoryPolicy();
+ target.setReleases( tgt );
+ }
+ mergeRepositoryPolicy( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeRepository_Snapshots( Repository target, Repository source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ RepositoryPolicy src = source.getSnapshots();
+ if ( src != null )
+ {
+ RepositoryPolicy tgt = target.getSnapshots();
+ if ( tgt == null )
+ {
+ tgt = new RepositoryPolicy();
+ target.setSnapshots( tgt );
+ }
+ mergeRepositoryPolicy( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeRepositoryBase( RepositoryBase target, RepositoryBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeRepositoryBase_Id( target, source, sourceDominant, context );
+ mergeRepositoryBase_Name( target, source, sourceDominant, context );
+ mergeRepositoryBase_Url( target, source, sourceDominant, context );
+ mergeRepositoryBase_Layout( target, source, sourceDominant, context );
+ }
+
+ protected void mergeRepositoryBase_Id( RepositoryBase target, RepositoryBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getId() == null )
+ {
+ target.setId( src );
+ target.setLocation( "id", source.getLocation( "id" ) );
+ }
+ }
+ }
+
+ protected void mergeRepositoryBase_Url( RepositoryBase target, RepositoryBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeRepositoryBase_Name( RepositoryBase target, RepositoryBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getName();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getName() == null )
+ {
+ target.setName( src );
+ target.setLocation( "name", source.getLocation( "name" ) );
+ }
+ }
+ }
+
+ protected void mergeRepositoryBase_Layout( RepositoryBase target, RepositoryBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getLayout();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getLayout() == null )
+ {
+ target.setLayout( src );
+ target.setLocation( "layout", source.getLocation( "layout" ) );
+ }
+ }
+ }
+
+ protected void mergeRepositoryPolicy( RepositoryPolicy target, RepositoryPolicy source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeRepositoryPolicy_Enabled( target, source, sourceDominant, context );
+ mergeRepositoryPolicy_UpdatePolicy( target, source, sourceDominant, context );
+ mergeRepositoryPolicy_ChecksumPolicy( target, source, sourceDominant, context );
+ }
+
+ protected void mergeRepositoryPolicy_Enabled( RepositoryPolicy target, RepositoryPolicy source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getEnabled();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getEnabled() == null )
+ {
+ target.setEnabled( src );
+ target.setLocation( "enabled", source.getLocation( "enabled" ) );
+ }
+ }
+ }
+
+ protected void mergeRepositoryPolicy_UpdatePolicy( RepositoryPolicy target, RepositoryPolicy source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getUpdatePolicy();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUpdatePolicy() == null )
+ {
+ target.setUpdatePolicy( src );
+ target.setLocation( "updatePolicy", source.getLocation( "updatePolicy" ) );
+ }
+ }
+ }
+
+ protected void mergeRepositoryPolicy_ChecksumPolicy( RepositoryPolicy target, RepositoryPolicy source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getChecksumPolicy();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getChecksumPolicy() == null )
+ {
+ target.setChecksumPolicy( src );
+ target.setLocation( "checksumPolicy", source.getLocation( "checksumPolicy" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeDependency_GroupId( target, source, sourceDominant, context );
+ mergeDependency_ArtifactId( target, source, sourceDominant, context );
+ mergeDependency_Version( target, source, sourceDominant, context );
+ mergeDependency_Type( target, source, sourceDominant, context );
+ mergeDependency_Classifier( target, source, sourceDominant, context );
+ mergeDependency_Scope( target, source, sourceDominant, context );
+ mergeDependency_SystemPath( target, source, sourceDominant, context );
+ mergeDependency_Optional( target, source, sourceDominant, context );
+ mergeDependency_Exclusions( target, source, sourceDominant, context );
+ }
+
+ protected void mergeDependency_GroupId( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ target.setLocation( "groupId", source.getLocation( "groupId" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency_ArtifactId( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency_Version( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getVersion() == null )
+ {
+ target.setVersion( src );
+ target.setLocation( "version", source.getLocation( "version" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency_Type( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getType();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getType() == null )
+ {
+ target.setType( src );
+ target.setLocation( "type", source.getLocation( "type" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency_Classifier( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getClassifier();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getClassifier() == null )
+ {
+ target.setClassifier( src );
+ target.setLocation( "classifier", source.getLocation( "classifier" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency_Scope( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getScope();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getScope() == null )
+ {
+ target.setScope( src );
+ target.setLocation( "scope", source.getLocation( "scope" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency_SystemPath( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getSystemPath();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getSystemPath() == null )
+ {
+ target.setSystemPath( src );
+ target.setLocation( "systemPath", source.getLocation( "systemPath" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency_Optional( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getOptional();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getOptional() == null )
+ {
+ target.setOptional( src );
+ target.setLocation( "optional", source.getLocation( "optional" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency_Exclusions( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Exclusion> src = source.getExclusions();
+ if ( !src.isEmpty() )
+ {
+ List<Exclusion> tgt = target.getExclusions();
+
+ Map<Object, Exclusion> merged = new LinkedHashMap<Object, Exclusion>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Exclusion element : tgt )
+ {
+ Object key = getExclusionKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Exclusion element : src )
+ {
+ Object key = getExclusionKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setExclusions( new ArrayList<Exclusion>( merged.values() ) );
+ }
+ }
+
+ protected void mergeExclusion( Exclusion target, Exclusion source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeExclusion_GroupId( target, source, sourceDominant, context );
+ mergeExclusion_ArtifactId( target, source, sourceDominant, context );
+ }
+
+ protected void mergeExclusion_GroupId( Exclusion target, Exclusion source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ target.setLocation( "groupId", source.getLocation( "groupId" ) );
+ }
+ }
+ }
+
+ protected void mergeExclusion_ArtifactId( Exclusion target, Exclusion source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
+ }
+ }
+ }
+
+ protected void mergeReporting( Reporting target, Reporting source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeReporting_OutputDirectory( target, source, sourceDominant, context );
+ mergeReporting_ExcludeDefaults( target, source, sourceDominant, context );
+ mergeReporting_Plugins( target, source, sourceDominant, context );
+ }
+
+ protected void mergeReporting_OutputDirectory( Reporting target, Reporting source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getOutputDirectory();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getOutputDirectory() == null )
+ {
+ target.setOutputDirectory( src );
+ target.setLocation( "outputDirectory", source.getLocation( "outputDirectory" ) );
+ }
+ }
+ }
+
+ protected void mergeReporting_ExcludeDefaults( Reporting target, Reporting source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getExcludeDefaults();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getExcludeDefaults() == null )
+ {
+ target.setExcludeDefaults( src );
+ target.setLocation( "excludeDefaults", source.getLocation( "excludeDefaults" ) );
+ }
+ }
+ }
+
+ protected void mergeReporting_Plugins( Reporting target, Reporting source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<ReportPlugin> src = source.getPlugins();
+ if ( !src.isEmpty() )
+ {
+ List<ReportPlugin> tgt = target.getPlugins();
+ Map<Object, ReportPlugin> merged =
+ new LinkedHashMap<Object, ReportPlugin>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( ReportPlugin element : tgt )
+ {
+ Object key = getReportPluginKey( element );
+ merged.put( key, element );
+ }
+
+ for ( ReportPlugin element : src )
+ {
+ Object key = getReportPluginKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setPlugins( new ArrayList<ReportPlugin>( merged.values() ) );
+ }
+ }
+
+ protected void mergeReportPlugin( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeConfigurationContainer( target, source, sourceDominant, context );
+ mergeReportPlugin_GroupId( target, source, sourceDominant, context );
+ mergeReportPlugin_ArtifactId( target, source, sourceDominant, context );
+ mergeReportPlugin_Version( target, source, sourceDominant, context );
+ mergeReportPlugin_ReportSets( target, source, sourceDominant, context );
+ }
+
+ protected void mergeReportPlugin_GroupId( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ target.setLocation( "groupId", source.getLocation( "groupId" ) );
+ }
+ }
+ }
+
+ protected void mergeReportPlugin_ArtifactId( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
+ }
+ }
+ }
+
+ protected void mergeReportPlugin_Version( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getVersion() == null )
+ {
+ target.setVersion( src );
+ target.setLocation( "version", source.getLocation( "version" ) );
+ }
+ }
+ }
+
+ protected void mergeReportPlugin_ReportSets( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<ReportSet> src = source.getReportSets();
+ if ( !src.isEmpty() )
+ {
+ List<ReportSet> tgt = target.getReportSets();
+ Map<Object, ReportSet> merged = new LinkedHashMap<Object, ReportSet>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( ReportSet element : tgt )
+ {
+ Object key = getReportSetKey( element );
+ merged.put( key, element );
+ }
+
+ for ( ReportSet element : src )
+ {
+ Object key = getReportSetKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setReportSets( new ArrayList<ReportSet>( merged.values() ) );
+ }
+ }
+
+ protected void mergeReportSet( ReportSet target, ReportSet source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeConfigurationContainer( target, source, sourceDominant, context );
+ mergeReportSet_Id( target, source, sourceDominant, context );
+ mergeReportSet_Reports( target, source, sourceDominant, context );
+ }
+
+ protected void mergeReportSet_Id( ReportSet target, ReportSet source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getId() == null )
+ {
+ target.setId( src );
+ target.setLocation( "id", source.getLocation( "id" ) );
+ }
+ }
+ }
+
+ protected void mergeReportSet_Reports( ReportSet target, ReportSet source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getReports();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getReports();
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ merged.addAll( src );
+ target.setReports( merged );
+ }
+ }
+
+ protected void mergeDependencyManagement( DependencyManagement target, DependencyManagement source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeDependencyManagement_Dependencies( target, source, sourceDominant, context );
+ }
+
+ protected void mergeDependencyManagement_Dependencies( DependencyManagement target, DependencyManagement source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ List<Dependency> src = source.getDependencies();
+ if ( !src.isEmpty() )
+ {
+ List<Dependency> tgt = target.getDependencies();
+ Map<Object, Dependency> merged = new LinkedHashMap<Object, Dependency>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Dependency element : tgt )
+ {
+ Object key = getDependencyKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Dependency element : src )
+ {
+ Object key = getDependencyKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setDependencies( new ArrayList<Dependency>( merged.values() ) );
+ }
+ }
+
+ protected void mergeParent( Parent target, Parent source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeParent_GroupId( target, source, sourceDominant, context );
+ mergeParent_ArtifactId( target, source, sourceDominant, context );
+ mergeParent_Version( target, source, sourceDominant, context );
+ mergeParent_RelativePath( target, source, sourceDominant, context );
+ }
+
+ protected void mergeParent_GroupId( Parent target, Parent source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ target.setLocation( "groupId", source.getLocation( "groupId" ) );
+ }
+ }
+ }
+
+ protected void mergeParent_ArtifactId( Parent target, Parent source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
+ }
+ }
+ }
+
+ protected void mergeParent_Version( Parent target, Parent source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getVersion() == null )
+ {
+ target.setVersion( src );
+ target.setLocation( "version", source.getLocation( "version" ) );
+ }
+ }
+ }
+
+ protected void mergeParent_RelativePath( Parent target, Parent source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getRelativePath();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getRelativePath() == null )
+ {
+ target.setRelativePath( src );
+ target.setLocation( "relativePath", source.getLocation( "relativePath" ) );
+ }
+ }
+ }
+
+ protected void mergeOrganization( Organization target, Organization source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeOrganization_Name( target, source, sourceDominant, context );
+ mergeOrganization_Url( target, source, sourceDominant, context );
+ }
+
+ protected void mergeOrganization_Name( Organization target, Organization source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getName();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getName() == null )
+ {
+ target.setName( src );
+ target.setLocation( "name", source.getLocation( "name" ) );
+ }
+ }
+ }
+
+ protected void mergeOrganization_Url( Organization target, Organization source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeLicense( License target, License source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeLicense_Name( target, source, sourceDominant, context );
+ mergeLicense_Url( target, source, sourceDominant, context );
+ mergeLicense_Distribution( target, source, sourceDominant, context );
+ mergeLicense_Comments( target, source, sourceDominant, context );
+ }
+
+ protected void mergeLicense_Name( License target, License source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getName();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getName() == null )
+ {
+ target.setName( src );
+ target.setLocation( "name", source.getLocation( "name" ) );
+ }
+ }
+ }
+
+ protected void mergeLicense_Url( License target, License source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeLicense_Distribution( License target, License source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getDistribution();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getDistribution() == null )
+ {
+ target.setDistribution( src );
+ target.setLocation( "distribution", source.getLocation( "distribution" ) );
+ }
+ }
+ }
+
+ protected void mergeLicense_Comments( License target, License source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getComments();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getComments() == null )
+ {
+ target.setComments( src );
+ target.setLocation( "comments", source.getLocation( "comments" ) );
+ }
+ }
+ }
+
+ protected void mergeMailingList( MailingList target, MailingList source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeMailingList_Name( target, source, sourceDominant, context );
+ mergeMailingList_Subscribe( target, source, sourceDominant, context );
+ mergeMailingList_Unsubscribe( target, source, sourceDominant, context );
+ mergeMailingList_Post( target, source, sourceDominant, context );
+ mergeMailingList_OtherArchives( target, source, sourceDominant, context );
+ }
+
+ protected void mergeMailingList_Name( MailingList target, MailingList source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getName();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getName() == null )
+ {
+ target.setName( src );
+ target.setLocation( "name", source.getLocation( "name" ) );
+ }
+ }
+ }
+
+ protected void mergeMailingList_Subscribe( MailingList target, MailingList source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getSubscribe();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getSubscribe() == null )
+ {
+ target.setSubscribe( src );
+ target.setLocation( "subscribe", source.getLocation( "subscribe" ) );
+ }
+ }
+ }
+
+ protected void mergeMailingList_Unsubscribe( MailingList target, MailingList source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getUnsubscribe();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUnsubscribe() == null )
+ {
+ target.setUnsubscribe( src );
+ target.setLocation( "unsubscribe", source.getLocation( "unsubscribe" ) );
+ }
+ }
+ }
+
+ protected void mergeMailingList_Post( MailingList target, MailingList source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getPost();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getPost() == null )
+ {
+ target.setPost( src );
+ target.setLocation( "post", source.getLocation( "post" ) );
+ }
+ }
+ }
+
+ protected void mergeMailingList_Archive( MailingList target, MailingList source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArchive();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArchive() == null )
+ {
+ target.setArchive( src );
+ target.setLocation( "archive", source.getLocation( "archive" ) );
+ }
+ }
+ }
+
+ protected void mergeMailingList_OtherArchives( MailingList target, MailingList source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getOtherArchives();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getOtherArchives();
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ merged.addAll( src );
+ target.setOtherArchives( merged );
+ }
+ }
+
+ protected void mergeDeveloper( Developer target, Developer source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeContributor( target, source, sourceDominant, context );
+ mergeDeveloper_Id( target, source, sourceDominant, context );
+ }
+
+ protected void mergeDeveloper_Id( Developer target, Developer source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getId() == null )
+ {
+ target.setId( src );
+ target.setLocation( "id", source.getLocation( "id" ) );
+ }
+ }
+ }
+
+ protected void mergeContributor( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeContributor_Name( target, source, sourceDominant, context );
+ mergeContributor_Email( target, source, sourceDominant, context );
+ mergeContributor_Url( target, source, sourceDominant, context );
+ mergeContributor_Organization( target, source, sourceDominant, context );
+ mergeContributor_OrganizationUrl( target, source, sourceDominant, context );
+ mergeContributor_Timezone( target, source, sourceDominant, context );
+ mergeContributor_Roles( target, source, sourceDominant, context );
+ mergeContributor_Properties( target, source, sourceDominant, context );
+ }
+
+ protected void mergeContributor_Name( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getName();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getName() == null )
+ {
+ target.setName( src );
+ target.setLocation( "name", source.getLocation( "name" ) );
+ }
+ }
+ }
+
+ protected void mergeContributor_Email( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getEmail();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getEmail() == null )
+ {
+ target.setEmail( src );
+ target.setLocation( "email", source.getLocation( "email" ) );
+ }
+ }
+ }
+
+ protected void mergeContributor_Url( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeContributor_Organization( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getOrganization();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getOrganization() == null )
+ {
+ target.setOrganization( src );
+ target.setLocation( "organization", source.getLocation( "organization" ) );
+ }
+ }
+ }
+
+ protected void mergeContributor_OrganizationUrl( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getOrganizationUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getOrganizationUrl() == null )
+ {
+ target.setOrganizationUrl( src );
+ target.setLocation( "organizationUrl", source.getLocation( "organizationUrl" ) );
+ }
+ }
+ }
+
+ protected void mergeContributor_Timezone( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getTimezone();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getTimezone() == null )
+ {
+ target.setTimezone( src );
+ target.setLocation( "timezone", source.getLocation( "timezone" ) );
+ }
+ }
+ }
+
+ protected void mergeContributor_Roles( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getRoles();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getRoles();
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ merged.addAll( src );
+ target.setRoles( merged );
+ }
+ }
+
+ protected void mergeContributor_Properties( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Properties merged = new Properties();
+ if ( sourceDominant )
+ {
+ merged.putAll( target.getProperties() );
+ merged.putAll( source.getProperties() );
+ }
+ else
+ {
+ merged.putAll( source.getProperties() );
+ merged.putAll( target.getProperties() );
+ }
+ target.setProperties( merged );
+ target.setLocation( "properties", InputLocation.merge( target.getLocation( "properties" ),
+ source.getLocation( "properties" ), sourceDominant ) );
+ }
+
+ protected void mergeIssueManagement( IssueManagement target, IssueManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeIssueManagement_Url( target, source, sourceDominant, context );
+ mergeIssueManagement_System( target, source, sourceDominant, context );
+ }
+
+ protected void mergeIssueManagement_System( IssueManagement target, IssueManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getSystem();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getSystem() == null )
+ {
+ target.setSystem( src );
+ target.setLocation( "system", source.getLocation( "system" ) );
+ }
+ }
+ }
+
+ protected void mergeIssueManagement_Url( IssueManagement target, IssueManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeScm( Scm target, Scm source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeScm_Url( target, source, sourceDominant, context );
+ mergeScm_Connection( target, source, sourceDominant, context );
+ mergeScm_DeveloperConnection( target, source, sourceDominant, context );
+ mergeScm_Tag( target, source, sourceDominant, context );
+ }
+
+ protected void mergeScm_Url( Scm target, Scm source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeScm_Connection( Scm target, Scm source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getConnection();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getConnection() == null )
+ {
+ target.setConnection( src );
+ target.setLocation( "connection", source.getLocation( "connection" ) );
+ }
+ }
+ }
+
+ protected void mergeScm_DeveloperConnection( Scm target, Scm source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getDeveloperConnection();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getDeveloperConnection() == null )
+ {
+ target.setDeveloperConnection( src );
+ target.setLocation( "developerConnection", source.getLocation( "developerConnection" ) );
+ }
+ }
+ }
+
+ protected void mergeScm_Tag( Scm target, Scm source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getTag();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getTag() == null )
+ {
+ target.setTag( src );
+ target.setLocation( "tag", source.getLocation( "tag" ) );
+ }
+ }
+ }
+
+ protected void mergeCiManagement( CiManagement target, CiManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeCiManagement_System( target, source, sourceDominant, context );
+ mergeCiManagement_Url( target, source, sourceDominant, context );
+ mergeCiManagement_Notifiers( target, source, sourceDominant, context );
+ }
+
+ protected void mergeCiManagement_System( CiManagement target, CiManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getSystem();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getSystem() == null )
+ {
+ target.setSystem( src );
+ target.setLocation( "system", source.getLocation( "system" ) );
+ }
+ }
+ }
+
+ protected void mergeCiManagement_Url( CiManagement target, CiManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeCiManagement_Notifiers( CiManagement target, CiManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Notifier> src = source.getNotifiers();
+ if ( !src.isEmpty() )
+ {
+ List<Notifier> tgt = target.getNotifiers();
+ Map<Object, Notifier> merged = new LinkedHashMap<Object, Notifier>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Notifier element : tgt )
+ {
+ Object key = getNotifierKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Notifier element : src )
+ {
+ Object key = getNotifierKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setNotifiers( new ArrayList<Notifier>( merged.values() ) );
+ }
+ }
+
+ protected void mergeNotifier( Notifier target, Notifier source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeNotifier_Type( target, source, sourceDominant, context );
+ mergeNotifier_Address( target, source, sourceDominant, context );
+ mergeNotifier_Configuration( target, source, sourceDominant, context );
+ mergeNotifier_SendOnError( target, source, sourceDominant, context );
+ mergeNotifier_SendOnFailure( target, source, sourceDominant, context );
+ mergeNotifier_SendOnSuccess( target, source, sourceDominant, context );
+ mergeNotifier_SendOnWarning( target, source, sourceDominant, context );
+ }
+
+ protected void mergeNotifier_Type( Notifier target, Notifier source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getType();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getType() == null )
+ {
+ target.setType( src );
+ }
+ }
+ }
+
+ protected void mergeNotifier_Address( Notifier target, Notifier source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getAddress();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getAddress() == null )
+ {
+ target.setAddress( src );
+ }
+ }
+ }
+
+ protected void mergeNotifier_Configuration( Notifier target, Notifier source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Properties merged = new Properties();
+ if ( sourceDominant )
+ {
+ merged.putAll( target.getConfiguration() );
+ merged.putAll( source.getConfiguration() );
+ }
+ else
+ {
+ merged.putAll( source.getConfiguration() );
+ merged.putAll( target.getConfiguration() );
+ }
+ target.setConfiguration( merged );
+ }
+
+ protected void mergeNotifier_SendOnError( Notifier target, Notifier source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ if ( sourceDominant )
+ {
+ target.setSendOnError( source.isSendOnError() );
+ }
+ }
+
+ protected void mergeNotifier_SendOnFailure( Notifier target, Notifier source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ if ( sourceDominant )
+ {
+ target.setSendOnFailure( source.isSendOnFailure() );
+ }
+ }
+
+ protected void mergeNotifier_SendOnSuccess( Notifier target, Notifier source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ if ( sourceDominant )
+ {
+ target.setSendOnSuccess( source.isSendOnSuccess() );
+ }
+ }
+
+ protected void mergeNotifier_SendOnWarning( Notifier target, Notifier source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ if ( sourceDominant )
+ {
+ target.setSendOnWarning( source.isSendOnWarning() );
+ }
+ }
+
+ protected void mergePrerequisites( Prerequisites target, Prerequisites source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergePrerequisites_Maven( target, source, sourceDominant, context );
+ }
+
+ protected void mergePrerequisites_Maven( Prerequisites target, Prerequisites source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getMaven();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getMaven() == null )
+ {
+ target.setMaven( src );
+ target.setLocation( "maven", source.getLocation( "maven" ) );
+ }
+ }
+ }
+
+ protected void mergeBuild( Build target, Build source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeBuildBase( target, source, sourceDominant, context );
+ mergeBuild_SourceDirectory( target, source, sourceDominant, context );
+ mergeBuild_ScriptSourceDirectory( target, source, sourceDominant, context );
+ mergeBuild_TestSourceDirectory( target, source, sourceDominant, context );
+ mergeBuild_OutputDirectory( target, source, sourceDominant, context );
+ mergeBuild_TestOutputDirectory( target, source, sourceDominant, context );
+ mergeBuild_Extensions( target, source, sourceDominant, context );
+ }
+
+ protected void mergeBuild_SourceDirectory( Build target, Build source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getSourceDirectory();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getSourceDirectory() == null )
+ {
+ target.setSourceDirectory( src );
+ target.setLocation( "sourceDirectory", source.getLocation( "sourceDirectory" ) );
+ }
+ }
+ }
+
+ protected void mergeBuild_ScriptSourceDirectory( Build target, Build source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getScriptSourceDirectory();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getScriptSourceDirectory() == null )
+ {
+ target.setScriptSourceDirectory( src );
+ target.setLocation( "scriptSourceDirectory", source.getLocation( "scriptSourceDirectory" ) );
+ }
+ }
+ }
+
+ protected void mergeBuild_TestSourceDirectory( Build target, Build source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getTestSourceDirectory();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getTestSourceDirectory() == null )
+ {
+ target.setTestSourceDirectory( src );
+ target.setLocation( "testSourceDirectory", source.getLocation( "testSourceDirectory" ) );
+ }
+ }
+ }
+
+ protected void mergeBuild_OutputDirectory( Build target, Build source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getOutputDirectory();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getOutputDirectory() == null )
+ {
+ target.setOutputDirectory( src );
+ target.setLocation( "outputDirectory", source.getLocation( "outputDirectory" ) );
+ }
+ }
+ }
+
+ protected void mergeBuild_TestOutputDirectory( Build target, Build source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getTestOutputDirectory();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getTestOutputDirectory() == null )
+ {
+ target.setTestOutputDirectory( src );
+ target.setLocation( "testOutputDirectory", source.getLocation( "testOutputDirectory" ) );
+ }
+ }
+ }
+
+ protected void mergeBuild_Extensions( Build target, Build source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Extension> src = source.getExtensions();
+ if ( !src.isEmpty() )
+ {
+ List<Extension> tgt = target.getExtensions();
+ Map<Object, Extension> merged = new LinkedHashMap<Object, Extension>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Extension element : tgt )
+ {
+ Object key = getExtensionKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Extension element : src )
+ {
+ Object key = getExtensionKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setExtensions( new ArrayList<Extension>( merged.values() ) );
+ }
+ }
+
+ protected void mergeExtension( Extension target, Extension source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeExtension_GroupId( target, source, sourceDominant, context );
+ mergeExtension_ArtifactId( target, source, sourceDominant, context );
+ mergeExtension_Version( target, source, sourceDominant, context );
+ }
+
+ protected void mergeExtension_GroupId( Extension target, Extension source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ target.setLocation( "groupId", source.getLocation( "groupId" ) );
+ }
+ }
+ }
+
+ protected void mergeExtension_ArtifactId( Extension target, Extension source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
+ }
+ }
+ }
+
+ protected void mergeExtension_Version( Extension target, Extension source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getVersion() == null )
+ {
+ target.setVersion( src );
+ target.setLocation( "version", source.getLocation( "version" ) );
+ }
+ }
+ }
+
+ protected void mergeBuildBase( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergePluginConfiguration( target, source, sourceDominant, context );
+ mergeBuildBase_DefaultGoal( target, source, sourceDominant, context );
+ mergeBuildBase_FinalName( target, source, sourceDominant, context );
+ mergeBuildBase_Directory( target, source, sourceDominant, context );
+ mergeBuildBase_Resources( target, source, sourceDominant, context );
+ mergeBuildBase_TestResources( target, source, sourceDominant, context );
+ mergeBuildBase_Filters( target, source, sourceDominant, context );
+ }
+
+ protected void mergeBuildBase_DefaultGoal( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getDefaultGoal();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getDefaultGoal() == null )
+ {
+ target.setDefaultGoal( src );
+ target.setLocation( "defaultGoal", source.getLocation( "defaultGoal" ) );
+ }
+ }
+ }
+
+ protected void mergeBuildBase_Directory( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getDirectory();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getDirectory() == null )
+ {
+ target.setDirectory( src );
+ target.setLocation( "directory", source.getLocation( "directory" ) );
+ }
+ }
+ }
+
+ protected void mergeBuildBase_FinalName( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getFinalName();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getFinalName() == null )
+ {
+ target.setFinalName( src );
+ target.setLocation( "finalName", source.getLocation( "finalName" ) );
+ }
+ }
+ }
+
+ protected void mergeBuildBase_Filters( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getFilters();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getFilters();
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ merged.addAll( src );
+ target.setFilters( merged );
+ }
+ }
+
+ protected void mergeBuildBase_Resources( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Resource> src = source.getResources();
+ if ( !src.isEmpty() )
+ {
+ List<Resource> tgt = target.getResources();
+ Map<Object, Resource> merged = new LinkedHashMap<Object, Resource>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Resource element : tgt )
+ {
+ Object key = getResourceKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Resource element : src )
+ {
+ Object key = getResourceKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setResources( new ArrayList<Resource>( merged.values() ) );
+ }
+ }
+
+ protected void mergeBuildBase_TestResources( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Resource> src = source.getTestResources();
+ if ( !src.isEmpty() )
+ {
+ List<Resource> tgt = target.getTestResources();
+ Map<Object, Resource> merged = new LinkedHashMap<Object, Resource>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Resource element : tgt )
+ {
+ Object key = getResourceKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Resource element : src )
+ {
+ Object key = getResourceKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setTestResources( new ArrayList<Resource>( merged.values() ) );
+ }
+ }
+
+ protected void mergePluginConfiguration( PluginConfiguration target, PluginConfiguration source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergePluginContainer( target, source, sourceDominant, context );
+ mergePluginConfiguration_PluginManagement( target, source, sourceDominant, context );
+ }
+
+ protected void mergePluginConfiguration_PluginManagement( PluginConfiguration target, PluginConfiguration source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ PluginManagement src = source.getPluginManagement();
+ if ( src != null )
+ {
+ PluginManagement tgt = target.getPluginManagement();
+ if ( tgt == null )
+ {
+ tgt = new PluginManagement();
+ target.setPluginManagement( tgt );
+ }
+ mergePluginManagement( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergePluginContainer( PluginContainer target, PluginContainer source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergePluginContainer_Plugins( target, source, sourceDominant, context );
+ }
+
+ protected void mergePluginContainer_Plugins( PluginContainer target, PluginContainer source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ List<Plugin> src = source.getPlugins();
+ if ( !src.isEmpty() )
+ {
+ List<Plugin> tgt = target.getPlugins();
+ Map<Object, Plugin> merged = new LinkedHashMap<Object, Plugin>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Plugin element : tgt )
+ {
+ Object key = getPluginKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Plugin element : src )
+ {
+ Object key = getPluginKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setPlugins( new ArrayList<Plugin>( merged.values() ) );
+ }
+ }
+
+ protected void mergePluginManagement( PluginManagement target, PluginManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergePluginContainer( target, source, sourceDominant, context );
+ }
+
+ protected void mergePlugin( Plugin target, Plugin source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeConfigurationContainer( target, source, sourceDominant, context );
+ mergePlugin_GroupId( target, source, sourceDominant, context );
+ mergePlugin_ArtifactId( target, source, sourceDominant, context );
+ mergePlugin_Version( target, source, sourceDominant, context );
+ mergePlugin_Extensions( target, source, sourceDominant, context );
+ mergePlugin_Dependencies( target, source, sourceDominant, context );
+ mergePlugin_Executions( target, source, sourceDominant, context );
+ }
+
+ protected void mergePlugin_GroupId( Plugin target, Plugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ target.setLocation( "groupId", source.getLocation( "groupId" ) );
+ }
+ }
+ }
+
+ protected void mergePlugin_ArtifactId( Plugin target, Plugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
+ }
+ }
+ }
+
+ protected void mergePlugin_Version( Plugin target, Plugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getVersion() == null )
+ {
+ target.setVersion( src );
+ target.setLocation( "version", source.getLocation( "version" ) );
+ }
+ }
+ }
+
+ protected void mergePlugin_Extensions( Plugin target, Plugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getExtensions();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getExtensions() == null )
+ {
+ target.setExtensions( src );
+ target.setLocation( "extensions", source.getLocation( "extensions" ) );
+ }
+ }
+ }
+
+ protected void mergePlugin_Dependencies( Plugin target, Plugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Dependency> src = source.getDependencies();
+ if ( !src.isEmpty() )
+ {
+ List<Dependency> tgt = target.getDependencies();
+ Map<Object, Dependency> merged = new LinkedHashMap<Object, Dependency>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Dependency element : tgt )
+ {
+ Object key = getDependencyKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Dependency element : src )
+ {
+ Object key = getDependencyKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setDependencies( new ArrayList<Dependency>( merged.values() ) );
+ }
+ }
+
+ protected void mergePlugin_Executions( Plugin target, Plugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<PluginExecution> src = source.getExecutions();
+ if ( !src.isEmpty() )
+ {
+ List<PluginExecution> tgt = target.getExecutions();
+
+ Map<Object, PluginExecution> merged =
+ new LinkedHashMap<Object, PluginExecution>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( PluginExecution element : tgt )
+ {
+ Object key = getPluginExecutionKey( element );
+ merged.put( key, element );
+ }
+
+ for ( PluginExecution element : src )
+ {
+ Object key = getPluginExecutionKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setExecutions( new ArrayList<PluginExecution>( merged.values() ) );
+ }
+ }
+
+ protected void mergeConfigurationContainer( ConfigurationContainer target, ConfigurationContainer source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeConfigurationContainer_Inherited( target, source, sourceDominant, context );
+ mergeConfigurationContainer_Configuration( target, source, sourceDominant, context );
+ }
+
+ protected void mergeConfigurationContainer_Inherited( ConfigurationContainer target, ConfigurationContainer source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getInherited();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getInherited() == null )
+ {
+ target.setInherited( src );
+ target.setLocation( "inherited", source.getLocation( "inherited" ) );
+ }
+ }
+ }
+
+ protected void mergeConfigurationContainer_Configuration( ConfigurationContainer target,
+ ConfigurationContainer source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Xpp3Dom src = (Xpp3Dom) source.getConfiguration();
+ if ( src != null )
+ {
+ Xpp3Dom tgt = (Xpp3Dom) target.getConfiguration();
+ if ( sourceDominant || tgt == null )
+ {
+ tgt = Xpp3Dom.mergeXpp3Dom( new Xpp3Dom( src ), tgt );
+ }
+ else
+ {
+ tgt = Xpp3Dom.mergeXpp3Dom( tgt, src );
+ }
+ target.setConfiguration( tgt );
+ }
+ }
+
+ protected void mergePluginExecution( PluginExecution target, PluginExecution source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeConfigurationContainer( target, source, sourceDominant, context );
+ mergePluginExecution_Id( target, source, sourceDominant, context );
+ mergePluginExecution_Phase( target, source, sourceDominant, context );
+ mergePluginExecution_Goals( target, source, sourceDominant, context );
+ }
+
+ protected void mergePluginExecution_Id( PluginExecution target, PluginExecution source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getId() == null )
+ {
+ target.setId( src );
+ target.setLocation( "id", source.getLocation( "id" ) );
+ }
+ }
+ }
+
+ protected void mergePluginExecution_Phase( PluginExecution target, PluginExecution source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getPhase();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getPhase() == null )
+ {
+ target.setPhase( src );
+ target.setLocation( "phase", source.getLocation( "phase" ) );
+ }
+ }
+ }
+
+ protected void mergePluginExecution_Goals( PluginExecution target, PluginExecution source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getGoals();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getGoals();
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ merged.addAll( src );
+ target.setGoals( merged );
+ }
+ }
+
+ protected void mergeResource( Resource target, Resource source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeFileSet( target, source, sourceDominant, context );
+ mergeResource_TargetPath( target, source, sourceDominant, context );
+ mergeResource_Filtering( target, source, sourceDominant, context );
+ mergeResource_MergeId( target, source, sourceDominant, context );
+ }
+
+ protected void mergeResource_TargetPath( Resource target, Resource source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getTargetPath();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getTargetPath() == null )
+ {
+ target.setTargetPath( src );
+ target.setLocation( "targetPath", source.getLocation( "targetPath" ) );
+ }
+ }
+ }
+
+ protected void mergeResource_Filtering( Resource target, Resource source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getFiltering();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getFiltering() == null )
+ {
+ target.setFiltering( src );
+ target.setLocation( "filtering", source.getLocation( "filtering" ) );
+ }
+ }
+ }
+
+ protected void mergeResource_MergeId( Resource target, Resource source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getMergeId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getMergeId() == null )
+ {
+ target.setMergeId( src );
+ }
+ }
+ }
+
+ protected void mergeFileSet( FileSet target, FileSet source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergePatternSet( target, source, sourceDominant, context );
+ mergeFileSet_Directory( target, source, sourceDominant, context );
+ }
+
+ protected void mergeFileSet_Directory( FileSet target, FileSet source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getDirectory();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getDirectory() == null )
+ {
+ target.setDirectory( src );
+ target.setLocation( "directory", source.getLocation( "directory" ) );
+ }
+ }
+ }
+
+ protected void mergePatternSet( PatternSet target, PatternSet source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergePatternSet_Includes( target, source, sourceDominant, context );
+ mergePatternSet_Excludes( target, source, sourceDominant, context );
+ }
+
+ protected void mergePatternSet_Includes( PatternSet target, PatternSet source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getIncludes();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getIncludes();
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ merged.addAll( src );
+ target.setIncludes( merged );
+ }
+ }
+
+ protected void mergePatternSet_Excludes( PatternSet target, PatternSet source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getExcludes();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getExcludes();
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ merged.addAll( src );
+ target.setExcludes( merged );
+ }
+ }
+
+ protected void mergeProfile( Profile target, Profile source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeModelBase( target, source, sourceDominant, context );
+ // TODO
+ }
+
+ protected void mergeActivation( Activation target, Activation source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ // TODO
+ }
+
+ protected Object getDependencyKey( Dependency dependency )
+ {
+ return dependency;
+ }
+
+ protected Object getPluginKey( Plugin plugin )
+ {
+ return plugin;
+ }
+
+ protected Object getPluginExecutionKey( PluginExecution pluginExecution )
+ {
+ return pluginExecution;
+ }
+
+ protected Object getReportPluginKey( ReportPlugin reportPlugin )
+ {
+ return reportPlugin;
+ }
+
+ protected Object getReportSetKey( ReportSet reportSet )
+ {
+ return reportSet;
+ }
+
+ protected Object getLicenseKey( License license )
+ {
+ return license;
+ }
+
+ protected Object getMailingListKey( MailingList mailingList )
+ {
+ return mailingList;
+ }
+
+ protected Object getDeveloperKey( Developer developer )
+ {
+ return developer;
+ }
+
+ protected Object getContributorKey( Contributor contributor )
+ {
+ return contributor;
+ }
+
+ protected Object getProfileKey( Profile profile )
+ {
+ return profile;
+ }
+
+ protected Object getRepositoryKey( Repository repository )
+ {
+ return getRepositoryBaseKey( repository );
+ }
+
+ protected Object getRepositoryBaseKey( RepositoryBase repositoryBase )
+ {
+ return repositoryBase;
+ }
+
+ protected Object getNotifierKey( Notifier notifier )
+ {
+ return notifier;
+ }
+
+ protected Object getResourceKey( Resource resource )
+ {
+ return resource;
+ }
+
+ protected Object getExtensionKey( Extension extension )
+ {
+ return extension;
+ }
+
+ protected Object getExclusionKey( Exclusion exclusion )
+ {
+ return exclusion;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/merge/package-info.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/merge/package-info.java
new file mode 100644
index 00000000..eaa2d174
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/merge/package-info.java
@@ -0,0 +1,24 @@
+// CHECKSTYLE_OFF: RegexpHeader
+/**
+ * POM merger.
+ */
+package org.apache.maven.model.merge;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/package-info.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/package-info.java
new file mode 100644
index 00000000..88d3fa07
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/package-info.java
@@ -0,0 +1,25 @@
+// CHECKSTYLE_OFF: RegexpHeader
+/**
+ * Maven POM (Project Object Model) classes, generated from <code>maven.mdo</code> model.
+ * The root class is {@link org.apache.maven.model.Model}.
+ */
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */ \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/mdo/maven.mdo b/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/mdo/maven.mdo
new file mode 100644
index 00000000..2821ea62
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/mdo/maven.mdo
@@ -0,0 +1,3649 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<!--
+ | Improvements:
+ |
+ | o add specification element to a field, this would be more a technical description of
+ | what is allowed in the field.
+ |
+ | o validators: there could be several levels of validation. Simple type validation could
+ | be done with a regex, but we need inter-field validation and rules which could be
+ | dealt with by something like drools.
+ |
+ | o i18n: would be good to be able to have names/descriptions/specifications
+ | in as many languages as possible. (see MNG-3626)
+ |
+ | o annotation mechanism so that changes to the model can be accurately tracked.
+ |
+ | o need to clean up all the descriptions, matching anything to the current project-descriptor.xml file and
+ | improving on that
+ |
+ | o use enums where appropriate (eg dependency scope)
+ |
+ | o a number of elements have a groupId/artifactId and sometimes version. It would be good to have them all extend one
+ | definition of these types
+ |
+-->
+<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0 http://modello.codehaus.org/xsd/modello-1.4.0.xsd"
+ xml.namespace="http://maven.apache.org/POM/${version}"
+ xml.schemaLocation="http://maven.apache.org/xsd/maven-${version}.xsd">
+ <id>maven</id>
+ <name>Maven</name>
+ <description>
+ <![CDATA[
+ <p>This is a reference for the Maven project descriptor used in Maven.</p>
+ <p>An XSD is available at:</p>
+ <ul>
+ <li><a href="http://maven.apache.org/xsd/maven-v3_0_0.xsd">http://maven.apache.org/xsd/maven-v3_0_0.xsd</a> for Maven 1.1.</li>
+ <li><a href="http://maven.apache.org/xsd/maven-4.0.0.xsd">http://maven.apache.org/xsd/maven-4.0.0.xsd</a> for Maven 2.0.</li>
+ </ul>
+ ]]>
+ </description>
+ <defaults>
+ <default>
+ <key>package</key>
+ <value>org.apache.maven.model</value>
+ </default>
+ </defaults>
+ <classes>
+ <class rootElement="true" xml.tagName="project" java.clone.hook="cloneHook">
+ <name>Model</name>
+ <superClass>ModelBase</superClass>
+ <description>
+ <![CDATA[
+ The <code>&lt;project&gt;</code> element is the root of the descriptor.
+ The following table lists all of the possible child elements.
+ ]]>
+ </description>
+ <version>3.0.0+</version>
+ <fields>
+
+ <!-- ====================================================================== -->
+ <!-- Model Version -->
+ <!-- ====================================================================== -->
+
+ <field>
+ <name>pomVersion</name>
+ <version>3.0.0</version>
+ <required>true</required>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ Declares to which version of project descriptor this POM conforms.
+ The only valid value is <code>3</code>.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>modelVersion</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <description>Declares to which version of project descriptor this POM conforms.</description>
+ <type>String</type>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Parent Model -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank">
+ <name>extend</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ The location of the parent project, if one exists. Values from the
+ parent project will be the default for this project if they are
+ left unspecified. The path may be absolute, or relative to the
+ current <code>project.xml</code> file. For example,
+ <code>&lt;extend&gt;${basedir}/../project.xml&lt;/extend&gt;</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field xdoc.separator="blank">
+ <name>parent</name>
+ <version>4.0.0+</version>
+ <description>The location of the parent project, if one exists. Values from the parent
+ project will be the default for this project if they are left unspecified. The location
+ is given as a group ID, artifact ID and version.</description>
+ <association>
+ <type>Parent</type>
+ </association>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- groupId/artifactId/Version/Packaging -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank">
+ <name>groupId</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>
+ <![CDATA[
+ A universally unique identifier for a project. It is normal to
+ use a fully-qualified package name to distinguish it from other
+ projects with a similar name (eg. <code>org.apache.maven</code>).
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>The identifier for this artifact that is unique within the group given by the
+ group ID. An artifact is something that is either produced or used by a project.
+ Examples of artifacts produced by Maven for a project include: JARs, source and binary
+ distributions, and WARs.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>id</name>
+ <version>3.0.0</version>
+ <required>true</required>
+ <description>
+ <![CDATA[
+ <b>Deprecated</b>. When used, this sets both the <code>groupId</code>
+ and <code>artifactId</code> elements if they were previously empty.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>currentVersion</name>
+ <description>The current version of the artifact produced by this project.</description>
+ <version>3.0.0</version>
+ <required>true</required>
+ <type>String</type>
+ </field>
+ <field>
+ <name>version</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <description>The current version of the artifact produced by this project.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>versions</name>
+ <version>3.0.0</version>
+ <description>Contains information on previous versions of the project.</description>
+ <association>
+ <type>Version</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>packaging</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The type of artifact this project produces, for example <code>jar</code>
+ <code>war</code>
+ <code>ear</code>
+ <code>pom</code>.
+ Plugins can create their own packaging, and
+ therefore their own packaging types,
+ so this list does not contain all possible types.
+ ]]>
+ </description>
+ <type>String</type>
+ <defaultValue>jar</defaultValue>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Elements which describe a project -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank">
+ <name>name</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>The full name of the project.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>shortDescription</name>
+ <version>3.0.0</version>
+ <description>A short description of the project. The short description should be limited
+ to a single line.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>description</name>
+ <version>3.0.0+</version>
+ <description>A detailed description of the project, used by Maven whenever it needs to
+ describe the project, such as on the web site. While this element can be specified as
+ CDATA to enable the use of HTML tags within the description, it is discouraged to allow
+ plain text representation. If you need to modify the index page of the generated web
+ site, you are able to specify your own instead of adjusting this text.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The URL to the project's homepage.
+ <br /><b>Default value is</b>: parent value [+ path adjustment] + artifactId
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>siteAddress</name>
+ <version>3.0.0</version>
+ <description>The hostname of the web server that hosts the project's web site. This is
+ used when the web site is deployed.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>siteDirectory</name>
+ <version>3.0.0</version>
+ <description>The directory on the web server where the public web site for this project
+ resides. This is used when the web site is deployed.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>inceptionYear</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>The year of the project's inception, specified with 4 digits. This value is
+ used when generating copyright notices as well as being informational.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>logo</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ The URL of the project's logo image. This can be an URL relative
+ to the base directory of the generated web site,
+ (e.g., <code>/images/project-logo.png</code>) or an absolute URL
+ (e.g., <code>http://my.corp/project-logo.png</code>). This is used
+ when generating the project documentation.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>organization</name>
+ <version>3.0.0+</version>
+ <description>This element describes various attributes of the organization to which the
+ project belongs. These attributes are utilized when documentation is created (for
+ copyright notices and links).</description>
+ <alias>organisation</alias>
+ <association>
+ <type>Organization</type>
+ </association>
+ </field>
+ <field>
+ <name>licenses</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ This element describes all of the licenses for this project.
+ Each license is described by a <code>license</code> element, which
+ is then described by additional elements.
+ Projects should only list the license(s) that applies to the project
+ and not the licenses that apply to dependencies.
+ If multiple licenses are listed, it is assumed that the user can select
+ any of them, not that they must accept all.
+ ]]>
+ </description>
+ <association>
+ <type>License</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>developers</name>
+ <version>3.0.0+</version>
+ <description>Describes the committers of a project.</description>
+ <association>
+ <type>Developer</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>contributors</name>
+ <version>3.0.0+</version>
+ <description>Describes the contributors to a project that are not yet committers.</description>
+ <association>
+ <type>Contributor</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>mailingLists</name>
+ <version>3.0.0+</version>
+ <description>Contains information about a project's mailing lists.</description>
+ <association>
+ <type>MailingList</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Build prerequisites -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank">
+ <name>prerequisites</name>
+ <version>4.0.0+</version>
+ <description>Describes the prerequisites in the build environment for this project.</description>
+ <association>
+ <type>Prerequisites</type>
+ </association>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- SCM -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank">
+ <name>branches</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ Contains information on SCM branches of the project.
+ ]]>
+ </description>
+ <association>
+ <type>Branch</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>repository</name>
+ <version>3.0.0</version>
+ <description>Specification for the SCM used by the project, such as CVS, Subversion, etc.</description>
+ <association>
+ <type>Repository</type>
+ </association>
+ </field>
+ <field xdoc.separator="blank" xml.insertParentFieldsUpTo="modules">
+ <name>scm</name>
+ <version>4.0.0+</version>
+ <description>Specification for the SCM used by the project, such as CVS, Subversion, etc.</description>
+ <association>
+ <type>Scm</type>
+ </association>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Issue Tracking -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank">
+ <name>issueTrackingUrl</name>
+ <version>3.0.0</version>
+ <description>The URL of the project's issue tracking system.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>issueManagement</name>
+ <version>4.0.0+</version>
+ <description>The project's issue management system information.</description>
+ <association>
+ <type>IssueManagement</type>
+ </association>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- CI Management -->
+ <!-- ====================================================================== -->
+
+ <field>
+ <name>gumpRepositoryId</name>
+ <version>3.0.0</version>
+ <description>This is the repository identifier in Gump that this project is part of.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>ciManagement</name>
+ <version>4.0.0+</version>
+ <description>The project's continuous integration information.</description>
+ <association>
+ <type>CiManagement</type>
+ </association>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Distribution Management -->
+ <!-- ====================================================================== -->
+
+ <field>
+ <name>distributionSite</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ The server where the final distributions will be published. This is used when the
+ distributions are deployed. If this isn't defined, the central repository is used instead as
+ determined by <code>maven.repo.central</code> and <code>maven.repo.central.directory</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>distributionDirectory</name>
+ <version>3.0.0</version>
+ <description>The directory on the web server where the final distributions will be
+ published. This is used when the distributions are deployed.</description>
+ <type>String</type>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Specific version 3 -->
+ <!-- ====================================================================== -->
+
+ <field>
+ <name>packageGroups</name>
+ <version>3.0.0</version>
+ <description>Package groups required for complete javadocs.</description>
+ <association>
+ <type>PackageGroup</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>reports</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ This element includes the specification of reports to be
+ included in a Maven-generated site. These reports will be run
+ when a user executes <code>maven site</code>. All of the
+ reports will be included in the navigation bar for browsing in
+ the order they are specified.
+ ]]>
+ </description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>properties</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ Project properties that will be used by various plugins.
+ The format is <code>&lt;name&gt;value&lt;/name&gt;</code>.
+ ]]>
+ </description>
+ <type>Properties</type>
+ <association xml.mapStyle="inline">
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xml.tagName="package">
+ <name>packageName</name>
+ <version>3.0.0</version>
+ <type>String</type>
+ <description>The Java package name of the project. This value is used when generating
+ JavaDoc.</description>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Build -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank" xml.insertParentFieldsUpTo="pluginRepositories">
+ <name>build</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>Information required to build the project.</description>
+ <association>
+ <type>Build</type>
+ </association>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Profiles -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank" xml.insertParentFieldsUpTo="reporting">
+ <name>profiles</name>
+ <version>4.0.0+</version>
+ <description>A listing of project-local build profiles which will modify the build process
+ when activated.</description>
+ <association>
+ <type>Profile</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>3.0.0</version>
+ <code>
+ <![CDATA[
+ public void setVersion(String version)
+ {
+ this.currentVersion = version;
+ }
+
+ public String getVersion()
+ {
+ return currentVersion;
+ }
+
+ /* We need this because we can't use package as a field name.*/
+ public void setPackage(String packageName)
+ {
+ this.packageName = packageName;
+ }
+
+ public String getPackage()
+ {
+ return packageName;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ private void cloneHook( Model copy )
+ {
+ copy.pomFile = pomFile;
+ }
+
+ /**
+ * The POM from which this model originated. This is transient runtime state and therefore not managed by Modello.
+ */
+ private java.io.File pomFile;
+
+ /**
+ * Gets the POM file for the corresponding project (if any).
+ *
+ * @return The POM file from which this model originated or {@code null} if this model does not belong to a local
+ * project (e.g. describes the metadata of some artifact from the repository).
+ */
+ public java.io.File getPomFile()
+ {
+ return pomFile;
+ }
+
+ public void setPomFile( java.io.File pomFile )
+ {
+ this.pomFile = ( pomFile != null ) ? pomFile.getAbsoluteFile() : null;
+ }
+
+ /**
+ * Gets the base directory for the corresponding project (if any).
+ *
+ * @return The base directory for the corresponding project or {@code null} if this model does not belong to a local
+ * project (e.g. describes the metadata of some artifact from the repository).
+ */
+ public java.io.File getProjectDirectory()
+ {
+ return ( pomFile != null ) ? pomFile.getParentFile() : null;
+ }
+
+ /**
+ * @return the model id as <code>groupId:artifactId:packaging:version</code>
+ */
+ public String getId()
+ {
+ StringBuilder id = new StringBuilder( 64 );
+
+ id.append( ( getGroupId() == null ) ? "[inherited]" : getGroupId() );
+ id.append( ":" );
+ id.append( getArtifactId() );
+ id.append( ":" );
+ id.append( getPackaging() );
+ id.append( ":" );
+ id.append( ( getVersion() == null ) ? "[inherited]" : getVersion() );
+
+ return id.toString();
+ }
+
+ @Override
+ public String toString()
+ {
+ return getId();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep">
+ <name>ModelBase</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ Base class for the <code>Model</code> and the <code>Profile</code> objects.
+ ]]>
+ </description>
+ <fields>
+ <field xdoc.separator="blank">
+ <name>modules</name>
+ <version>4.0.0+</version>
+ <description>The modules (sometimes called subprojects) to build as a part of this
+ project. Each module listed is a relative path to the directory containing the module.
+ To be consistent with the way default urls are calculated from parent, it is recommended
+ to have module names match artifact ids.</description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>distributionManagement</name>
+ <version>4.0.0+</version>
+ <description>Distribution information for a project that enables deployment of the site
+ and artifacts to remote web servers and repositories respectively.</description>
+ <association>
+ <type>DistributionManagement</type>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>properties</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Properties that can be used throughout the POM as a substitution, and
+ are used as filters in resources if enabled.
+ The format is <code>&lt;name&gt;value&lt;/name&gt;</code>.
+ ]]>
+ </description>
+ <type>Properties</type>
+ <association xml.mapStyle="inline">
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>dependencyManagement</name>
+ <version>4.0.0+</version>
+ <required>false</required>
+ <description>Default dependency information for projects that inherit from this one. The
+ dependencies in this section are not immediately resolved. Instead, when a POM derived
+ from this one declares a dependency described by a matching groupId and artifactId, the
+ version and other values from this section are used for that dependency if they were not
+ already specified.</description>
+ <association>
+ <type>DependencyManagement</type>
+ </association>
+ </field>
+ <field>
+ <name>dependencies</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ This element describes all of the dependencies associated with a
+ project.
+ These dependencies are used to construct a classpath for your
+ project during the build process. They are automatically downloaded from the
+ repositories defined in this project.
+ See <a href="http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html">the
+ dependency mechanism</a> for more information.
+ ]]>
+ </description>
+ <association>
+ <type>Dependency</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>repositories</name>
+ <version>4.0.0+</version>
+ <description>The lists of the remote repositories for discovering dependencies and
+ extensions.</description>
+ <association>
+ <type>Repository</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>pluginRepositories</name>
+ <version>4.0.0+</version>
+ <description>The lists of the remote repositories for discovering plugins for builds and
+ reports.</description>
+ <association>
+ <type>Repository</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>reports</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ <b>Deprecated</b>. Now ignored by Maven.
+ ]]>
+ </description>
+ <type>DOM</type>
+ </field>
+ <field>
+ <name>reporting</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ This element includes the specification of report plugins to use
+ to generate the reports on the Maven-generated site.
+ These reports will be run when a user executes <code>mvn site</code>.
+ All of the reports will be included in the navigation bar for browsing.
+ ]]>
+ </description>
+ <association>
+ <type>Reporting</type>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>Branch</name>
+ <version>3.0.0</version>
+ <description>Contains information on the SCM branches of the project.</description>
+ <fields>
+ <field>
+ <name>tag</name>
+ <version>3.0.0</version>
+ <required>true</required>
+ <description>The branch tag in the version control system (e.g. cvs) used by the project
+ for the source code associated with this branch of the project.</description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>PluginContainer</name>
+ <version>3.0.0+</version>
+ <description>Contains the plugins informations for the project.</description>
+ <fields>
+ <field>
+ <name>plugins</name>
+ <version>4.0.0+</version>
+ <description>The list of plugins to use.</description>
+ <association>
+ <type>Plugin</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ java.util.Map<String, Plugin> pluginMap;
+
+ /**
+ * Reset the <code>pluginsMap</code> field to <code>null</code>
+ */
+ public synchronized void flushPluginMap()
+ {
+ this.pluginMap = null;
+ }
+
+ /**
+ * @return a Map of plugins field with <code>Plugins#getKey()</code> as key
+ * @see org.apache.maven.model.Plugin#getKey()
+ */
+ public synchronized java.util.Map<String, Plugin> getPluginsAsMap()
+ {
+ if ( pluginMap == null )
+ {
+ pluginMap = new java.util.LinkedHashMap<String, Plugin>();
+ if ( plugins != null )
+ {
+ for ( java.util.Iterator<Plugin> it = plugins.iterator(); it.hasNext(); )
+ {
+ Plugin plugin = (Plugin) it.next();
+ pluginMap.put( plugin.getKey(), plugin );
+ }
+ }
+ }
+
+ return pluginMap;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <name>PluginConfiguration</name>
+ <version>3.0.0+</version>
+ <superClass>PluginContainer</superClass>
+ <description>Contains the plugins management informations for the project.</description>
+ <fields>
+ <!-- [ jdcasey:06-Mar-2005 ] Added to handle version management, etc. for
+ | plugins to be used in sub-projects. -->
+ <field>
+ <name>pluginManagement</name>
+ <version>4.0.0+</version>
+ <required>false</required>
+ <description>Default plugin information to be made available for reference by projects
+ derived from this one. This plugin configuration will not be resolved or bound to the
+ lifecycle unless referenced. Any local configuration for a given plugin will override
+ the plugin's entire definition here.</description>
+ <association>
+ <type>PluginManagement</type>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>BuildBase</name>
+ <version>3.0.0+</version>
+ <superClass>PluginConfiguration</superClass>
+ <description>Generic informations for a build.</description>
+ <fields>
+ <field>
+ <name>defaultGoal</name>
+ <version>3.0.0+</version>
+ <description>The default goal (or phase in Maven 2) to execute when none is specified for
+ the project. Note that in case of a multi-module build, only the default goal of the top-level
+ project is relevant, i.e. the default goals of child modules are ignored. Since Maven 3,
+ multiple goals/phases can be separated by whitespace.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>resources</name>
+ <version>3.0.0+</version>
+ <description>This element describes all of the classpath resources such as properties
+ files associated with a project. These resources are often included in the final
+ package.</description>
+ <association>
+ <type>Resource</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>testResources</name>
+ <version>4.0.0+</version>
+ <description>This element describes all of the classpath resources such as properties
+ files associated with a project's unit tests.</description>
+ <association>
+ <type>Resource</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>directory</name>
+ <version>4.0.0+</version>
+ <description>The directory where all files generated by the build are placed.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>finalName</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The filename (excluding the extension, and with no path information) that
+ the produced artifact will be called.
+ The default value is <code>${artifactId}-${version}</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>filters</name>
+ <version>4.0.0+</version>
+ <description>The list of filter properties files that are used when filtering is enabled.</description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>Build</name>
+ <version>3.0.0+</version>
+ <superClass>BuildBase</superClass>
+ <description>
+ <![CDATA[
+ The <code>&lt;build&gt;</code> element contains informations required to build the project.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>nagEmailAddress</name>
+ <version>3.0.0</version>
+ <description>An address to which notifications regarding the status of builds for this
+ project can be sent. This is intended for use by tools which do unattended builds, for
+ example those providing for continuous integration.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>sourceDirectory</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>This element specifies a directory containing the source of the project. The
+ generated build system will compile the source in this directory when the project is
+ built. The path given is relative to the project descriptor.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>scriptSourceDirectory</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <description>This element specifies a directory containing the script sources of the
+ project. This directory is meant to be different from the sourceDirectory, in that its
+ contents will be copied to the output directory in most cases (since scripts are
+ interpreted rather than compiled).</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>unitTestSourceDirectory</name>
+ <version>3.0.0</version>
+ <required>true</required>
+ <description>This element specifies a directory containing the unit test source of the
+ project. The generated build system will compile these directories when the project is
+ being tested. The path given is relative to the project descriptor.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>testSourceDirectory</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <description>This element specifies a directory containing the unit test source of the
+ project. The generated build system will compile these directories when the project is
+ being tested. The path given is relative to the project descriptor.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>aspectSourceDirectory</name>
+ <version>3.0.0</version>
+ <description>This element specifies a directory containing Aspect sources of the project.
+ The generated build system will compile the Aspects in this directory when the project
+ is built if Aspects have been enabled. The path given is relative to the project
+ descriptor.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>integrationUnitTestSourceDirectory</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ This element is <b>deprecated</b> and should no longer be used.
+ Initially it was used by the first Cactus plugin. Now
+ the location of the Cactus test sources is defined
+ through a plugin property. See the Cactus plugin
+ <a href="http://jakarta.apache.org/cactus/integration/maven/properties.html">properties</a>
+ page.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>sourceModifications</name>
+ <version>3.0.0</version>
+ <required>true</required>
+ <description>This element describes all of the sourceModifications associated with a
+ project. These modifications are used to exclude or include various source depending on
+ the environment the build is running in.</description>
+ <association>
+ <type>SourceModification</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>unitTest</name>
+ <version>3.0.0</version>
+ <required>true</required>
+ <description>This element specifies unit tests associated with the project.</description>
+ <defaultValue>new UnitTest()</defaultValue>
+ <association>
+ <type>UnitTest</type>
+ </association>
+ </field>
+ <field>
+ <name>outputDirectory</name>
+ <version>4.0.0+</version>
+ <description>The directory where compiled application classes are placed.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>testOutputDirectory</name>
+ <version>4.0.0+</version>
+ <description>The directory where compiled test classes are placed.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>extensions</name>
+ <version>4.0.0+</version>
+ <description>A set of build extensions to use from this project.</description>
+ <association>
+ <type>Extension</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>CiManagement</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The <code>&lt;CiManagement&gt;</code> element contains informations required to the
+ continuous integration system of the project.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>system</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The name of the continuous integration system, e.g. <code>continuum</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>4.0.0+</version>
+ <description>URL for the continuous integration system used by the project if it has a web
+ interface.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>notifiers</name>
+ <version>4.0.0+</version>
+ <description>Configuration for notifying developers/users when a build is unsuccessful,
+ including user information and notification mode.</description>
+ <association>
+ <multiplicity>*</multiplicity>
+ <type>Notifier</type>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>Notifier</name>
+ <description>Configures one method for notifying users/developers when a build breaks.</description>
+ <version>4.0.0+</version>
+ <fields>
+ <field>
+ <name>type</name>
+ <version>4.0.0+</version>
+ <defaultValue>mail</defaultValue>
+ <type>String</type>
+ <description>The mechanism used to deliver notifications.</description>
+ </field>
+ <field>
+ <name>sendOnError</name>
+ <version>4.0.0+</version>
+ <defaultValue>true</defaultValue>
+ <type>boolean</type>
+ <description>Whether to send notifications on error.</description>
+ </field>
+ <field>
+ <name>sendOnFailure</name>
+ <version>4.0.0+</version>
+ <defaultValue>true</defaultValue>
+ <type>boolean</type>
+ <description>Whether to send notifications on failure.</description>
+ </field>
+ <field>
+ <name>sendOnSuccess</name>
+ <version>4.0.0+</version>
+ <defaultValue>true</defaultValue>
+ <type>boolean</type>
+ <description>Whether to send notifications on success.</description>
+ </field>
+ <field>
+ <name>sendOnWarning</name>
+ <version>4.0.0+</version>
+ <defaultValue>true</defaultValue>
+ <type>boolean</type>
+ <description>Whether to send notifications on warning.</description>
+ </field>
+ <!-- TODO: Remove it after continuum alpha-3 release -->
+ <field>
+ <name>address</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ <b>Deprecated</b>. Where to send the notification to - eg email address.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>configuration</name>
+ <description>Extended configuration specific to this notifier goes here.</description>
+ <type>Properties</type>
+ <association xml.mapStyle="inline">
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>Contributor</name>
+ <description>Description of a person who has contributed to the project, but who does not have
+ commit privileges. Usually, these contributions come in the form of patches submitted.</description>
+ <version>3.0.0+</version>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>3.0.0+</version>
+ <description>The full name of the contributor.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>email</name>
+ <version>3.0.0+</version>
+ <description>The email address of the contributor.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>3.0.0+</version>
+ <description>The URL for the homepage of the contributor.</description>
+ <type>String</type>
+ </field>
+ <!-- TODO: should this just be a single Organization element -->
+ <field>
+ <name>organization</name>
+ <alias>organisation</alias>
+ <version>3.0.0+</version>
+ <description>The organization to which the contributor belongs.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>organizationUrl</name>
+ <alias>organisationUrl</alias>
+ <version>3.0.0+</version>
+ <description>The URL of the organization.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>roles</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The roles the contributor plays in the project. Each role is described by a
+ <code>role</code> element, the body of which is a role name. This can also be used to
+ describe the contribution.
+ ]]>
+ </description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>timezone</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The timezone the contributor is in. Typically, this is a number in the range
+ <a href="http://en.wikipedia.org/wiki/UTC%E2%88%9212:00">-12</a> to <a href="http://en.wikipedia.org/wiki/UTC%2B14:00">+14</a>
+ or a valid time zone id like "America/Montreal" (UTC-05:00) or "Europe/Paris" (UTC+01:00).
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>properties</name>
+ <version>3.0.0+</version>
+ <description>Properties about the contributor, such as an instant messenger handle.</description>
+ <type>Properties</type>
+ <association xml.mapStyle="inline">
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>Dependency</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The <code>&lt;dependency&gt;</code> element contains information about a dependency
+ of the project.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>3.0.0</version>
+ <required>true</required>
+ <description>
+ <![CDATA[
+ <b>Deprecated</b>. Please use <code>groupId</code> and
+ <code>artifactId</code> together instead.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>groupId</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>
+ <![CDATA[
+ The project group that produced the dependency, e.g.
+ <code>org.apache.maven</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>
+ <![CDATA[
+ The unique id for an artifact produced by the project group, e.g.
+ <code>maven-artifact</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>version</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The version of the dependency, e.g. <code>3.2.1</code>. In Maven 2, this can also be
+ specified as a range of versions.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>3.0.0</version>
+ <description>This url will be provided to the user if the jar file cannot be downloaded
+ from the central repository.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>jar</name>
+ <version>3.0.0</version>
+ <description>Literal name of the artifact in the repository. Used to override the
+ calculated artifact name.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>type</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ The type of dependency. While it
+ usually represents the extension on the filename of the dependency,
+ that is not always the case.
+ Some examples are <code>jar</code>, <code>war</code>, and <code>plugin</code>.
+ A dependency of type <code>plugin</code> is loaded as a Maven plugin and
+ not added to the project build classpath.
+ ]]>
+ </description>
+ <type>String</type>
+ <defaultValue>jar</defaultValue>
+ </field>
+ <field>
+ <name>type</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The type of dependency. While it
+ usually represents the extension on the filename of the dependency,
+ that is not always the case. A type can be mapped to a different
+ extension and a classifier.
+ The type often corresponds to the packaging used, though this is also
+ not always the case.
+ Some examples are <code>jar</code>, <code>war</code>, <code>ejb-client</code>
+ and <code>test-jar</code>: see <a href="../maven-core/artifact-handlers.html">default
+ artifact handlers</a> for a list.
+ New types can be defined by plugins that set
+ <code>extensions</code> to <code>true</code>, so this is not a complete list.
+ ]]>
+ </description>
+ <type>String</type>
+ <defaultValue>jar</defaultValue>
+ </field>
+ <field>
+ <name>classifier</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The classifier of the dependency. It is appended to
+ the filename after the version. This allows:
+ <ul>
+ <li>refering to attached artifact, for example <code>sources</code> and <code>javadoc</code>:
+ see <a href="../maven-core/artifact-handlers.html">default artifact handlers</a> for a list,</li>
+ <li>distinguishing two artifacts
+ that belong to the same POM but were built differently.
+ For example, <code>jdk14</code> and <code>jdk15</code>.</li>
+ </ul>
+ ]]>
+ </description>
+ <type>String</type>
+ <required>false</required>
+ </field>
+ <field>
+ <name>properties</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ Properties about the dependency. Various plugins allow you to
+ mark dependencies with properties. For example the war plugin looks for a
+ <code>war.bundle</code> property, and if found will include the
+ dependency in <code>WEB-INF/lib</code>.
+ ]]>
+ </description>
+ <type>Properties</type>
+ <association xml.mapStyle="inline">
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>scope</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The scope of the dependency - <code>compile</code>, <code>runtime</code>,
+ <code>test</code>, <code>system</code>, and <code>provided</code>. Used to
+ calculate the various classpaths used for compilation, testing, and so on.
+ It also assists in determining which artifacts to include in a distribution of
+ this project. For more information, see
+ <a href="http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html">the
+ dependency mechanism</a>.
+ ]]>
+ </description>
+ <type>String</type>
+ <!-- This default has to be enforced at the maven-artifact layer, to allow
+ | injection of defaults from <dependencyManagement/>.
+ | TODO: how can we document it?
+ |-->
+ <!-- defaultValue>compile</defaultValue -->
+ </field>
+ <field>
+ <name>systemPath</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ FOR SYSTEM SCOPE ONLY. Note that use of this property is <b>discouraged</b>
+ and may be replaced in later versions. This specifies the path on the filesystem
+ for this dependency.
+ Requires an absolute path for the value, not relative.
+ Use a property that gives the machine specific absolute path,
+ e.g. <code>${java.home}</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>exclusions</name>
+ <version>4.0.0+</version>
+ <description>Lists a set of artifacts that should be excluded from this dependency's
+ artifact list when it comes to calculating transitive dependencies.</description>
+ <association>
+ <type>Exclusion</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>optional</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Indicates the dependency is optional for use of this library. While the
+ version of the dependency will be taken into account for dependency calculation if the
+ library is used elsewhere, it will not be passed on transitively. Note: While the type
+ of this field is <code>String</code> for technical reasons, the semantic type is actually
+ <code>Boolean</code>. Default value is <code>false</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>3.0.0</version>
+ <code>
+ <![CDATA[
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return groupId + "/" + type + "s:" + artifactId + "-" + version;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ public boolean isOptional()
+ {
+ return ( optional != null ) ? Boolean.parseBoolean( optional ) : false;
+ }
+
+ public void setOptional( boolean optional )
+ {
+ this.optional = String.valueOf( optional );
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return "Dependency {groupId=" + groupId + ", artifactId=" + artifactId + ", version=" + version + ", type=" + type + "}";
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ private String managementKey;
+
+ /**
+ * @return the management key as <code>groupId:artifactId:type</code>
+ */
+ public String getManagementKey()
+ {
+ if ( managementKey == null )
+ {
+ managementKey = groupId + ":" + artifactId + ":" + type + ( classifier != null ? ":" + classifier : "" );
+ }
+ return managementKey;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ <codeSegment>
+ <version>3.0.0</version>
+ <code>
+ <![CDATA[
+ /**
+ * @return the key as <code>id:type</code>
+ */
+ public String getKey()
+ {
+ return getId() + ":" + getType();
+ }
+
+ /**
+ * @return the groupId as artifact directory
+ */
+ public String getArtifactDirectory()
+ {
+ return getGroupId();
+ }
+
+ /**
+ * @return the artifact name as <code>artifactId-version.extension</code> if &lt;jar/&gt; not set
+ */
+ public String getArtifact()
+ {
+ // If the jar name has been explicty set then use that. This
+ // is when the <jar/> element is explicity used in the POM.
+ if ( getJar() != null)
+ {
+ return getJar();
+ }
+
+ String artifact;
+
+ if ("ejb-client".equals(getType())) {
+ artifact = getArtifactId() + "-" + getVersion() + "-client." + getExtension();
+ } else {
+ artifact = getArtifactId() + "-" + getVersion() + "." + getExtension();
+ }
+
+ return artifact;
+ }
+
+ public String getTypeDirectory()
+ {
+ String path;
+ if (getType().equals("ejb-client")) {
+ path = "ejbs";
+ } else {
+ path = getType() + "s";
+ }
+
+ return path;
+ }
+
+ public String getExtension()
+ {
+ if ("ejb".equals(getType()) || "ejb-client".equals(getType()) || "plugin".equals(getType()) || "aspect".equals(getType()) || "uberjar".equals(getType())) return "jar";
+ return getType();
+ }
+
+ public boolean isAddedToClasspath()
+ {
+ return ("jar".equals(getType()) || "ejb".equals(getType()) || "ejb-client".equals(getType()) || "sar".equals(getType()));
+ }
+
+ public boolean isPlugin()
+ {
+ return ("plugin".equals(getType()));
+ }
+
+ public String getProperty( String property )
+ {
+ return getProperties().getProperty( property );
+ }
+
+ /**
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals( Object o )
+ {
+ if ( this == o )
+ {
+ return true;
+ }
+
+ if ( !( o instanceof Dependency ) )
+ {
+ return false;
+ }
+
+ Dependency d = (Dependency) o;
+ return getId().equals( d.getId() );
+ }
+
+ /**
+ * @see java.lang.Object#hashCode()
+ */
+ public int hashCode()
+ {
+ return getId().hashCode();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <superClass>Contributor</superClass>
+ <name>Developer</name>
+ <description>Information about one of the committers on this project.</description>
+ <version>3.0.0+</version>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>3.0.0+</version>
+ <description>The unique ID of the developer in the SCM.</description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>Exclusion</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The <code>&lt;exclusion&gt;</code> element contains informations required to exclude
+ an artifact to the project.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>artifactId</name>
+ <version>4.0.0+</version>
+ <description>The artifact ID of the project to exclude.</description>
+ <type>String</type>
+ <required>true</required>
+ </field>
+ <field>
+ <name>groupId</name>
+ <version>4.0.0+</version>
+ <description>The group ID of the project to exclude.</description>
+ <type>String</type>
+ <required>true</required>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>IssueManagement</name>
+ <description>Information about the issue tracking (or bug tracking) system used to manage this
+ project.</description>
+ <version>4.0.0+</version>
+ <fields>
+ <field>
+ <name>system</name>
+ <version>4.0.0+</version>
+ <description>The name of the issue management system, e.g. Bugzilla</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>4.0.0+</version>
+ <description>URL for the issue management system used by the project.</description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>DistributionManagement</name>
+ <version>4.0.0+</version>
+ <description>This elements describes all that pertains to distribution for a project. It is
+ primarily used for deployment of artifacts and the site produced by the build.</description>
+ <fields>
+ <field>
+ <name>repository</name>
+ <version>4.0.0+</version>
+ <description>Information needed to deploy the artifacts generated by the project to a
+ remote repository.</description>
+ <association>
+ <type>DeploymentRepository</type>
+ </association>
+ </field>
+ <field>
+ <name>snapshotRepository</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Where to deploy snapshots of artifacts to. If not given, it defaults to the
+ <code>repository</code> element.
+ ]]>
+ </description>
+ <association>
+ <type>DeploymentRepository</type>
+ </association>
+ </field>
+ <field>
+ <name>site</name>
+ <description>Information needed for deploying the web site of the project.</description>
+ <version>4.0.0+</version>
+ <association>
+ <type>Site</type>
+ </association>
+ </field>
+ <field>
+ <name>downloadUrl</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The URL of the project's download page. If not given users will be
+ referred to the homepage given by <code>url</code>.
+ This is given to assist in locating artifacts that are not in the repository due to
+ licensing restrictions.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>relocation</name>
+ <version>4.0.0+</version>
+ <description>Relocation information of the artifact if it has been moved to a new group ID
+ and/or artifact ID.</description>
+ <association>
+ <type>Relocation</type>
+ </association>
+ </field>
+ <field>
+ <name>status</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Gives the status of this artifact in the remote repository.
+ This must not be set in your local project, as it is updated by
+ tools placing it in the reposiory. Valid values are: <code>none</code> (default),
+ <code>converted</code> (repository manager converted this from an Maven 1 POM),
+ <code>partner</code>
+ (directly synced from a partner Maven 2 repository), <code>deployed</code> (was deployed from a Maven 2
+ instance), <code>verified</code> (has been hand verified as correct and final).
+ ]]>
+ </description>
+ <required>false</required>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>License</name>
+ <description>Describes the licenses for this project. This is used to generate the license
+ page of the project's web site, as well as being taken into consideration in other reporting
+ and validation. The licenses listed for the project are that of the project itself, and not
+ of dependencies.</description>
+ <version>3.0.0+</version>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>3.0.0+</version>
+ <description>The full legal name of the license.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>3.0.0+</version>
+ <description>The official url for the license text.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>distribution</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The primary method by which this project may be distributed.
+ <dl>
+ <dt>repo</dt>
+ <dd>may be downloaded from the Maven repository</dd>
+ <dt>manual</dt>
+ <dd>user must manually download and install the dependency.</dd>
+ </dl>
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>comments</name>
+ <description>Addendum information pertaining to this license.</description>
+ <version>3.0.0+</version>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>MailingList</name>
+ <version>3.0.0+</version>
+ <description>This element describes all of the mailing lists associated with a project. The
+ auto-generated site references this information.</description>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The name of the mailing list.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>subscribe</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The email address or link that can be used to subscribe to
+ the mailing list. If this is an email address, a
+ <code>mailto:</code> link will automatically be created
+ when the documentation is created.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>unsubscribe</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The email address or link that can be used to unsubscribe to
+ the mailing list. If this is an email address, a
+ <code>mailto:</code> link will automatically be created
+ when the documentation is created.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>post</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The email address or link that can be used to post to
+ the mailing list. If this is an email address, a
+ <code>mailto:</code> link will automatically be created
+ when the documentation is created.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>archive</name>
+ <version>3.0.0+</version>
+ <description>The link to a URL where you can browse the mailing list archive.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>otherArchives</name>
+ <version>3.0.0+</version>
+ <description>The link to alternate URLs where you can browse the list archive.</description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <comment>We could probably have a specific element for a dev mailing list for things like CI,
+ and maybe even a specific element for the user and scm mailing lists. Then leave the more
+ lose structure for any other type of mailing list.</comment>
+ </class>
+ <class java.clone="deep">
+ <name>Organization</name>
+ <description>Specifies the organization that produces this project.</description>
+ <version>3.0.0+</version>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>3.0.0+</version>
+ <description>The full name of the organization.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>3.0.0+</version>
+ <description>The URL to the organization's home page.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>logo</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ The URL to the organization's logo image. This can be an URL relative
+ to the base directory of the generated web site,
+ (e.g., <code>/images/org-logo.png</code>) or an absolute URL
+ (e.g., <code>http://my.corp/logo.png</code>). This value is used
+ when generating the project documentation.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>PackageGroup</name>
+ <version>3.0.0</version>
+ <description>A JavaDoc package group.</description>
+ <fields>
+ <field>
+ <name>title</name>
+ <version>3.0.0</version>
+ <description>The title to use for the package group.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>packages</name>
+ <version>3.0.0</version>
+ <description>The packages in the group</description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>PatternSet</name>
+ <version>3.0.0+</version>
+ <description>Definition of include or exclude patterns.</description>
+ <fields>
+ <field>
+ <name>includes</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ A list of patterns to include, e.g. <code>**&#47;*.xml</code>.
+ ]]>
+ </description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>excludes</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ A list of patterns to exclude, e.g. <code>**&#47;*.xml</code>
+ ]]>
+ </description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder( 128 );
+
+ sb.append("PatternSet [includes: {");
+ for (java.util.Iterator i = getIncludes().iterator(); i.hasNext(); )
+ {
+ String str = (String) i.next();
+ sb.append(str).append(", ");
+ }
+ if (sb.substring(sb.length() - 2).equals(", ")) sb.delete(sb.length() - 2, sb.length());
+
+ sb.append("}, excludes: {");
+ for (java.util.Iterator i = getExcludes().iterator(); i.hasNext(); )
+ {
+ String str = (String) i.next();
+ sb.append(str).append(", ");
+ }
+ if (sb.substring(sb.length() - 2).equals(", ")) sb.delete(sb.length() - 2, sb.length());
+
+ sb.append("}]");
+ return sb.toString();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep">
+ <name>Parent</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The <code>&lt;parent&gt;</code> element contains information required to locate the parent project from which
+ this project will inherit from.
+ <strong>Note:</strong> The children of this element are not interpolated and must be given as literal values.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>groupId</name>
+ <version>4.0.0+</version>
+ <description>The group id of the parent project to inherit from.</description>
+ <required>true</required>
+ <type>String</type>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>4.0.0+</version>
+ <description>The artifact id of the parent project to inherit from.</description>
+ <required>true</required>
+ <type>String</type>
+ </field>
+ <field>
+ <name>version</name>
+ <version>4.0.0+</version>
+ <description>The version of the parent project to inherit.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>relativePath</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The relative path of the parent <code>pom.xml</code> file within the check out.
+ If not specified, it defaults to <code>../pom.xml</code>.
+ Maven looks for the parent POM first in this location on
+ the filesystem, then the local repository, and lastly in the remote repo.
+ <code>relativePath</code> allows you to select a different location,
+ for example when your structure is flat, or deeper without an intermediate parent POM.
+ However, the group ID, artifact ID and version are still required,
+ and must match the file in the location given or it will revert to the repository for the POM.
+ This feature is only for enhancing the development in a local checkout of that project.
+ Set the value to an empty string in case you want to disable the feature and always resolve
+ the parent POM from the repositories.
+ ]]>
+ </description>
+ <type>String</type>
+ <defaultValue>../pom.xml</defaultValue>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ /**
+ * @return the id as <code>groupId:artifactId:version</code>
+ */
+ public String getId()
+ {
+ StringBuilder id = new StringBuilder( 64 );
+
+ id.append( getGroupId() );
+ id.append( ":" );
+ id.append( getArtifactId() );
+ id.append( ":" );
+ id.append( "pom" );
+ id.append( ":" );
+ id.append( getVersion() );
+
+ return id.toString();
+ }
+
+ @Override
+ public String toString()
+ {
+ return getId();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+
+ </class>
+ <class>
+ <name>Repository</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ The <code>&lt;repository&gt;</code> element contains informations required to a repository
+ used by the project.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>connection</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ The source control management system URL
+ that describes the repository and how to connect to the
+ repository. For more information, see the
+ <a href="http://maven.apache.org/scm/scm-url-format.html">URL format</a>
+ and <a href="http://maven.apache.org/scm/scms-overview.html">list of supported SCMs</a>.
+ This connection is read-only.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>developerConnection</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ Just like <code>connection</code>, but for developers, i.e. this scm connection
+ will not be read only.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>3.0.0</version>
+ <description>The URL to the project's browsable SCM repository, such as ViewVC or Fisheye.</description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>Scm</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The <code>&lt;scm&gt;</code> element contains informations required to the SCM
+ (Source Control Management) of the project.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>connection</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The source control management system URL
+ that describes the repository and how to connect to the
+ repository. For more information, see the
+ <a href="http://maven.apache.org/scm/scm-url-format.html">URL format</a>
+ and <a href="http://maven.apache.org/scm/scms-overview.html">list of supported SCMs</a>.
+ This connection is read-only.
+ <br /><b>Default value is</b>: parent value [+ path adjustment] + artifactId
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>developerConnection</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Just like <code>connection</code>, but for developers, i.e. this scm connection
+ will not be read only.
+ <br /><b>Default value is</b>: parent value [+ path adjustment] + artifactId
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>tag</name>
+ <version>4.0.0+</version>
+ <description>The tag of current code. By default, it's set to HEAD during development.</description>
+ <type>String</type>
+ <defaultValue>HEAD</defaultValue>
+ </field>
+ <field>
+ <name>url</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The URL to the project's browsable SCM repository, such as ViewVC or Fisheye.
+ <br /><b>Default value is</b>: parent value [+ path adjustment] + artifactId
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>FileSet</name>
+ <version>3.0.0+</version>
+ <superClass>PatternSet</superClass>
+ <description>A PatternSet for files.</description>
+ <fields>
+ <field>
+ <name>directory</name>
+ <version>3.0.0+</version>
+ <description>Describe the directory where the resources are stored. The path is relative
+ to the POM.</description>
+ <type>String</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return "FileSet {directory: " + getDirectory() + ", " + super.toString() + "}";
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <name>Resource</name>
+ <description>This element describes all of the classpath resources associated with a project
+ or unit tests.</description>
+ <version>3.0.0+</version>
+ <superClass>FileSet</superClass>
+ <fields>
+ <field>
+ <name>targetPath</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ Describe the resource target path. The path is relative to the target/classes
+ directory (i.e. <code>${project.build.outputDirectory}</code>).
+ For example, if you want that resource to appear in a specific package
+ (<code>org.apache.maven.messages</code>), you must specify this
+ element with this value: <code>org/apache/maven/messages</code>.
+ This is not required if you simply put the resources in that directory
+ structure at the source, however.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>filtering</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ Whether resources are filtered to replace tokens with parameterised values or not.
+ The values are taken from the <code>properties</code> element and from the
+ properties in the files listed in the <code>filters</code> element. Note: While the type
+ of this field is <code>String</code> for technical reasons, the semantic type is actually
+ <code>Boolean</code>. Default value is <code>false</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field xml.transient="true">
+ <name>mergeId</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ FOR INTERNAL USE ONLY. This is a unique identifier assigned to each
+ resource to allow Maven to merge changes to this resource that take
+ place during the execution of a plugin. This field must be managed
+ by the generated parser and formatter classes in order to allow it
+ to survive model interpolation.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ private static int mergeIdCounter = 0;
+
+ public void initMergeId()
+ {
+ if ( getMergeId() == null )
+ {
+ setMergeId( "resource-" + (mergeIdCounter++) );
+ }
+ }
+
+ public boolean isFiltering()
+ {
+ return ( filtering != null ) ? Boolean.parseBoolean( filtering ) : false;
+ }
+
+ public void setFiltering( boolean filtering )
+ {
+ this.filtering = String.valueOf( filtering );
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return "Resource {targetPath: " + getTargetPath() + ", filtering: " + isFiltering() + ", " + super.toString() + "}";
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <name>SourceModification</name>
+ <description>This element describes all of the source modifications associated with a project.
+ These modifications are used to exclude or include various source depending on the
+ environment the build is running in.</description>
+ <version>3.0.0</version>
+ <superClass>FileSet</superClass>
+ <fields>
+ <field>
+ <name>className</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ If the class with this name can <b>not</b> be
+ loaded, then the includes and excludes specified below
+ will be applied to the contents of the <code>sourceDirectory</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>property</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ If the property with this name is <b>not</b> set,
+ then the includes and excludes specified below
+ will be applied to the contents of the <code>sourceDirectory</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>UnitTest</name>
+ <version>3.0.0</version>
+ <superClass>PatternSet</superClass>
+ <description>A PatternSet for unit tests.</description>
+ <fields>
+ <field>
+ <name>resources</name>
+ <version>3.0.0</version>
+ <description>The classpath resources to use when executing the unit tests.</description>
+ <association>
+ <type>Resource</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>Version</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ This element describes each of the previous versions of the
+ project. Each version is described by a <code>version</code>
+ element
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>3.0.0</version>
+ <description>
+ <![CDATA[
+ The external version number under which this release was distributed. Examples include:
+ <code>1.0</code>,
+ <code>1.1-alpha1</code>,
+ <code>1.2-beta</code>,
+ <code>1.3.2</code> etc.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>tag</name>
+ <version>3.0.0</version>
+ <description>The name given in the SCM (e.g. CVS) used by the project for the source code
+ associated with this version of the project.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>id</name>
+ <version>3.0.0</version>
+ <description>A unique identifier for a version. This is usually identical to the name.</description>
+ <type>String</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>3.0.0</version>
+ <code>
+ <![CDATA[
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return getId();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+
+ <class java.clone="deep">
+ <name>RepositoryBase</name>
+ <version>4.0.0+</version>
+ <description>A repository contains the information needed for establishing connections with
+ remote repository.</description>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <identifier>true</identifier>
+ <description>
+ <![CDATA[
+ A unique identifier for a repository. This is used to match the repository
+ to configuration in the <code>settings.xml</code> file, for example. Furthermore, the identifier is
+ used during POM inheritance and profile injection to detect repositories that should be merged.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>name</name>
+ <version>4.0.0+</version>
+ <description>Human readable name of the repository.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <description>
+ <![CDATA[
+ The url of the repository, in the form <code>protocol://hostname/path</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>layout</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The type of layout this repository uses for locating and storing artifacts -
+ can be <code>legacy</code> or <code>default</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ <defaultValue>default</defaultValue>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>Repository</name>
+ <superClass>RepositoryBase</superClass>
+ <version>4.0.0+</version>
+ <description>A repository contains the information needed for establishing connections with
+ remote repository.</description>
+ <fields>
+ <field>
+ <name>releases</name>
+ <version>4.0.0+</version>
+ <description>How to handle downloading of releases from this repository.</description>
+ <association>
+ <type>RepositoryPolicy</type>
+ </association>
+ </field>
+ <field>
+ <name>snapshots</name>
+ <version>4.0.0+</version>
+ <description>How to handle downloading of snapshots from this repository.</description>
+ <association>
+ <type>RepositoryPolicy</type>
+ </association>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>DeploymentRepository</name>
+ <superClass>Repository</superClass>
+ <version>4.0.0+</version>
+ <description>Repository contains the information needed for deploying to the remote
+ repository.</description>
+ <fields>
+ <field>
+ <name>uniqueVersion</name>
+ <description>Whether to assign snapshots a unique version comprised of the timestamp and
+ build number, or to use the same version each time</description>
+ <type>boolean</type>
+ <defaultValue>true</defaultValue>
+ <version>4.0.0+</version>
+ </field>
+ </fields>
+ </class>
+
+ <class java.clone="deep">
+ <name>RepositoryPolicy</name>
+ <version>4.0.0+</version>
+ <description>Download policy.</description>
+ <fields>
+ <field>
+ <name>enabled</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Whether to use this repository for downloading this type of artifact. Note: While the type
+ of this field is <code>String</code> for technical reasons, the semantic type is actually
+ <code>Boolean</code>. Default value is <code>true</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>updatePolicy</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The frequency for downloading updates - can be
+ <code>always,</code>
+ <code>daily</code>
+ (default),
+ <code>interval:XXX</code>
+ (in minutes) or
+ <code>never</code>
+ (only if it doesn't exist locally).
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>checksumPolicy</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ What to do when verification of an artifact checksum fails. Valid values are
+ <code>ignore</code>
+ ,
+ <code>fail</code>
+ or
+ <code>warn</code>
+ (the default).
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+
+ public boolean isEnabled()
+ {
+ return ( enabled != null ) ? Boolean.parseBoolean( enabled ) : true;
+ }
+
+ public void setEnabled( boolean enabled )
+ {
+ this.enabled = String.valueOf( enabled );
+ }
+
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+
+ <!--@todo find better solution for management of site deployments -->
+ <class java.clone="deep">
+ <name>Site</name>
+ <version>4.0.0+</version>
+ <description>Contains the information needed for deploying websites.</description>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ A unique identifier for a deployment location. This is used to match the
+ site to configuration in the <code>settings.xml</code> file, for example.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>name</name>
+ <version>4.0.0+</version>
+ <description>Human readable name of the deployment location.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The url of the location where website is deployed, in the form <code>protocol://hostname/path</code>.
+ <br /><b>Default value is</b>: parent value [+ path adjustment] + artifactId
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+
+ <class java.clone="deep">
+ <name>ConfigurationContainer</name>
+ <version>4.0.0+</version>
+ <description>Contains the configuration information of the container like Plugin.</description>
+ <fields>
+ <field>
+ <name>inherited</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Whether any configuration should be propagated to child POMs. Note: While the type
+ of this field is <code>String</code> for technical reasons, the semantic type is actually
+ <code>Boolean</code>. Default value is <code>true</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <description>
+ <![CDATA[
+ <p>The configuration as DOM object.</p>
+ <p>By default, every element content is trimmed, but starting with Maven 3.1.0, you can add
+ <code>xml:space="preserve"</code> to elements you want to preserve whitespace.</p>
+ <p>You can control how child POMs inherit configuration from parent POMs by adding <code>combine.children</code>
+ or <code>combine.self</code> attributes to the children of the configuration element:</p>
+ <ul>
+ <li><code>combine.children</code>: available values are <code>merge</code> (default) and <code>append</code>,</li>
+ <li><code>combine.self</code>: available values are <code>merge</code> (default) and <code>override</code>.</li>
+ </ul>
+ <p>See <a href="http://maven.apache.org/pom.html#Plugins">POM Reference documentation</a> and
+ <a href="http://plexus.codehaus.org/plexus-utils/apidocs/org/codehaus/plexus/util/xml/Xpp3DomUtils.html">Xpp3DomUtils</a>
+ for more information.</p>
+ ]]>
+ </description>
+ <name>configuration</name>
+ <type>DOM</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ public boolean isInherited()
+ {
+ return ( inherited != null ) ? Boolean.parseBoolean( inherited ) : true;
+ }
+
+ public void setInherited( boolean inherited )
+ {
+ this.inherited = String.valueOf( inherited );
+ }
+
+ private boolean inheritanceApplied = true;
+
+ public void unsetInheritanceApplied()
+ {
+ this.inheritanceApplied = false;
+ }
+
+ public boolean isInheritanceApplied()
+ {
+ return inheritanceApplied;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <name>Plugin</name>
+ <version>4.0.0+</version>
+ <superClass>ConfigurationContainer</superClass>
+ <description>
+ <![CDATA[
+ The <code>&lt;plugin&gt;</code> element contains informations required for a plugin.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>groupId</name>
+ <description>The group ID of the plugin in the repository.</description>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <defaultValue>org.apache.maven.plugins</defaultValue>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <description>The artifact ID of the plugin in the repository.</description>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <required>true</required>
+ </field>
+ <field>
+ <name>version</name>
+ <version>4.0.0+</version>
+ <description>The version (or valid range of versions) of the plugin to be used.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>extensions</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ Whether to load Maven extensions (such as packaging and type handlers) from
+ this plugin. For performance reasons, this should only be enabled when necessary. Note: While the type
+ of this field is <code>String</code> for technical reasons, the semantic type is actually
+ <code>Boolean</code>. Default value is <code>false</code>.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>executions</name>
+ <version>4.0.0+</version>
+ <description>Multiple specifications of a set of goals to execute during the build
+ lifecycle, each having (possibly) a different configuration.</description>
+ <association>
+ <type>PluginExecution</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>dependencies</name>
+ <description>Additional dependencies that this project needs to introduce to the plugin's
+ classloader.</description>
+ <version>4.0.0+</version>
+ <association>
+ <type>Dependency</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>goals</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ <b>Deprecated</b>. Unused by Maven.
+ ]]>
+ </description>
+ <type>DOM</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ public boolean isExtensions()
+ {
+ return ( extensions != null ) ? Boolean.parseBoolean( extensions ) : false;
+ }
+
+ public void setExtensions( boolean extensions )
+ {
+ this.extensions = String.valueOf( extensions );
+ }
+
+ private java.util.Map<String, PluginExecution> executionMap = null;
+
+ /**
+ * Reset the <code>executionMap</code> field to <code>null</code>
+ */
+ public void flushExecutionMap()
+ {
+ this.executionMap = null;
+ }
+
+ /**
+ * @return a Map of executions field with <code>PluginExecution#getId()</code> as key
+ * @see org.apache.maven.model.PluginExecution#getId()
+ */
+ public java.util.Map<String, PluginExecution> getExecutionsAsMap()
+ {
+ if ( executionMap == null )
+ {
+ executionMap = new java.util.LinkedHashMap<String, PluginExecution>();
+ if ( getExecutions() != null )
+ {
+ for ( java.util.Iterator<PluginExecution> i = getExecutions().iterator(); i.hasNext(); )
+ {
+ PluginExecution exec = (PluginExecution) i.next();
+
+ if ( executionMap.containsKey( exec.getId() ) )
+ {
+ throw new IllegalStateException( "You cannot have two plugin executions with the same (or missing) <id/> elements.\nOffending execution\n\nId: \'" + exec.getId() + "\'\nPlugin:\'" + getKey() + "\'\n\n" );
+ }
+
+ executionMap.put( exec.getId(), exec );
+ }
+ }
+ }
+
+ return executionMap;
+ }
+
+ /**
+ * Gets the identifier of the plugin.
+ *
+ * @return The plugin id in the form {@code <groupId>:<artifactId>:<version>}, never {@code null}.
+ */
+ public String getId()
+ {
+ StringBuilder id = new StringBuilder( 128 );
+
+ id.append( ( getGroupId() == null ) ? "[unknown-group-id]" : getGroupId() );
+ id.append( ":" );
+ id.append( ( getArtifactId() == null ) ? "[unknown-artifact-id]" : getArtifactId() );
+ id.append( ":" );
+ id.append( ( getVersion() == null ) ? "[unknown-version]" : getVersion() );
+
+ return id.toString();
+ }
+
+ //TODO we shall reset key variable when groupId/artifactId change
+ private String key = null;
+ /**
+ * @return the key of the plugin, ie <code>groupId:artifactId</code>
+ */
+ public String getKey()
+ {
+ if ( key == null )
+ {
+ key = constructKey( groupId, artifactId );
+ }
+ return key;
+ }
+
+ /**
+ * @param groupId
+ * @param artifactId
+ * @return the key of the plugin, ie <code>groupId:artifactId</code>
+ */
+ public static String constructKey( String groupId, String artifactId )
+ {
+ return groupId + ":" + artifactId;
+ }
+
+ /**
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals( Object other )
+ {
+ if ( other instanceof Plugin )
+ {
+ Plugin otherPlugin = (Plugin) other;
+
+ return getKey().equals( otherPlugin.getKey() );
+ }
+
+ return false;
+ }
+
+ /**
+ * @see java.lang.Object#hashCode()
+ */
+ public int hashCode()
+ {
+ return getKey().hashCode();
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return "Plugin [" + getKey() + "]";
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <name>PluginExecution</name>
+ <version>4.0.0+</version>
+ <superClass>ConfigurationContainer</superClass>
+ <description>
+ <![CDATA[
+ The <code>&lt;execution&gt;</code> element contains informations required for the
+ execution of a plugin.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <defaultValue>default</defaultValue>
+ <description>The identifier of this execution for labelling the goals during the build,
+ and for matching executions to merge during inheritance and profile injection.</description>
+ </field>
+ <field>
+ <name>phase</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The build lifecycle phase to bind the goals in this execution to. If omitted,
+ the goals will be bound to the default phase specified by the plugin. </description>
+ </field>
+ <field xml.transient="true">
+ <name>priority</name>
+ <version>4.0.0+</version>
+ <type>int</type>
+ <description>
+ <![CDATA[
+ The priority of this execution compared to other executions which are bound to the same phase.
+ <strong>Warning:</strong> This is an internal utility property that is only public for technical reasons,
+ it is not part of the public API. In particular, this property can be changed or deleted without prior
+ notice.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>goals</name>
+ <version>4.0.0+</version>
+ <description>The goals to execute with the given configuration.</description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ public static final String DEFAULT_EXECUTION_ID = "default";
+
+ @Override
+ public String toString()
+ {
+ return getId();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep">
+ <name>DependencyManagement</name>
+ <version>4.0.0+</version>
+ <description>Section for management of default dependency information for use in a group of
+ POMs.</description>
+ <fields>
+ <field>
+ <name>dependencies</name>
+ <version>4.0.0+</version>
+ <description>The dependencies specified here are not used until they are referenced in a
+ POM within the group. This allows the specification of a "standard" version for a
+ particular dependency.</description>
+ <association>
+ <type>Dependency</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>PluginManagement</name>
+ <version>4.0.0+</version>
+ <superClass>PluginContainer</superClass>
+ <description>Section for management of default plugin information for use in a group of POMs.
+ </description>
+ </class>
+ <class java.clone="deep">
+ <name>Reporting</name>
+ <version>4.0.0+</version>
+ <description>Section for management of reports and their configuration.</description>
+ <fields>
+ <field>
+ <name>excludeDefaults</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ If true, then the default reports are not included in the site generation.
+ This includes the reports in the "Project Info" menu. Note: While the type
+ of this field is <code>String</code> for technical reasons, the semantic type is actually
+ <code>Boolean</code>. Default value is <code>false</code>.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>outputDirectory</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ Where to store all of the generated reports. The default is
+ <code>${project.build.directory}/site</code>
+ .
+ ]]>
+ </description>
+ <!-- TODO: why isn't default set here? -->
+ </field>
+ <field>
+ <name>plugins</name>
+ <version>4.0.0+</version>
+ <description>The reporting plugins to use and their configuration.</description>
+ <association>
+ <type>ReportPlugin</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ public boolean isExcludeDefaults()
+ {
+ return ( excludeDefaults != null ) ? Boolean.parseBoolean( excludeDefaults ) : false;
+ }
+
+ public void setExcludeDefaults( boolean excludeDefaults )
+ {
+ this.excludeDefaults = String.valueOf( excludeDefaults );
+ }
+
+ java.util.Map<String, ReportPlugin> reportPluginMap;
+
+ /**
+ * Reset the <code>reportPluginMap</code> field to <code>null</code>
+ */
+ public synchronized void flushReportPluginMap()
+ {
+ this.reportPluginMap = null;
+ }
+
+ /**
+ * @return a Map of plugins field with <code>ReportPlugin#getKey()</code> as key
+ * @see org.apache.maven.model.ReportPlugin#getKey()
+ */
+ public synchronized java.util.Map<String, ReportPlugin> getReportPluginsAsMap()
+ {
+ if ( reportPluginMap == null )
+ {
+ reportPluginMap = new java.util.LinkedHashMap<String, ReportPlugin>();
+ if ( getPlugins() != null )
+ {
+ for ( java.util.Iterator<ReportPlugin> it = getPlugins().iterator(); it.hasNext(); )
+ {
+ ReportPlugin reportPlugin = (ReportPlugin) it.next();
+ reportPluginMap.put( reportPlugin.getKey(), reportPlugin );
+ }
+ }
+ }
+
+ return reportPluginMap;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <!-- Profile support -->
+ <class>
+ <name>Profile</name>
+ <superClass>ModelBase</superClass>
+ <version>4.0.0+</version>
+ <description>Modifications to the build process which is activated based on environmental
+ parameters or command line arguments.</description>
+ <fields>
+ <field>
+ <name>id</name>
+ <required>true</required>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <defaultValue>default</defaultValue>
+ <description>The identifier of this build profile. This is used for command line
+ activation, and identifies profiles to be merged.
+ </description>
+ </field>
+ <field>
+ <name>activation</name>
+ <version>4.0.0+</version>
+ <description>The conditional logic which will automatically trigger the inclusion of this
+ profile.</description>
+ <association>
+ <type>Activation</type>
+ </association>
+ </field>
+ <field xml.tagName="build">
+ <name>build</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <description>Information required to build the project.</description>
+ <association>
+ <type>BuildBase</type>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ public static final String SOURCE_POM = "pom";
+
+ public static final String SOURCE_SETTINGS = "settings.xml";
+
+ // We don't want this to be parseable...it's sort of 'hidden'
+ // default source for this profile is in the pom itself.
+ private String source = SOURCE_POM;
+
+ public void setSource( String source )
+ {
+ this.source = source;
+ }
+
+ public String getSource()
+ {
+ return source;
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return "Profile {id: " + getId() + ", source: " + getSource() + "}";
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep">
+ <name>Activation</name>
+ <version>4.0.0+</version>
+ <description>The conditions within the build runtime environment which will trigger the
+ automatic inclusion of the build profile. Multiple conditions can be defined, which must
+ be all satisfied to activate the profile.
+ </description>
+ <fields>
+ <field>
+ <name>activeByDefault</name>
+ <version>4.0.0+</version>
+ <type>boolean</type>
+ <description>If set to true, this profile will be active unless another profile in this
+ pom is activated using the command line -P option or by one of that profile's
+ activators.</description>
+ </field>
+ <field>
+ <name>jdk</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ Specifies that this profile will be activated when a matching JDK is detected.
+ For example, <code>1.4</code> only activates on JDKs versioned 1.4,
+ while <code>!1.4</code> matches any JDK that is not version 1.4. Ranges are supported too:
+ <code>[1.5,)</code> activates when the JDK is 1.5 minimum.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>os</name>
+ <version>4.0.0+</version>
+ <description>Specifies that this profile will be activated when matching operating system
+ attributes are detected.</description>
+ <association>
+ <type>ActivationOS</type>
+ </association>
+ </field>
+ <field>
+ <name>property</name>
+ <version>4.0.0+</version>
+ <description>Specifies that this profile will be activated when this system property is
+ specified.</description>
+ <association>
+ <type>ActivationProperty</type>
+ </association>
+ </field>
+ <field>
+ <name>file</name>
+ <version>4.0.0+</version>
+ <description>Specifies that this profile will be activated based on existence of a file.</description>
+ <association>
+ <type>ActivationFile</type>
+ </association>
+ </field>
+ <!--
+ This could be included once we teach Maven to deal with multiple versions of the model
+ <field>
+ <name>custom</name>
+ <version>4.0.0+</version>
+ <description>Describes a custom profile activation trigger, brought in via build
+ extension.</description>
+ <association>
+ <type>ActivationCustom</type>
+ </association>
+ </field>
+ -->
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>ActivationProperty</name>
+ <version>4.0.0+</version>
+ <description>This is the property specification used to activate a profile. If the value field
+ is empty, then the existence of the named property will activate the profile, otherwise it
+ does a case-sensitive match against the property value as well.</description>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <required>true</required>
+ <description>The name of the property to be used to activate a profile.</description>
+ </field>
+ <field>
+ <name>value</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The value of the property required to activate a profile.</description>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>ActivationOS</name>
+ <version>4.0.0+</version>
+ <description>This is an activator which will detect an operating system's attributes in order
+ to activate its profile.</description>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ The name of the operating system to be used to activate the profile. This must be an exact match
+ of the <code>${os.name}</code> Java property, such as <code>Windows XP</code>.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>family</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ The general family of the OS to be used to activate the profile, such as
+ <code>windows</code> or <code>unix</code>.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>arch</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The architecture of the operating system to be used to activate the
+ profile.</description>
+ </field>
+ <field>
+ <name>version</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The version of the operating system to be used to activate the
+ profile.</description>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>ActivationFile</name>
+ <version>4.0.0+</version>
+ <description><![CDATA[This is the file specification used to activate the profile. The <code>missing</code> value
+ is the location of a file that needs to exist, and if it doesn't, the profile will be
+ activated. On the other hand, <code>exists</code> will test for the existence of the file and if it is
+ there, the profile will be activated.<br/>
+ Variable interpolation for these file specifications is limited to <code>${basedir}</code>,
+ System properties and request properties.]]></description>
+ <fields>
+ <field>
+ <name>missing</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The name of the file that must be missing to activate the
+ profile.</description>
+ </field>
+ <field>
+ <name>exists</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The name of the file that must exist to activate the profile.</description>
+ </field>
+ </fields>
+ </class>
+ <!--
+ This can be put back in when we figure out how to have multiple model versions
+ <class>
+ <name>ActivationCustom</name>
+ <version>4.0.0+</version>
+ <description>This activation allows users to specify their own custom trigger for a profile.</description>
+ <fields>
+ <field>
+ <name>configuration</name>
+ <version>4.0.0+</version>
+ <type>DOM</type>
+ <description>The specification for triggering the profile according to the rules of the
+ custom activation type.</description>
+ </field>
+ <field>
+ <name>type</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The type (role-hint) of activation which is to be used to activate the
+ profile.</description>
+ </field>
+ </fields>
+ </class>
+ -->
+ <!-- /BuildProfile support -->
+ <class xml.tagName="plugin" java.clone="deep">
+ <name>ReportPlugin</name>
+ <version>4.0.0+</version>
+ <superClass>ConfigurationContainer</superClass>
+ <description>
+ <![CDATA[
+ The <code>&lt;plugin&gt;</code> element contains informations required for a report plugin.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>groupId</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <required>true</required>
+ <defaultValue>org.apache.maven.plugins</defaultValue>
+ <description>The group ID of the reporting plugin in the repository.</description>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <required>true</required>
+ <description>The artifact ID of the reporting plugin in the repository.</description>
+ </field>
+ <field>
+ <name>version</name>
+ <version>4.0.0+</version>
+ <description>The version of the reporting plugin to be used.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>reportSets</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Multiple specifications of a set of reports, each having (possibly) different
+ configuration. This is the reporting parallel to an <code>execution</code> in the build.
+ ]]>
+ </description>
+ <association>
+ <type>ReportSet</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ private java.util.Map<String, ReportSet> reportSetMap = null;
+
+ /**
+ * Reset the <code>reportSetMap</code> field to <code>null</code>
+ */
+ public void flushReportSetMap()
+ {
+ this.reportSetMap = null;
+ }
+
+ /**
+ * @return a Map of reportSets field with <code>ReportSet#getId()</code> as key
+ * @see org.apache.maven.model.ReportSet#getId()
+ */
+ public java.util.Map<String, ReportSet> getReportSetsAsMap()
+ {
+ if ( reportSetMap == null )
+ {
+ reportSetMap = new java.util.LinkedHashMap<String, ReportSet>();
+ if ( getReportSets() != null )
+ {
+ for ( java.util.Iterator<ReportSet> i = getReportSets().iterator(); i.hasNext(); )
+ {
+ ReportSet reportSet = (ReportSet) i.next();
+ reportSetMap.put( reportSet.getId(), reportSet );
+ }
+ }
+ }
+
+ return reportSetMap;
+ }
+
+ /**
+ * @return the key of the report plugin, ie <code>groupId:artifactId</code>
+ */
+ public String getKey()
+ {
+ return constructKey( groupId, artifactId );
+ }
+
+ /**
+ * @param groupId
+ * @param artifactId
+ * @return the key of the report plugin, ie <code>groupId:artifactId</code>
+ */
+ public static String constructKey( String groupId, String artifactId )
+ {
+ return groupId + ":" + artifactId;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep">
+ <name>ReportSet</name>
+ <version>4.0.0+</version>
+ <superClass>ConfigurationContainer</superClass>
+ <description>Represents a set of reports and configuration to be used to generate them.</description>
+ <fields>
+ <field>
+ <name>id</name>
+ <type>String</type>
+ <required>true</required>
+ <description>The unique id for this report set, to be used during POM inheritance and profile injection
+ for merging of report sets.
+ </description>
+ <defaultValue>default</defaultValue>
+ </field>
+ <field>
+ <name>reports</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <description>The list of reports from this plugin which should be generated from this set.</description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ @Override
+ public String toString()
+ {
+ return getId();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep">
+ <name>Prerequisites</name>
+ <version>4.0.0+</version>
+ <description>Describes the prerequisites a project can have.</description>
+ <fields>
+ <field>
+ <name>maven</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <defaultValue>2.0</defaultValue>
+ <description><![CDATA[
+ The minimum version of Maven required to build the project.<br />
+ If this project builds a plugin, this is in addition the minimum version of Maven required to use
+ the resulting plugin.]]>
+ </description>
+ <required>false</required>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>Relocation</name>
+ <version>4.0.0+</version>
+ <description>Describes where an artifact has moved to. If any of the values are omitted, it is
+ assumed to be the same as it was before.</description>
+ <fields>
+ <field>
+ <name>groupId</name>
+ <version>4.0.0+</version>
+ <description>The group ID the artifact has moved to.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>4.0.0+</version>
+ <description>The new artifact ID of the artifact.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>version</name>
+ <version>4.0.0+</version>
+ <description>The new version of the artifact.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>message</name>
+ <version>4.0.0+</version>
+ <description>An additional message to show the user about the move, such as the reason.</description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>Extension</name>
+ <version>4.0.0+</version>
+ <description>Describes a build extension to utilise.</description>
+ <fields>
+ <field>
+ <name>groupId</name>
+ <version>4.0.0+</version>
+ <description>The group ID of the extension's artifact.</description>
+ <required>true</required>
+ <type>String</type>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>4.0.0+</version>
+ <description>The artifact ID of the extension.</description>
+ <required>true</required>
+ <type>String</type>
+ </field>
+ <field>
+ <name>version</name>
+ <version>4.0.0+</version>
+ <description>The version of the extension.</description>
+ <type>String</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ /**
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals( Object o )
+ {
+ if ( this == o )
+ {
+ return true;
+ }
+
+ if ( !( o instanceof Extension ) )
+ {
+ return false;
+ }
+
+ Extension e = (Extension) o;
+
+ if ( !equal( e.getArtifactId(), getArtifactId() ) )
+ {
+ return false;
+ }
+ else if ( !equal( e.getGroupId(), getGroupId() ) )
+ {
+ return false;
+ }
+ else if ( !equal( e.getVersion(), getVersion() ) )
+ {
+ return false;
+ }
+ return true;
+ }
+
+ private static <T> boolean equal( T obj1, T obj2 )
+ {
+ return ( obj1 != null ) ? obj1.equals( obj2 ) : obj2 == null;
+ }
+
+ /**
+ * @see java.lang.Object#hashCode()
+ */
+ public int hashCode()
+ {
+ int result = 17;
+ result = 37 * result + ( getArtifactId() != null ? getArtifactId().hashCode() : 0 );
+ result = 37 * result + ( getGroupId() != null ? getGroupId().hashCode() : 0 );
+ result = 37 * result + ( getVersion() != null ? getVersion().hashCode() : 0 );
+ return result;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class locationTracker="locations" java.clone="shallow">
+ <name>InputLocation</name>
+ <version>4.0.0+</version>
+ <fields>
+ <!-- line, column and source fields are auto-generated by Modello -->
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+
+ @Override
+ public String toString()
+ {
+ return getLineNumber() + " : " + getColumnNumber() + ", " + getSource();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class sourceTracker="source" java.clone="shallow">
+ <name>InputSource</name>
+ <version>4.0.0+</version>
+ <fields>
+ <field>
+ <name>modelId</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ The identifier of the POM in the format {@code <groupId>:<artifactId>:<version>}.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>location</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ The path/URL of the POM or {@code null} if unknown.
+ ]]>
+ </description>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ @Override
+ public String toString()
+ {
+ return getModelId() + " " + getLocation();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ </classes>
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/site/apt/index.apt b/framework/src/maven/apache-maven-3.3.3/maven-model/src/site/apt/index.apt
new file mode 100644
index 00000000..77ec5081
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/site/apt/index.apt
@@ -0,0 +1,39 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ Introduction
+ -----
+ Jason van Zyl
+ Vincent Siveton
+ Hervé Boutemy
+ -----
+ 2011-06-12
+ -----
+
+Maven Model
+
+ This is strictly the model for Maven POM (Project Object Model), so really just plain objects. All the effective model
+ building logic from multiple POMs and building context is done in {{{../maven-model-builder/}Maven Model Builder}}.
+
+ The following are generated from this model:
+
+ * {{{./apidocs/index.html}Java sources}} with Reader and Writers for the Xpp3 XML parser
+
+ * A {{{./maven.html}Descriptor Reference}}
+
+ * An XSD {{{http://maven.apache.org/xsd/maven-v3_0_0.xsd}for Maven 1.1}} and {{{http://maven.apache.org/xsd/maven-4.0.0.xsd}for Maven 2.0}}.
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/site/site.xml b/framework/src/maven/apache-maven-3.3.3/maven-model/src/site/site.xml
new file mode 100644
index 00000000..3a16bf98
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/site/site.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
+ <body>
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ <item name="JavaDocs" href="apidocs/index.html"/>
+ <item name="Source Xref" href="xref/index.html"/>
+ <!--item name="FAQ" href="faq.html"/-->
+ </menu>
+
+ <menu ref="parent"/>
+ <menu ref="reports"/>
+ </body>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/site/xdoc/navigation.xml b/framework/src/maven/apache-maven-3.3.3/maven-model/src/site/xdoc/navigation.xml
new file mode 100644
index 00000000..110a953d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/site/xdoc/navigation.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<project name="Project Descriptor">
+ <title>Project Descriptor</title>
+ <body>
+ <breadcrumbs>
+ <item name="Apache" href="http://www.apache.org" />
+ <item name="Maven" href="http://maven.apache.org/" />
+ <item name="Maven 1.x" href="http://maven.apache.org/maven-1.x/" />
+ <item name="Reference" href="http://maven.apache.org/maven-1.x/reference/index.html" />
+ </breadcrumbs>
+ <menu name="Maven Project Descriptor">
+ <item name="About" href="/index.html" />
+ <item name="Model Documentation" href="/maven.html" />
+ <item name="API Docs" href="/apidocs/" target="_blank" />
+ </menu>
+ </body>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationFileTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationFileTest.java
new file mode 100644
index 00000000..f88da581
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationFileTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code ActivationFile}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ActivationFileTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new ActivationFile().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new ActivationFile().equals( null ) );
+
+ new ActivationFile().equals( new ActivationFile() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ ActivationFile thing = new ActivationFile();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new ActivationFile().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationOSTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationOSTest.java
new file mode 100644
index 00000000..f0d30450
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationOSTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code ActivationOS}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ActivationOSTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new ActivationOS().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new ActivationOS().equals( null ) );
+
+ new ActivationOS().equals( new ActivationOS() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ ActivationOS thing = new ActivationOS();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new ActivationOS().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationPropertyTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationPropertyTest.java
new file mode 100644
index 00000000..5f5e048a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationPropertyTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code ActivationProperty}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ActivationPropertyTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new ActivationProperty().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new ActivationProperty().equals( null ) );
+
+ new ActivationProperty().equals( new ActivationProperty() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ ActivationProperty thing = new ActivationProperty();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new ActivationProperty().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationTest.java
new file mode 100644
index 00000000..f6d0f910
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Activation}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ActivationTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Activation().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Activation().equals( null ) );
+
+ new Activation().equals( new Activation() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Activation thing = new Activation();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Activation().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/BuildTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/BuildTest.java
new file mode 100644
index 00000000..80a60d57
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/BuildTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Build}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class BuildTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Build().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Build().equals( null ) );
+
+ new Build().equals( new Build() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Build thing = new Build();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Build().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/CiManagementTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/CiManagementTest.java
new file mode 100644
index 00000000..7194c844
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/CiManagementTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code CiManagement}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class CiManagementTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new CiManagement().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new CiManagement().equals( null ) );
+
+ new CiManagement().equals( new CiManagement() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ CiManagement thing = new CiManagement();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new CiManagement().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ContributorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ContributorTest.java
new file mode 100644
index 00000000..491b99ae
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ContributorTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Contributor}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ContributorTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Contributor().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Contributor().equals( null ) );
+
+ new Contributor().equals( new Contributor() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Contributor thing = new Contributor();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Contributor().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DependencyManagementTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DependencyManagementTest.java
new file mode 100644
index 00000000..7702c62f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DependencyManagementTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code DependencyManagement}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DependencyManagementTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new DependencyManagement().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new DependencyManagement().equals( null ) );
+
+ new DependencyManagement().equals( new DependencyManagement() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ DependencyManagement thing = new DependencyManagement();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new DependencyManagement().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DependencyTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DependencyTest.java
new file mode 100644
index 00000000..ec0a8336
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DependencyTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Dependency}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DependencyTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Dependency().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Dependency().equals( null ) );
+
+ new Dependency().equals( new Dependency() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Dependency thing = new Dependency();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Dependency().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DeploymentRepositoryTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DeploymentRepositoryTest.java
new file mode 100644
index 00000000..169ec650
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DeploymentRepositoryTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code DeploymentRepository}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DeploymentRepositoryTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new DeploymentRepository().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new DeploymentRepository().equals( null ) );
+
+ new DeploymentRepository().equals( new DeploymentRepository() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ DeploymentRepository thing = new DeploymentRepository();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new DeploymentRepository().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DeveloperTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DeveloperTest.java
new file mode 100644
index 00000000..c0dfe56d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DeveloperTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Developer}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DeveloperTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Developer().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Developer().equals( null ) );
+
+ new Developer().equals( new Developer() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Developer thing = new Developer();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Developer().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DistributionManagementTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DistributionManagementTest.java
new file mode 100644
index 00000000..0314d61b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DistributionManagementTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code DistributionManagement}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DistributionManagementTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new DistributionManagement().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new DistributionManagement().equals( null ) );
+
+ new DistributionManagement().equals( new DistributionManagement() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ DistributionManagement thing = new DistributionManagement();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new DistributionManagement().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ExclusionTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ExclusionTest.java
new file mode 100644
index 00000000..6febaceb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ExclusionTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Exclusion}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ExclusionTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Exclusion().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Exclusion().equals( null ) );
+
+ new Exclusion().equals( new Exclusion() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Exclusion thing = new Exclusion();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Exclusion().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ExtensionTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ExtensionTest.java
new file mode 100644
index 00000000..4b8cd8a1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ExtensionTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Extension}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ExtensionTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Extension().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Extension().equals( null ) );
+
+ new Extension().equals( new Extension() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Extension thing = new Extension();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Extension().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/IssueManagementTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/IssueManagementTest.java
new file mode 100644
index 00000000..5e50c157
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/IssueManagementTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code IssueManagement}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class IssueManagementTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new IssueManagement().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new IssueManagement().equals( null ) );
+
+ new IssueManagement().equals( new IssueManagement() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ IssueManagement thing = new IssueManagement();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new IssueManagement().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/LicenseTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/LicenseTest.java
new file mode 100644
index 00000000..179921b2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/LicenseTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code License}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class LicenseTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new License().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new License().equals( null ) );
+
+ new License().equals( new License() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ License thing = new License();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new License().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/MailingListTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/MailingListTest.java
new file mode 100644
index 00000000..61296952
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/MailingListTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code MailingList}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class MailingListTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new MailingList().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new MailingList().equals( null ) );
+
+ new MailingList().equals( new MailingList() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ MailingList thing = new MailingList();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new MailingList().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ModelTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ModelTest.java
new file mode 100644
index 00000000..c9ec4da9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ModelTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Model}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ModelTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Model().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Model().equals( null ) );
+
+ new Model().equals( new Model() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Model thing = new Model();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Model().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/NotifierTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/NotifierTest.java
new file mode 100644
index 00000000..4e5d0685
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/NotifierTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Notifier}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class NotifierTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Notifier().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Notifier().equals( null ) );
+
+ new Notifier().equals( new Notifier() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Notifier thing = new Notifier();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Notifier().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/OrganizationTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/OrganizationTest.java
new file mode 100644
index 00000000..48abe77e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/OrganizationTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Organization}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class OrganizationTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Organization().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Organization().equals( null ) );
+
+ new Organization().equals( new Organization() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Organization thing = new Organization();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Organization().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ParentTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ParentTest.java
new file mode 100644
index 00000000..78d45672
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ParentTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Parent}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ParentTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Parent().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Parent().equals( null ) );
+
+ new Parent().equals( new Parent() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Parent thing = new Parent();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Parent().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginConfigurationTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginConfigurationTest.java
new file mode 100644
index 00000000..cbb123d5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginConfigurationTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code PluginConfiguration}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class PluginConfigurationTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new PluginConfiguration().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new PluginConfiguration().equals( null ) );
+
+ new PluginConfiguration().equals( new PluginConfiguration() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ PluginConfiguration thing = new PluginConfiguration();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new PluginConfiguration().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginContainerTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginContainerTest.java
new file mode 100644
index 00000000..878298cf
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginContainerTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code PluginContainer}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class PluginContainerTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new PluginContainer().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new PluginContainer().equals( null ) );
+
+ new PluginContainer().equals( new PluginContainer() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ PluginContainer thing = new PluginContainer();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new PluginContainer().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginExecutionTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginExecutionTest.java
new file mode 100644
index 00000000..e8fff512
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginExecutionTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code PluginExecution}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class PluginExecutionTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new PluginExecution().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new PluginExecution().equals( null ) );
+
+ new PluginExecution().equals( new PluginExecution() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ PluginExecution thing = new PluginExecution();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new PluginExecution().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginManagementTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginManagementTest.java
new file mode 100644
index 00000000..571399fe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginManagementTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code PluginManagement}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class PluginManagementTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new PluginManagement().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new PluginManagement().equals( null ) );
+
+ new PluginManagement().equals( new PluginManagement() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ PluginManagement thing = new PluginManagement();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new PluginManagement().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginTest.java
new file mode 100644
index 00000000..582145e0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Plugin}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class PluginTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Plugin().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Plugin().equals( null ) );
+
+ new Plugin().equals( new Plugin() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Plugin thing = new Plugin();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Plugin().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PrerequisitesTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PrerequisitesTest.java
new file mode 100644
index 00000000..727f2c3f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PrerequisitesTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Prerequisites}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class PrerequisitesTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Prerequisites().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Prerequisites().equals( null ) );
+
+ new Prerequisites().equals( new Prerequisites() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Prerequisites thing = new Prerequisites();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Prerequisites().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ProfileTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ProfileTest.java
new file mode 100644
index 00000000..512e2a88
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ProfileTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Profile}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ProfileTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Profile().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Profile().equals( null ) );
+
+ new Profile().equals( new Profile() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Profile thing = new Profile();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Profile().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/RelocationTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/RelocationTest.java
new file mode 100644
index 00000000..265304d8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/RelocationTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Relocation}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class RelocationTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Relocation().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Relocation().equals( null ) );
+
+ new Relocation().equals( new Relocation() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Relocation thing = new Relocation();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Relocation().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ReportPluginTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ReportPluginTest.java
new file mode 100644
index 00000000..d10cb791
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ReportPluginTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code ReportPlugin}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ReportPluginTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new ReportPlugin().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new ReportPlugin().equals( null ) );
+
+ new ReportPlugin().equals( new ReportPlugin() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ ReportPlugin thing = new ReportPlugin();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new ReportPlugin().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ReportSetTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ReportSetTest.java
new file mode 100644
index 00000000..2f514153
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ReportSetTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code ReportSet}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ReportSetTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new ReportSet().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new ReportSet().equals( null ) );
+
+ new ReportSet().equals( new ReportSet() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ ReportSet thing = new ReportSet();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new ReportSet().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ReportingTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ReportingTest.java
new file mode 100644
index 00000000..dbc0fa22
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ReportingTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Reporting}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ReportingTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Reporting().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Reporting().equals( null ) );
+
+ new Reporting().equals( new Reporting() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Reporting thing = new Reporting();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Reporting().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/RepositoryPolicyTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/RepositoryPolicyTest.java
new file mode 100644
index 00000000..3ae34350
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/RepositoryPolicyTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code RepositoryPolicy}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class RepositoryPolicyTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new RepositoryPolicy().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new RepositoryPolicy().equals( null ) );
+
+ new RepositoryPolicy().equals( new RepositoryPolicy() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ RepositoryPolicy thing = new RepositoryPolicy();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new RepositoryPolicy().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/RepositoryTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/RepositoryTest.java
new file mode 100644
index 00000000..b68b70a1
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/RepositoryTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Repository}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class RepositoryTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Repository().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Repository().equals( null ) );
+
+ new Repository().equals( new Repository() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Repository thing = new Repository();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Repository().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ResourceTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ResourceTest.java
new file mode 100644
index 00000000..fa40ab43
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ResourceTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Resource}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ResourceTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Resource().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Resource().equals( null ) );
+
+ new Resource().equals( new Resource() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Resource thing = new Resource();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Resource().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ScmTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ScmTest.java
new file mode 100644
index 00000000..4d769931
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ScmTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Scm}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class ScmTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Scm().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Scm().equals( null ) );
+
+ new Scm().equals( new Scm() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Scm thing = new Scm();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Scm().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/SiteTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/SiteTest.java
new file mode 100644
index 00000000..84896bb4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/SiteTest.java
@@ -0,0 +1,56 @@
+package org.apache.maven.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@code Site}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class SiteTest
+ extends TestCase
+{
+
+ public void testHashCodeNullSafe()
+ {
+ new Site().hashCode();
+ }
+
+ public void testEqualsNullSafe()
+ {
+ assertFalse( new Site().equals( null ) );
+
+ new Site().equals( new Site() );
+ }
+
+ public void testEqualsIdentity()
+ {
+ Site thing = new Site();
+ assertTrue( thing.equals( thing ) );
+ }
+
+ public void testToStringNullSafe()
+ {
+ assertNotNull( new Site().toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/pom.xml
new file mode 100644
index 00000000..40e7c0f9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/pom.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.3.3</version>
+ </parent>
+
+ <artifactId>maven-plugin-api</artifactId>
+
+ <name>Maven Plugin API</name>
+ <description>The API for plugins - Mojos - development.</description>
+
+ <scm><!-- remove when git scm url format can accept artifact-id at the end, as automatically inherited -->
+ <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
+ <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
+ <tag>maven-3.3.3</tag>
+ </scm>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <exclusions>
+ <exclusion>
+ <artifactId>wagon-provider-api</artifactId>
+ <groupId>org.apache.maven.wagon</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>org.eclipse.sisu.plexus</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <configuration>
+ <models>
+ <model>src/main/mdo/lifecycle.mdo</model>
+ </models>
+ <version>1.0.0</version>
+ </configuration>
+ <executions>
+ <execution>
+ <id>plugin-site-doc</id>
+ <phase>pre-site</phase>
+ <goals>
+ <goal>xdoc</goal>
+ </goals>
+ <configuration>
+ <models>
+ <model>src/main/mdo/plugin.mdo</model>
+ </models>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/monitor/logging/DefaultLog.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/monitor/logging/DefaultLog.java
new file mode 100644
index 00000000..4fee2e25
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/monitor/logging/DefaultLog.java
@@ -0,0 +1,131 @@
+package org.apache.maven.monitor.logging;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugin.logging.Log;
+import org.codehaus.plexus.logging.Logger;
+
+/**
+ * @author jdcasey
+ */
+public class DefaultLog
+ implements Log
+{
+
+ private final Logger logger;
+
+ public DefaultLog( Logger logger )
+ {
+ this.logger = logger;
+ }
+
+ public void debug( CharSequence content )
+ {
+ logger.debug( toString( content ) );
+ }
+
+ private String toString( CharSequence content )
+ {
+ if ( content == null )
+ {
+ return "";
+ }
+ else
+ {
+ return content.toString();
+ }
+ }
+
+ public void debug( CharSequence content, Throwable error )
+ {
+ logger.debug( toString( content ), error );
+ }
+
+ public void debug( Throwable error )
+ {
+ logger.debug( "", error );
+ }
+
+ public void info( CharSequence content )
+ {
+ logger.info( toString( content ) );
+ }
+
+ public void info( CharSequence content, Throwable error )
+ {
+ logger.info( toString( content ), error );
+ }
+
+ public void info( Throwable error )
+ {
+ logger.info( "", error );
+ }
+
+ public void warn( CharSequence content )
+ {
+ logger.warn( toString( content ) );
+ }
+
+ public void warn( CharSequence content, Throwable error )
+ {
+ logger.warn( toString( content ), error );
+ }
+
+ public void warn( Throwable error )
+ {
+ logger.warn( "", error );
+ }
+
+ public void error( CharSequence content )
+ {
+ logger.error( toString( content ) );
+ }
+
+ public void error( CharSequence content, Throwable error )
+ {
+ logger.error( toString( content ), error );
+ }
+
+ public void error( Throwable error )
+ {
+ logger.error( "", error );
+ }
+
+ public boolean isDebugEnabled()
+ {
+ return logger.isDebugEnabled();
+ }
+
+ public boolean isInfoEnabled()
+ {
+ return logger.isInfoEnabled();
+ }
+
+ public boolean isWarnEnabled()
+ {
+ return logger.isWarnEnabled();
+ }
+
+ public boolean isErrorEnabled()
+ {
+ return logger.isErrorEnabled();
+ }
+
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/AbstractMojo.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/AbstractMojo.java
new file mode 100644
index 00000000..d33e9bfc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/AbstractMojo.java
@@ -0,0 +1,198 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Map;
+
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.plugin.logging.SystemStreamLog;
+
+/**
+ * Abstract class to provide most of the infrastructure required to implement a <code>Mojo</code> except for
+ * the execute method.
+ * <br/>
+ * The implementation should have a <code>goal</code> annotation in the class-level javadoc annotation:
+ * <pre>
+ * &#47;&#42;&#42;
+ * &#42; &#64;goal goalName
+ * &#42;&#47;
+ * </pre>
+ *
+ * There are also a number of class-level javadoc annotations which can be used to control how and when the
+ * <code>Mojo</code> is executed:
+ * <br/>
+ * <br/>
+ *
+ * <table border="1">
+ * <tr bgcolor="#CCCCCC">
+ * <th>Descriptor Element</th>
+ * <th>Annotation</th>
+ * <th>Required?</th>
+ * <th>Notes</th>
+ * </tr>
+ * <tr>
+ * <td>goal</td>
+ * <td>@goal &lt;goalName&gt;</td>
+ * <td>Yes</td>
+ * <td>The name for the Mojo that users will reference from the command line to execute the Mojo directly,
+ * or inside a POM in order to provide Mojo-specific configuration.</td>
+ * </tr>
+ * <tr>
+ * <td>implementation</td>
+ * <td>none (detected)</td>
+ * <td>Yes</td>
+ * <td>The Mojo's fully-qualified class name (or script path in the case of non-Java Mojos).</td>
+ * </tr>
+ * <tr>
+ * <td>language</td>
+ * <td>none (detected)</td>
+ * <td>No. Default: <code>java</code></td>
+ * <td>The implementation language for this Mojo (Java, beanshell, etc.).</td>
+ * </tr>
+ * <tr>
+ * <td>configurator</td>
+ * <td>@configurator &lt;roleHint&gt;</td>
+ * <td>No</td>
+ * <td>The configurator type to use when injecting parameter values into this Mojo. The value is normally
+ * deduced from the Mojo's implementation language, but can be specified to allow a custom
+ * ComponentConfigurator implementation to be used.
+ * <br/>
+ * <i>NOTE: This will only be used in very special cases, using a highly controlled vocabulary of possible
+ * values. (Elements like this are why it's a good idea to use the descriptor tools.)</i>
+ * </td>
+ * </tr>
+ * <tr>
+ * <td>phase</td>
+ * <td>@phase &lt;phaseName&gt;</td>
+ * <td>No</td>
+ * <td>Binds this Mojo to a particular phase of the standard build lifecycle, if specified.
+ * <br/>
+ * <i>NOTE: This is only required if this Mojo is to participate in the standard build process.</i>
+ * </td>
+ * </tr>
+ * <tr>
+ * <td>execute</td>
+ * <td>@execute [phase=&lt;phaseName&gt;|goal=&lt;goalName&gt;] [lifecycle=&lt;lifecycleId&gt;]</td>
+ * <td>No</td>
+ * <td>When this goal is invoked, it will first invoke a parallel lifecycle, ending at the given phase.
+ * If a goal is provided instead of a phase, that goal will be executed in isolation.
+ * The execution of either will not affect the current project, but instead make available the
+ * <code>${executedProject}</code> expression if required. An alternate lifecycle can also be provided:
+ * for more information see the documentation on the
+ * <a href="http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html"
+ * target="_blank">build lifecycle</a>.
+ * </td>
+ * </tr>
+ * <tr>
+ * <td>requiresDependencyResolution</td>
+ * <td>@requiresDependencyResolution &lt;requiredScope&gt;</td>
+ * <td>No</td>
+ * <td>Flags this Mojo as requiring the dependencies in the specified scope (or an implied scope) to be
+ * resolved before it can execute.
+ * <br/>
+ * <i>NOTE: Currently supports <b>compile</b>, <b>runtime</b>, and <b>test</b> scopes.</i>
+ * </td>
+ * </tr>
+ * <tr>
+ * <td>description</td>
+ * <td>none (detected)</td>
+ * <td>No</td>
+ * <td>The description of this Mojo's functionality. <i>Using the toolset, this will be the class-level
+ * Javadoc description provided.
+ * <br/>
+ * <i>NOTE: While this is not a required part of the Mojo specification, it <b>SHOULD</b> be provided to
+ * enable future tool support for browsing, etc. and for clarity.</i>
+ * </td>
+ * </tr>
+ * <tr>
+ * <td>parameters</td>
+ * <td>N/A</td>
+ * <td>No</td>
+ * <td>Specifications for the parameters which this Mojo uses will be provided in <b>parameter</b> sub-elements
+ * in this section.
+ * <br/>
+ * <i>NOTE: Parameters are discussed in more detail below.</i>
+ * </td>
+ * </tr>
+ * </table>
+ *
+ * @see <a href="http://maven.apache.org/guides/plugin/guide-java-plugin-development.html" target="_blank">Guide to Developing Java Plugins</a>
+ * @see <a href="http://maven.apache.org/guides/mini/guide-configuring-plugins.html" target="_blank">Guide to Configuring Plug-ins</a>
+ * @see <a href="http://maven.apache.org/developers/mojo-api-specification.html" target="_blank">Mojo API Specification</a>
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @author jdcasey
+ * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
+ */
+public abstract class AbstractMojo
+ implements Mojo, ContextEnabled
+{
+ /** Instance logger */
+ private Log log;
+
+ /** Plugin container context */
+ private Map pluginContext;
+
+ /**
+ * @see org.apache.maven.plugin.Mojo#setLog(org.apache.maven.plugin.logging.Log)
+ */
+ public void setLog( Log log )
+ {
+ this.log = log;
+ }
+
+ /**
+ * Returns the logger that has been injected into this mojo. If no logger has been setup yet, a
+ * <code>SystemStreamLog</code> logger will be created and returned.
+ * <br/><br/>
+ * <strong>Note:</strong>
+ * The logger returned by this method must not be cached in an instance field during the construction of the mojo.
+ * This would cause the mojo to use a wrongly configured default logger when being run by Maven. The proper logger
+ * gets injected by the Plexus container <em>after</em> the mojo has been constructed. Therefore, simply call this
+ * method directly whenever you need the logger, it is fast enough and needs no caching.
+ *
+ * @see org.apache.maven.plugin.Mojo#getLog()
+ */
+ public Log getLog()
+ {
+ if ( log == null )
+ {
+ log = new SystemStreamLog();
+ }
+
+ return log;
+ }
+
+ /**
+ * @see org.apache.maven.plugin.ContextEnabled#getPluginContext()
+ */
+ public Map getPluginContext()
+ {
+ return pluginContext;
+ }
+
+ /**
+ * @see org.apache.maven.plugin.ContextEnabled#setPluginContext(java.util.Map)
+ */
+ public void setPluginContext( Map pluginContext )
+ {
+ this.pluginContext = pluginContext;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/AbstractMojoExecutionException.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/AbstractMojoExecutionException.java
new file mode 100644
index 00000000..52aded3d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/AbstractMojoExecutionException.java
@@ -0,0 +1,53 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Base exception.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public abstract class AbstractMojoExecutionException
+ extends Exception
+{
+ protected Object source;
+
+ protected String longMessage;
+
+ public AbstractMojoExecutionException( String message )
+ {
+ super( message );
+ }
+
+ public AbstractMojoExecutionException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ public String getLongMessage()
+ {
+ return longMessage;
+ }
+
+ public Object getSource()
+ {
+ return source;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/ContextEnabled.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/ContextEnabled.java
new file mode 100644
index 00000000..d63cb49b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/ContextEnabled.java
@@ -0,0 +1,45 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Map;
+
+/**
+ * Interface to allow <code>Mojos</code> to communicate with each others <code>Mojos</code>, other than
+ * project's source root and project's attachment.
+ * <br/>
+ * The plugin manager would pull the context out of the plugin container context, and populate it into the Mojo.
+ *
+ * @author jdcasey
+ */
+public interface ContextEnabled
+{
+ /**
+ * Set a new shared context <code>Map</code> to a mojo before executing it.
+ *
+ * @param pluginContext a new <code>Map</code>
+ */
+ void setPluginContext( Map pluginContext );
+
+ /**
+ * @return a <code>Map</code> stored in the plugin container's context.
+ */
+ Map getPluginContext();
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/Mojo.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/Mojo.java
new file mode 100644
index 00000000..76a2aad7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/Mojo.java
@@ -0,0 +1,72 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugin.logging.Log;
+
+/**
+ * This interface forms the contract required for <code>Mojos</code> to interact with the <code>Maven</code>
+ * infrastructure.
+ * <br/>
+ * It features an <code>execute()</code> method, which triggers the Mojo's build-process behavior, and can throw
+ * a MojoExecutionException or MojoFailureException if error conditions occur.
+ * <br/>
+ * Also included is the <code>setLog(...)</code> method, which simply allows Maven to inject a logging mechanism which
+ * will allow the Mojo to communicate to the outside world through standard Maven channels.
+ *
+ * @author Jason van Zyl
+ */
+public interface Mojo
+{
+ /** The component <code>role</code> hint for Plexus container */
+ String ROLE = Mojo.class.getName();
+
+ /**
+ * Perform whatever build-process behavior this <code>Mojo</code> implements.
+ * <br/>
+ * This is the main trigger for the <code>Mojo</code> inside the <code>Maven</code> system, and allows
+ * the <code>Mojo</code> to communicate errors.
+ *
+ * @throws MojoExecutionException if an unexpected problem occurs.
+ * Throwing this exception causes a "BUILD ERROR" message to be displayed.
+ * @throws MojoFailureException if an expected problem (such as a compilation failure) occurs.
+ * Throwing this exception causes a "BUILD FAILURE" message to be displayed.
+ */
+ void execute()
+ throws MojoExecutionException, MojoFailureException;
+
+ /**
+ * Inject a standard <code>Maven</code> logging mechanism to allow this <code>Mojo</code> to communicate events
+ * and feedback to the user.
+ *
+ * @param log a new logger
+ */
+ // TODO: not sure about this here, and may want a getLog on here as well/instead
+ void setLog( Log log );
+
+ /**
+ * Furnish access to the standard Maven logging mechanism which is managed in this base class.
+ *
+ * @return a log4j-like logger object which allows plugins to create messages at levels of <code>"debug"</code>,
+ * <code>"info"</code>, <code>"warn"</code>, and <code>"error"</code>. This logger is the accepted means to display
+ * information to the user.
+ */
+ Log getLog();
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoExecutionException.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoExecutionException.java
new file mode 100644
index 00000000..b440af02
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoExecutionException.java
@@ -0,0 +1,80 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * An exception occurring during the execution of a plugin.
+ * <br/>
+ * Throwing this exception causes a "BUILD ERROR" message to be displayed.
+ *
+ * @author Brett Porter
+ */
+public class MojoExecutionException
+ extends AbstractMojoExecutionException
+{
+ /**
+ * Construct a new <code>MojoExecutionException</code> exception providing the source and a short and long message:
+ * these messages are used to improve the message written at the end of Maven build.
+ *
+ * @param source
+ * @param shortMessage
+ * @param longMessage
+ */
+ public MojoExecutionException( Object source, String shortMessage, String longMessage )
+ {
+ super( shortMessage );
+ this.source = source;
+ this.longMessage = longMessage;
+ }
+
+ /**
+ * Construct a new <code>MojoExecutionException</code> exception wrapping an underlying <code>Exception</code>
+ * and providing a <code>message</code>.
+ *
+ * @param message
+ * @param cause
+ */
+ public MojoExecutionException( String message, Exception cause )
+ {
+ super( message, cause );
+ }
+
+ /**
+ * Construct a new <code>MojoExecutionException</code> exception wrapping an underlying <code>Throwable</code>
+ * and providing a <code>message</code>.
+ *
+ * @param message
+ * @param cause
+ */
+ public MojoExecutionException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ /**
+ * Construct a new <code>MojoExecutionException</code> exception providing a <code>message</code>.
+ *
+ * @param message
+ */
+ public MojoExecutionException( String message )
+ {
+ super( message );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoFailureException.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoFailureException.java
new file mode 100644
index 00000000..28dc43d3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoFailureException.java
@@ -0,0 +1,69 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * An exception occurring during the execution of a plugin (such as a compilation failure).
+ * <br/>
+ * Throwing this exception causes a "BUILD FAILURE" message to be displayed.
+ *
+ * @author Brett Porter
+ */
+public class MojoFailureException
+ extends AbstractMojoExecutionException
+{
+ /**
+ * Construct a new <code>MojoFailureException</code> exception providing the source and a short and long message:
+ * these messages are used to improve the message written at the end of Maven build.
+ *
+ * @param source
+ * @param shortMessage
+ * @param longMessage
+ */
+ public MojoFailureException( Object source, String shortMessage, String longMessage )
+ {
+ super( shortMessage );
+ this.source = source;
+ this.longMessage = longMessage;
+ }
+
+ /**
+ * Construct a new <code>MojoFailureException</code> exception providing a message.
+ *
+ * @param message
+ */
+ public MojoFailureException( String message )
+ {
+ super( message );
+ }
+
+ /**
+ * Construct a new <code>MojoFailureException</code> exception wrapping an underlying <code>Throwable</code>
+ * and providing a <code>message</code>.
+ *
+ * @param message
+ * @param cause
+ * @since 2.0.9
+ */
+ public MojoFailureException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoNotFoundException.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoNotFoundException.java
new file mode 100644
index 00000000..4d99546a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoNotFoundException.java
@@ -0,0 +1,85 @@
+package org.apache.maven.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+
+public class MojoNotFoundException
+ extends Exception
+{
+ private String goal;
+
+ private PluginDescriptor pluginDescriptor;
+
+ public MojoNotFoundException( String goal, PluginDescriptor pluginDescriptor )
+ {
+ super( toMessage( goal, pluginDescriptor ) );
+
+ this.goal = goal;
+ this.pluginDescriptor = pluginDescriptor;
+ }
+
+ public String getGoal()
+ {
+ return goal;
+ }
+
+ public PluginDescriptor getPluginDescriptor()
+ {
+ return pluginDescriptor;
+ }
+
+ private static String toMessage( String goal, PluginDescriptor pluginDescriptor )
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+
+ buffer.append( "Could not find goal '" ).append( goal ).append( "'" );
+
+ if ( pluginDescriptor != null )
+ {
+ buffer.append( " in plugin " ).append( pluginDescriptor.getId() );
+
+ buffer.append( " among available goals " );
+ List<MojoDescriptor> mojos = pluginDescriptor.getMojos();
+ if ( mojos != null )
+ {
+ for ( Iterator<MojoDescriptor> it = mojos.iterator(); it.hasNext(); )
+ {
+ MojoDescriptor mojo = it.next();
+ if ( mojo != null )
+ {
+ buffer.append( mojo.getGoal() );
+ }
+ if ( it.hasNext() )
+ {
+ buffer.append( ", " );
+ }
+ }
+ }
+ }
+
+ return buffer.toString();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/DuplicateMojoDescriptorException.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/DuplicateMojoDescriptorException.java
new file mode 100644
index 00000000..b236c8c7
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/DuplicateMojoDescriptorException.java
@@ -0,0 +1,34 @@
+package org.apache.maven.plugin.descriptor;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public class DuplicateMojoDescriptorException
+ extends InvalidPluginDescriptorException
+{
+
+ public DuplicateMojoDescriptorException( String goalPrefix, String goal, String existingImplementation,
+ String newImplementation )
+ {
+ super( "Goal: " + goal + " already exists in the plugin descriptor for prefix: " + goalPrefix
+ + "\nExisting implementation is: " + existingImplementation
+ + "\nConflicting implementation is: " + newImplementation );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/DuplicateParameterException.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/DuplicateParameterException.java
new file mode 100644
index 00000000..4cad9b7c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/DuplicateParameterException.java
@@ -0,0 +1,31 @@
+package org.apache.maven.plugin.descriptor;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public class DuplicateParameterException
+ extends InvalidPluginDescriptorException
+{
+
+ public DuplicateParameterException( String message )
+ {
+ super( message );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/InvalidParameterException.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/InvalidParameterException.java
new file mode 100644
index 00000000..557a3d54
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/InvalidParameterException.java
@@ -0,0 +1,37 @@
+package org.apache.maven.plugin.descriptor;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author Jason van Zyl
+ */
+public class InvalidParameterException
+ extends InvalidPluginDescriptorException
+{
+ public InvalidParameterException( String element, int i )
+ {
+ super( "The " + element + " element in parameter # " + i + " is invalid. It cannot be null." );
+ }
+
+ public InvalidParameterException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/InvalidPluginDescriptorException.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/InvalidPluginDescriptorException.java
new file mode 100644
index 00000000..4b8e7397
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/InvalidPluginDescriptorException.java
@@ -0,0 +1,38 @@
+package org.apache.maven.plugin.descriptor;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.codehaus.plexus.configuration.PlexusConfigurationException;
+
+public class InvalidPluginDescriptorException
+ extends PlexusConfigurationException
+{
+
+ public InvalidPluginDescriptorException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ public InvalidPluginDescriptorException( String message )
+ {
+ super( message );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java
new file mode 100644
index 00000000..bc2d5554
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java
@@ -0,0 +1,719 @@
+package org.apache.maven.plugin.descriptor;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.plugin.Mojo;
+import org.codehaus.plexus.component.repository.ComponentDescriptor;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+
+/**
+ * The bean containing the Mojo descriptor.
+ * <br/>
+ * For more information about the usage tag, have a look to:
+ * <a href="http://maven.apache.org/developers/mojo-api-specification.html">
+ * http://maven.apache.org/developers/mojo-api-specification.html</a>
+ *
+ * @todo is there a need for the delegation of MavenMojoDescriptor to this?
+ * Why not just extend ComponentDescriptor here?
+ */
+public class MojoDescriptor
+ extends ComponentDescriptor<Mojo>
+ implements Cloneable
+{
+ /** The Plexus component type */
+ public static final String MAVEN_PLUGIN = "maven-plugin";
+
+ /** "once-per-session" execution strategy */
+ public static final String SINGLE_PASS_EXEC_STRATEGY = "once-per-session";
+
+ /** "always" execution strategy */
+ public static final String MULTI_PASS_EXEC_STRATEGY = "always";
+
+ private static final String DEFAULT_INSTANTIATION_STRATEGY = "per-lookup";
+
+ private static final String DEFAULT_LANGUAGE = "java";
+
+ private List<Parameter> parameters;
+
+ private Map<String, Parameter> parameterMap;
+
+ /** By default, the execution strategy is "once-per-session" */
+ private String executionStrategy = SINGLE_PASS_EXEC_STRATEGY;
+
+ /**
+ * The goal name for the Mojo, that users will reference from the command line to execute the Mojo directly, or
+ * inside a POM in order to provide Mojo-specific configuration.
+ */
+ private String goal;
+
+ /**
+ * Defines a default phase to bind a mojo execution to if the user does not explicitly set a phase in the POM.
+ * <i>Note:</i> This will not automagically make a mojo run when the plugin declaration is added to the POM. It
+ * merely enables the user to omit the <code>&lt;phase&gt;</code> element from the surrounding
+ * <code>&lt;execution&gt;</code> element.
+ */
+ private String phase;
+
+ /** Specify the version when the Mojo was added to the API. Similar to Javadoc since. */
+ private String since;
+
+ /** Reference the invocation phase of the Mojo. */
+ private String executePhase;
+
+ /** Reference the invocation goal of the Mojo. */
+ private String executeGoal;
+
+ /** Reference the invocation lifecycle of the Mojo. */
+ private String executeLifecycle;
+
+ /**
+ * Specify the version when the Mojo was deprecated to the API. Similar to Javadoc deprecated. This will trigger a
+ * warning when a user tries to configure a parameter marked as deprecated.
+ */
+ private String deprecated;
+
+ /**
+ * Flags this Mojo to run it in a multi module way, i.e. aggregate the build with the set of projects listed as
+ * modules. By default, no need to aggregate the Maven project and its child modules
+ */
+ private boolean aggregator = false;
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ /** Specify the required dependencies in a specified scope */
+ private String dependencyResolutionRequired = null;
+
+ /**
+ * The scope of (transitive) dependencies that should be collected but not resolved.
+ * @since 3.0-alpha-3
+ */
+ private String dependencyCollectionRequired;
+
+ /** By default, the Mojo needs a Maven project to be executed */
+ private boolean projectRequired = true;
+
+ /** By default, the Mojo is assumed to work offline as well */
+ private boolean onlineRequired = false;
+
+ /** Plugin configuration */
+ private PlexusConfiguration mojoConfiguration;
+
+ /** Plugin descriptor */
+ private PluginDescriptor pluginDescriptor;
+
+ /** By default, the Mojo is inherited */
+ private boolean inheritedByDefault = true;
+
+ /** By default, the Mojo cannot be invoked directly */
+ private boolean directInvocationOnly = false;
+
+ /** By default, the Mojo don't need reports to run */
+ private boolean requiresReports = false;
+
+ /**
+ * By default, mojos are not threadsafe
+ * @since 3.0-beta-2
+ */
+ private boolean threadSafe = false;
+
+ /**
+ * Default constructor.
+ */
+ public MojoDescriptor()
+ {
+ setInstantiationStrategy( DEFAULT_INSTANTIATION_STRATEGY );
+ setComponentFactory( DEFAULT_LANGUAGE );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ /**
+ * @return the language of this Mojo, i.e. <code>java</code>
+ */
+ public String getLanguage()
+ {
+ return getComponentFactory();
+ }
+
+ /**
+ * @param language the new language
+ */
+ public void setLanguage( String language )
+ {
+ setComponentFactory( language );
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo is deprecated, <code>false</code> otherwise.
+ */
+ public String getDeprecated()
+ {
+ return deprecated;
+ }
+
+ /**
+ * @param deprecated <code>true</code> to deprecate the Mojo, <code>false</code> otherwise.
+ */
+ public void setDeprecated( String deprecated )
+ {
+ this.deprecated = deprecated;
+ }
+
+ /**
+ * @return the list of parameters
+ */
+ public List<Parameter> getParameters()
+ {
+ return parameters;
+ }
+
+ /**
+ * @param parameters the new list of parameters
+ * @throws DuplicateParameterException if any
+ */
+ public void setParameters( List<Parameter> parameters )
+ throws DuplicateParameterException
+ {
+ for ( Parameter parameter : parameters )
+ {
+ addParameter( parameter );
+ }
+ }
+
+ /**
+ * @param parameter add a new parameter
+ * @throws DuplicateParameterException if any
+ */
+ public void addParameter( Parameter parameter )
+ throws DuplicateParameterException
+ {
+ if ( parameters != null && parameters.contains( parameter ) )
+ {
+ throw new DuplicateParameterException( parameter.getName()
+ + " has been declared multiple times in mojo with goal: " + getGoal() + " (implementation: "
+ + getImplementation() + ")" );
+ }
+
+ if ( parameters == null )
+ {
+ parameters = new LinkedList<Parameter>();
+ }
+
+ parameters.add( parameter );
+ }
+
+ /**
+ * @return the list parameters as a Map
+ */
+ public Map<String, Parameter> getParameterMap()
+ {
+ if ( parameterMap == null )
+ {
+ parameterMap = new HashMap<String, Parameter>();
+
+ if ( parameters != null )
+ {
+ for ( Parameter pd : parameters )
+ {
+ parameterMap.put( pd.getName(), pd );
+ }
+ }
+ }
+
+ return parameterMap;
+ }
+
+ // ----------------------------------------------------------------------
+ // Dependency requirement
+ // ----------------------------------------------------------------------
+
+ /**
+ * @param requiresDependencyResolution the new required dependencies in a specified scope
+ */
+ public void setDependencyResolutionRequired( String requiresDependencyResolution )
+ {
+ this.dependencyResolutionRequired = requiresDependencyResolution;
+ }
+
+ public String getDependencyResolutionRequired()
+ {
+ return dependencyResolutionRequired;
+ }
+
+ /**
+ * @return the required dependencies in a specified scope
+ * @TODO the name is not intelligible
+ */
+ @Deprecated
+ public String isDependencyResolutionRequired()
+ {
+ return dependencyResolutionRequired;
+ }
+
+ /**
+ * @since 3.0-alpha-3
+ */
+ public void setDependencyCollectionRequired( String requiresDependencyCollection )
+ {
+ this.dependencyCollectionRequired = requiresDependencyCollection;
+ }
+
+ /**
+ * Gets the scope of (transitive) dependencies that should be collected. Dependency collection refers to the process
+ * of calculating the complete dependency tree in terms of artifact coordinates. In contrast to dependency
+ * resolution, this does not include the download of the files for the dependency artifacts. It is meant for mojos
+ * that only want to analyze the set of transitive dependencies, in particular during early lifecycle phases where
+ * full dependency resolution might fail due to projects which haven't been built yet.
+ *
+ * @return The scope of (transitive) dependencies that should be collected or {@code null} if none.
+ * @since 3.0-alpha-3
+ */
+ public String getDependencyCollectionRequired()
+ {
+ return dependencyCollectionRequired;
+ }
+
+ // ----------------------------------------------------------------------
+ // Project requirement
+ // ----------------------------------------------------------------------
+
+ /**
+ * @param requiresProject <code>true</code> if the Mojo needs a Maven project to be executed, <code>false</code>
+ * otherwise.
+ */
+ public void setProjectRequired( boolean requiresProject )
+ {
+ this.projectRequired = requiresProject;
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo needs a Maven project to be executed, <code>false</code> otherwise.
+ */
+ public boolean isProjectRequired()
+ {
+ return projectRequired;
+ }
+
+ // ----------------------------------------------------------------------
+ // Online vs. Offline requirement
+ // ----------------------------------------------------------------------
+
+ /**
+ * @param requiresOnline <code>true</code> if the Mojo is online, <code>false</code> otherwise.
+ */
+ public void setOnlineRequired( boolean requiresOnline )
+ {
+ this.onlineRequired = requiresOnline;
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo is online, <code>false</code> otherwise.
+ */
+ // blech! this isn't even intelligible as a method name. provided for
+ // consistency...
+ public boolean isOnlineRequired()
+ {
+ return onlineRequired;
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo is online, <code>false</code> otherwise.
+ */
+ // more english-friendly method...keep the code clean! :)
+ public boolean requiresOnline()
+ {
+ return onlineRequired;
+ }
+
+ /**
+ * @return the binded phase name of the Mojo
+ */
+ public String getPhase()
+ {
+ return phase;
+ }
+
+ /**
+ * @param phase the new binded phase name of the Mojo
+ */
+ public void setPhase( String phase )
+ {
+ this.phase = phase;
+ }
+
+ /**
+ * @return the version when the Mojo was added to the API
+ */
+ public String getSince()
+ {
+ return since;
+ }
+
+ /**
+ * @param since the new version when the Mojo was added to the API
+ */
+ public void setSince( String since )
+ {
+ this.since = since;
+ }
+
+ /**
+ * @return The goal name of the Mojo
+ */
+ public String getGoal()
+ {
+ return goal;
+ }
+
+ /**
+ * @param goal The new goal name of the Mojo
+ */
+ public void setGoal( String goal )
+ {
+ this.goal = goal;
+ }
+
+ /**
+ * @return the invocation phase of the Mojo
+ */
+ public String getExecutePhase()
+ {
+ return executePhase;
+ }
+
+ /**
+ * @param executePhase the new invocation phase of the Mojo
+ */
+ public void setExecutePhase( String executePhase )
+ {
+ this.executePhase = executePhase;
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo uses <code>always</code> for the <code>executionStrategy</code>
+ */
+ public boolean alwaysExecute()
+ {
+ return MULTI_PASS_EXEC_STRATEGY.equals( executionStrategy );
+ }
+
+ /**
+ * @return the execution strategy
+ */
+ public String getExecutionStrategy()
+ {
+ return executionStrategy;
+ }
+
+ /**
+ * @param executionStrategy the new execution strategy
+ */
+ public void setExecutionStrategy( String executionStrategy )
+ {
+ this.executionStrategy = executionStrategy;
+ }
+
+ /**
+ * @return the mojo configuration
+ */
+ public PlexusConfiguration getMojoConfiguration()
+ {
+ if ( mojoConfiguration == null )
+ {
+ mojoConfiguration = new XmlPlexusConfiguration( "configuration" );
+ }
+ return mojoConfiguration;
+ }
+
+ /**
+ * @param mojoConfiguration a new mojo configuration
+ */
+ public void setMojoConfiguration( PlexusConfiguration mojoConfiguration )
+ {
+ this.mojoConfiguration = mojoConfiguration;
+ }
+
+ /** {@inheritDoc} */
+ public String getRole()
+ {
+ return Mojo.ROLE;
+ }
+
+ /** {@inheritDoc} */
+ public String getRoleHint()
+ {
+ return getId();
+ }
+
+ /**
+ * @return the id of the mojo, based on the goal name
+ */
+ public String getId()
+ {
+ return getPluginDescriptor().getId() + ":" + getGoal();
+ }
+
+ /**
+ * @return the full goal name
+ * @see PluginDescriptor#getGoalPrefix()
+ * @see #getGoal()
+ */
+ public String getFullGoalName()
+ {
+ return getPluginDescriptor().getGoalPrefix() + ":" + getGoal();
+ }
+
+ /** {@inheritDoc} */
+ public String getComponentType()
+ {
+ return MAVEN_PLUGIN;
+ }
+
+ /**
+ * @return the plugin descriptor
+ */
+ public PluginDescriptor getPluginDescriptor()
+ {
+ return pluginDescriptor;
+ }
+
+ /**
+ * @param pluginDescriptor the new plugin descriptor
+ */
+ public void setPluginDescriptor( PluginDescriptor pluginDescriptor )
+ {
+ this.pluginDescriptor = pluginDescriptor;
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo is herited, <code>false</code> otherwise.
+ */
+ public boolean isInheritedByDefault()
+ {
+ return inheritedByDefault;
+ }
+
+ /**
+ * @param inheritedByDefault <code>true</code> if the Mojo is herited, <code>false</code> otherwise.
+ */
+ public void setInheritedByDefault( boolean inheritedByDefault )
+ {
+ this.inheritedByDefault = inheritedByDefault;
+ }
+
+ /** {@inheritDoc} */
+ public boolean equals( Object object )
+ {
+ if ( this == object )
+ {
+ return true;
+ }
+
+ if ( object instanceof MojoDescriptor )
+ {
+ MojoDescriptor other = (MojoDescriptor) object;
+
+ if ( !compareObjects( getPluginDescriptor(), other.getPluginDescriptor() ) )
+ {
+ return false;
+ }
+
+ return compareObjects( getGoal(), other.getGoal() );
+
+ }
+
+ return false;
+ }
+
+ private boolean compareObjects( Object first, Object second )
+ {
+ if ( first == second )
+ {
+ return true;
+ }
+
+ if ( first == null || second == null )
+ {
+ return false;
+ }
+
+ return first.equals( second );
+ }
+
+ /** {@inheritDoc} */
+ public int hashCode()
+ {
+ int result = 1;
+
+ String goal = getGoal();
+
+ if ( goal != null )
+ {
+ result += goal.hashCode();
+ }
+
+ PluginDescriptor pd = getPluginDescriptor();
+
+ if ( pd != null )
+ {
+ result -= pd.hashCode();
+ }
+
+ return result;
+ }
+
+ /**
+ * @return the invocation lifecycle of the Mojo
+ */
+ public String getExecuteLifecycle()
+ {
+ return executeLifecycle;
+ }
+
+ /**
+ * @param executeLifecycle the new invocation lifecycle of the Mojo
+ */
+ public void setExecuteLifecycle( String executeLifecycle )
+ {
+ this.executeLifecycle = executeLifecycle;
+ }
+
+ /**
+ * @param aggregator <code>true</code> if the Mojo uses the Maven project and its child modules,
+ * <code>false</code> otherwise.
+ */
+ public void setAggregator( boolean aggregator )
+ {
+ this.aggregator = aggregator;
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo uses the Maven project and its child modules,
+ * <code>false</code> otherwise.
+ */
+ public boolean isAggregator()
+ {
+ return aggregator;
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo cannot be invoked directly, <code>false</code> otherwise.
+ */
+ public boolean isDirectInvocationOnly()
+ {
+ return directInvocationOnly;
+ }
+
+ /**
+ * @param directInvocationOnly <code>true</code> if the Mojo cannot be invoked directly,
+ * <code>false</code> otherwise.
+ */
+ public void setDirectInvocationOnly( boolean directInvocationOnly )
+ {
+ this.directInvocationOnly = directInvocationOnly;
+ }
+
+ /**
+ * @return <code>true</code> if the Mojo needs reports to run, <code>false</code> otherwise.
+ */
+ public boolean isRequiresReports()
+ {
+ return requiresReports;
+ }
+
+ /**
+ * @param requiresReports <code>true</code> if the Mojo needs reports to run, <code>false</code> otherwise.
+ */
+ public void setRequiresReports( boolean requiresReports )
+ {
+ this.requiresReports = requiresReports;
+ }
+
+ /**
+ * @param executeGoal the new invocation goal of the Mojo
+ */
+ public void setExecuteGoal( String executeGoal )
+ {
+ this.executeGoal = executeGoal;
+ }
+
+ /**
+ * @return the invocation goal of the Mojo
+ */
+ public String getExecuteGoal()
+ {
+ return executeGoal;
+ }
+
+
+ /**
+ * @return True if the <code>Mojo</code> is thread-safe and can be run safely in parallel
+ * @since 3.0-beta-2
+ */
+ public boolean isThreadSafe()
+ {
+ return threadSafe;
+ }
+
+ /**
+ * @param threadSafe indicates that the mojo is thread-safe and can be run safely in parallel
+ * @since 3.0-beta-2
+ */
+ public void setThreadSafe( boolean threadSafe )
+ {
+ this.threadSafe = threadSafe;
+ }
+
+ /**
+ * @return {@code true} if this mojo forks either a goal or the lifecycle, {@code false} otherwise.
+ */
+ public boolean isForking()
+ {
+ return ( getExecuteGoal() != null && getExecuteGoal().length() > 0 )
+ || ( getExecutePhase() != null && getExecutePhase().length() > 0 );
+ }
+
+ /**
+ * Creates a shallow copy of this mojo descriptor.
+ */
+ @Override
+ public MojoDescriptor clone()
+ {
+ try
+ {
+ return (MojoDescriptor) super.clone();
+ }
+ catch ( CloneNotSupportedException e )
+ {
+ throw new UnsupportedOperationException( e );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/Parameter.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/Parameter.java
new file mode 100644
index 00000000..6c5036bc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/Parameter.java
@@ -0,0 +1,207 @@
+package org.apache.maven.plugin.descriptor;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author Jason van Zyl
+ */
+public class Parameter
+ implements Cloneable
+{
+ private String alias;
+
+ private String name;
+
+ private String type;
+
+ private boolean required;
+
+ private boolean editable = true;
+
+ private String description;
+
+ private String expression;
+
+ private String deprecated;
+
+ private String defaultValue;
+
+ private String implementation;
+
+ private Requirement requirement;
+
+ private String since;
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName( String name )
+ {
+ this.name = name;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+
+ public void setType( String type )
+ {
+ this.type = type;
+ }
+
+ public boolean isRequired()
+ {
+ return required;
+ }
+
+ public void setRequired( boolean required )
+ {
+ this.required = required;
+ }
+
+ public String getDescription()
+ {
+ return description;
+ }
+
+ public void setDescription( String description )
+ {
+ this.description = description;
+ }
+
+ public String getExpression()
+ {
+ return expression;
+ }
+
+ public void setExpression( String expression )
+ {
+ this.expression = expression;
+ }
+
+ public String getDeprecated()
+ {
+ return deprecated;
+ }
+
+ public void setDeprecated( String deprecated )
+ {
+ this.deprecated = deprecated;
+ }
+
+ public int hashCode()
+ {
+ return name.hashCode();
+ }
+
+ public boolean equals( Object other )
+ {
+ return ( other instanceof Parameter ) && getName().equals( ( (Parameter) other ).getName() );
+ }
+
+ public String getAlias()
+ {
+ return alias;
+ }
+
+ public void setAlias( String alias )
+ {
+ this.alias = alias;
+ }
+
+ public boolean isEditable()
+ {
+ return editable;
+ }
+
+ public void setEditable( boolean editable )
+ {
+ this.editable = editable;
+ }
+
+ public void setDefaultValue( String defaultValue )
+ {
+ this.defaultValue = defaultValue;
+ }
+
+ public String getDefaultValue()
+ {
+ return defaultValue;
+ }
+
+ public String toString()
+ {
+ return "Mojo parameter [name: \'" + getName() + "\'; alias: \'" + getAlias() + "\']";
+ }
+
+ public Requirement getRequirement()
+ {
+ return requirement;
+ }
+
+ public void setRequirement( Requirement requirement )
+ {
+ this.requirement = requirement;
+ }
+
+ public String getImplementation()
+ {
+ return implementation;
+ }
+
+ public void setImplementation( String implementation )
+ {
+ this.implementation = implementation;
+ }
+
+ public String getSince()
+ {
+ return since;
+ }
+
+ public void setSince( String since )
+ {
+ this.since = since;
+ }
+
+ /**
+ * Creates a shallow copy of this parameter.
+ */
+ @Override
+ public Parameter clone()
+ {
+ try
+ {
+ return (Parameter) super.clone();
+ }
+ catch ( CloneNotSupportedException e )
+ {
+ throw new UnsupportedOperationException( e );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java
new file mode 100644
index 00000000..1d6f1be4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java
@@ -0,0 +1,445 @@
+package org.apache.maven.plugin.descriptor;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.lifecycle.Lifecycle;
+import org.apache.maven.plugin.lifecycle.LifecycleConfiguration;
+import org.apache.maven.plugin.lifecycle.io.xpp3.LifecycleMappingsXpp3Reader;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
+import org.codehaus.plexus.component.repository.ComponentSetDescriptor;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * @author Jason van Zyl
+ */
+public class PluginDescriptor
+ extends ComponentSetDescriptor
+ implements Cloneable
+{
+
+ private static final String LIFECYCLE_DESCRIPTOR = "META-INF/maven/lifecycle.xml";
+
+ private String groupId;
+
+ private String artifactId;
+
+ private String version;
+
+ private String goalPrefix;
+
+ private String source;
+
+ private boolean inheritedByDefault = true;
+
+ private List<Artifact> artifacts;
+
+ private ClassRealm classRealm;
+
+ // calculated on-demand.
+ private Map<String, Artifact> artifactMap;
+
+ private Set<Artifact> introducedDependencyArtifacts;
+
+ private String name;
+
+ private String description;
+
+ private String requiredMavenVersion;
+
+ private Plugin plugin;
+
+ private Artifact pluginArtifact;
+
+ private Map<String, Lifecycle> lifecycleMappings;
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ @SuppressWarnings( { "unchecked", "rawtypes" } )
+ public List<MojoDescriptor> getMojos()
+ {
+ return (List) getComponents();
+ }
+
+ public void addMojo( MojoDescriptor mojoDescriptor )
+ throws DuplicateMojoDescriptorException
+ {
+ MojoDescriptor existing = null;
+ // this relies heavily on the equals() and hashCode() for ComponentDescriptor,
+ // which uses role:roleHint for identity...and roleHint == goalPrefix:goal.
+ // role does not vary for Mojos.
+ List<MojoDescriptor> mojos = getMojos();
+
+ if ( mojos != null && mojos.contains( mojoDescriptor ) )
+ {
+ int indexOf = mojos.indexOf( mojoDescriptor );
+
+ existing = mojos.get( indexOf );
+ }
+
+ if ( existing != null )
+ {
+ throw new DuplicateMojoDescriptorException( getGoalPrefix(), mojoDescriptor.getGoal(), existing
+ .getImplementation(), mojoDescriptor.getImplementation() );
+ }
+ else
+ {
+ addComponentDescriptor( mojoDescriptor );
+ }
+ }
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public void setGroupId( String groupId )
+ {
+ this.groupId = groupId;
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ public void setArtifactId( String artifactId )
+ {
+ this.artifactId = artifactId;
+ }
+
+ // ----------------------------------------------------------------------
+ // Dependencies
+ // ----------------------------------------------------------------------
+
+ public static String constructPluginKey( String groupId, String artifactId, String version )
+ {
+ return groupId + ":" + artifactId + ":" + version;
+ }
+
+ public String getPluginLookupKey()
+ {
+ return groupId + ":" + artifactId;
+ }
+
+ public String getId()
+ {
+ return constructPluginKey( groupId, artifactId, version );
+ }
+
+ public static String getDefaultPluginArtifactId( String id )
+ {
+ return "maven-" + id + "-plugin";
+ }
+
+ public static String getDefaultPluginGroupId()
+ {
+ return "org.apache.maven.plugins";
+ }
+
+ /**
+ * Parse maven-...-plugin.
+ *
+ * @todo move to plugin-tools-api as a default only
+ */
+ public static String getGoalPrefixFromArtifactId( String artifactId )
+ {
+ if ( "maven-plugin-plugin".equals( artifactId ) )
+ {
+ return "plugin";
+ }
+ else
+ {
+ return artifactId.replaceAll( "-?maven-?", "" ).replaceAll( "-?plugin-?", "" );
+ }
+ }
+
+ public String getGoalPrefix()
+ {
+ return goalPrefix;
+ }
+
+ public void setGoalPrefix( String goalPrefix )
+ {
+ this.goalPrefix = goalPrefix;
+ }
+
+ public void setVersion( String version )
+ {
+ this.version = version;
+ }
+
+ public String getVersion()
+ {
+ return version;
+ }
+
+ public void setSource( String source )
+ {
+ this.source = source;
+ }
+
+ public String getSource()
+ {
+ return source;
+ }
+
+ public boolean isInheritedByDefault()
+ {
+ return inheritedByDefault;
+ }
+
+ public void setInheritedByDefault( boolean inheritedByDefault )
+ {
+ this.inheritedByDefault = inheritedByDefault;
+ }
+
+ /**
+ * Gets the artifacts that make up the plugin's class realm, excluding artifacts shadowed by the Maven core realm
+ * like {@code maven-project}.
+ *
+ * @return The plugin artifacts, never {@code null}.
+ */
+ public List<Artifact> getArtifacts()
+ {
+ return artifacts;
+ }
+
+ public void setArtifacts( List<Artifact> artifacts )
+ {
+ this.artifacts = artifacts;
+
+ // clear the calculated artifactMap
+ artifactMap = null;
+ }
+
+ /**
+ * The map of artifacts accessible by the versionlessKey, i.e. groupId:artifactId
+ *
+ * @return a Map of artifacts, never {@code null}
+ * @see #getArtifacts()
+ */
+ public Map<String, Artifact> getArtifactMap()
+ {
+ if ( artifactMap == null )
+ {
+ artifactMap = ArtifactUtils.artifactMapByVersionlessId( getArtifacts() );
+ }
+
+ return artifactMap;
+ }
+
+ public boolean equals( Object object )
+ {
+ if ( this == object )
+ {
+ return true;
+ }
+
+ return object instanceof PluginDescriptor && getId().equals( ( (PluginDescriptor) object ).getId() );
+ }
+
+ public int hashCode()
+ {
+ return 10 + getId().hashCode();
+ }
+
+ public MojoDescriptor getMojo( String goal )
+ {
+ if ( getMojos() == null )
+ {
+ return null; // no mojo in this POM
+ }
+
+ // TODO: could we use a map? Maybe if the parent did that for components too, as this is too vulnerable to
+ // changes above not being propagated to the map
+ for ( MojoDescriptor desc : getMojos() )
+ {
+ if ( goal.equals( desc.getGoal() ) )
+ {
+ return desc;
+ }
+ }
+ return null;
+ }
+
+ public void setClassRealm( ClassRealm classRealm )
+ {
+ this.classRealm = classRealm;
+ }
+
+ public ClassRealm getClassRealm()
+ {
+ return classRealm;
+ }
+
+ public void setIntroducedDependencyArtifacts( Set<Artifact> introducedDependencyArtifacts )
+ {
+ this.introducedDependencyArtifacts = introducedDependencyArtifacts;
+ }
+
+ public Set<Artifact> getIntroducedDependencyArtifacts()
+ {
+ return ( introducedDependencyArtifacts != null ) ? introducedDependencyArtifacts
+ : Collections.<Artifact>emptySet();
+ }
+
+ public void setName( String name )
+ {
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setDescription( String description )
+ {
+ this.description = description;
+ }
+
+ public String getDescription()
+ {
+ return description;
+ }
+
+ public void setRequiredMavenVersion( String requiredMavenVersion )
+ {
+ this.requiredMavenVersion = requiredMavenVersion;
+ }
+
+ public String getRequiredMavenVersion()
+ {
+ return requiredMavenVersion;
+ }
+
+ public void setPlugin( Plugin plugin )
+ {
+ this.plugin = plugin;
+ }
+
+ public Plugin getPlugin()
+ {
+ return plugin;
+ }
+
+ public Artifact getPluginArtifact()
+ {
+ return pluginArtifact;
+ }
+
+ public void setPluginArtifact( Artifact pluginArtifact )
+ {
+ this.pluginArtifact = pluginArtifact;
+ }
+
+ public Lifecycle getLifecycleMapping( String lifecycleId )
+ throws IOException, XmlPullParserException
+ {
+ if ( lifecycleMappings == null )
+ {
+ LifecycleConfiguration lifecycleConfiguration;
+
+ Reader reader = null;
+ try
+ {
+ reader = ReaderFactory.newXmlReader( getDescriptorStream( LIFECYCLE_DESCRIPTOR ) );
+
+ lifecycleConfiguration = new LifecycleMappingsXpp3Reader().read( reader );
+ }
+ finally
+ {
+ IOUtil.close( reader );
+ }
+
+ lifecycleMappings = new HashMap<String, Lifecycle>();
+
+ for ( Lifecycle lifecycle : lifecycleConfiguration.getLifecycles() )
+ {
+ lifecycleMappings.put( lifecycle.getId(), lifecycle );
+ }
+ }
+
+ return lifecycleMappings.get( lifecycleId );
+ }
+
+ private InputStream getDescriptorStream( String descriptor )
+ throws IOException
+ {
+ File pluginFile = ( pluginArtifact != null ) ? pluginArtifact.getFile() : null;
+ if ( pluginFile == null )
+ {
+ throw new IllegalStateException( "plugin main artifact has not been resolved for " + getId() );
+ }
+
+ if ( pluginFile.isFile() )
+ {
+ try
+ {
+ return new URL( "jar:" + pluginFile.toURI() + "!/" + descriptor ).openStream();
+ }
+ catch ( MalformedURLException e )
+ {
+ throw new IllegalStateException( e );
+ }
+ }
+ else
+ {
+ return new FileInputStream( new File( pluginFile, descriptor ) );
+ }
+ }
+
+ /**
+ * Creates a shallow copy of this plugin descriptor.
+ */
+ @Override
+ public PluginDescriptor clone()
+ {
+ try
+ {
+ return (PluginDescriptor) super.clone();
+ }
+ catch ( CloneNotSupportedException e )
+ {
+ throw new UnsupportedOperationException( e );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java
new file mode 100644
index 00000000..66b16916
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java
@@ -0,0 +1,358 @@
+package org.apache.maven.plugin.descriptor;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.codehaus.plexus.component.repository.ComponentDependency;
+import org.codehaus.plexus.component.repository.ComponentRequirement;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.codehaus.plexus.configuration.PlexusConfigurationException;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * @author Jason van Zyl
+ */
+public class PluginDescriptorBuilder
+{
+ public PluginDescriptor build( Reader reader )
+ throws PlexusConfigurationException
+ {
+ return build( reader, null );
+ }
+
+ public PluginDescriptor build( Reader reader, String source )
+ throws PlexusConfigurationException
+ {
+ PlexusConfiguration c = buildConfiguration( reader );
+
+ PluginDescriptor pluginDescriptor = new PluginDescriptor();
+
+ pluginDescriptor.setSource( source );
+ pluginDescriptor.setGroupId( c.getChild( "groupId" ).getValue() );
+ pluginDescriptor.setArtifactId( c.getChild( "artifactId" ).getValue() );
+ pluginDescriptor.setVersion( c.getChild( "version" ).getValue() );
+ pluginDescriptor.setGoalPrefix( c.getChild( "goalPrefix" ).getValue() );
+
+ pluginDescriptor.setName( c.getChild( "name" ).getValue() );
+ pluginDescriptor.setDescription( c.getChild( "description" ).getValue() );
+
+ String isolatedRealm = c.getChild( "isolatedRealm" ).getValue();
+
+ if ( isolatedRealm != null )
+ {
+ pluginDescriptor.setIsolatedRealm( Boolean.parseBoolean( isolatedRealm ) );
+ }
+
+ String inheritedByDefault = c.getChild( "inheritedByDefault" ).getValue();
+
+ if ( inheritedByDefault != null )
+ {
+ pluginDescriptor.setInheritedByDefault( Boolean.parseBoolean( inheritedByDefault ) );
+ }
+
+ // ----------------------------------------------------------------------
+ // Components
+ // ----------------------------------------------------------------------
+
+ PlexusConfiguration[] mojoConfigurations = c.getChild( "mojos" ).getChildren( "mojo" );
+
+ for ( PlexusConfiguration component : mojoConfigurations )
+ {
+ MojoDescriptor mojoDescriptor = buildComponentDescriptor( component, pluginDescriptor );
+
+ pluginDescriptor.addMojo( mojoDescriptor );
+ }
+
+ // ----------------------------------------------------------------------
+ // Dependencies
+ // ----------------------------------------------------------------------
+
+ PlexusConfiguration[] dependencyConfigurations = c.getChild( "dependencies" ).getChildren( "dependency" );
+
+ List<ComponentDependency> dependencies = new ArrayList<ComponentDependency>();
+
+ for ( PlexusConfiguration d : dependencyConfigurations )
+ {
+ ComponentDependency cd = new ComponentDependency();
+
+ cd.setArtifactId( d.getChild( "artifactId" ).getValue() );
+
+ cd.setGroupId( d.getChild( "groupId" ).getValue() );
+
+ cd.setType( d.getChild( "type" ).getValue() );
+
+ cd.setVersion( d.getChild( "version" ).getValue() );
+
+ dependencies.add( cd );
+ }
+
+ pluginDescriptor.setDependencies( dependencies );
+
+ return pluginDescriptor;
+ }
+
+ public MojoDescriptor buildComponentDescriptor( PlexusConfiguration c, PluginDescriptor pluginDescriptor )
+ throws PlexusConfigurationException
+ {
+ MojoDescriptor mojo = new MojoDescriptor();
+ mojo.setPluginDescriptor( pluginDescriptor );
+
+ mojo.setGoal( c.getChild( "goal" ).getValue() );
+
+ mojo.setImplementation( c.getChild( "implementation" ).getValue() );
+
+ PlexusConfiguration langConfig = c.getChild( "language" );
+
+ if ( langConfig != null )
+ {
+ mojo.setLanguage( langConfig.getValue() );
+ }
+
+ PlexusConfiguration configuratorConfig = c.getChild( "configurator" );
+
+ if ( configuratorConfig != null )
+ {
+ mojo.setComponentConfigurator( configuratorConfig.getValue() );
+ }
+
+ PlexusConfiguration composerConfig = c.getChild( "composer" );
+
+ if ( composerConfig != null )
+ {
+ mojo.setComponentComposer( composerConfig.getValue() );
+ }
+
+ String since = c.getChild( "since" ).getValue();
+
+ if ( since != null )
+ {
+ mojo.setSince( since );
+ }
+
+ PlexusConfiguration deprecated = c.getChild( "deprecated", false );
+
+ if ( deprecated != null )
+ {
+ mojo.setDeprecated( deprecated.getValue() );
+ }
+
+ String phase = c.getChild( "phase" ).getValue();
+
+ if ( phase != null )
+ {
+ mojo.setPhase( phase );
+ }
+
+ String executePhase = c.getChild( "executePhase" ).getValue();
+
+ if ( executePhase != null )
+ {
+ mojo.setExecutePhase( executePhase );
+ }
+
+ String executeMojo = c.getChild( "executeGoal" ).getValue();
+
+ if ( executeMojo != null )
+ {
+ mojo.setExecuteGoal( executeMojo );
+ }
+
+ String executeLifecycle = c.getChild( "executeLifecycle" ).getValue();
+
+ if ( executeLifecycle != null )
+ {
+ mojo.setExecuteLifecycle( executeLifecycle );
+ }
+
+ mojo.setInstantiationStrategy( c.getChild( "instantiationStrategy" ).getValue() );
+
+ mojo.setDescription( c.getChild( "description" ).getValue() );
+
+ PlexusConfiguration dependencyResolution = c.getChild( "requiresDependencyResolution", false );
+
+ if ( dependencyResolution != null )
+ {
+ mojo.setDependencyResolutionRequired( dependencyResolution.getValue() );
+ }
+
+ PlexusConfiguration dependencyCollection = c.getChild( "requiresDependencyCollection", false );
+
+ if ( dependencyCollection != null )
+ {
+ mojo.setDependencyCollectionRequired( dependencyCollection.getValue() );
+ }
+
+ String directInvocationOnly = c.getChild( "requiresDirectInvocation" ).getValue();
+
+ if ( directInvocationOnly != null )
+ {
+ mojo.setDirectInvocationOnly( Boolean.parseBoolean( directInvocationOnly ) );
+ }
+
+ String requiresProject = c.getChild( "requiresProject" ).getValue();
+
+ if ( requiresProject != null )
+ {
+ mojo.setProjectRequired( Boolean.parseBoolean( requiresProject ) );
+ }
+
+ String requiresReports = c.getChild( "requiresReports" ).getValue();
+
+ if ( requiresReports != null )
+ {
+ mojo.setRequiresReports( Boolean.parseBoolean( requiresReports ) );
+ }
+
+ String aggregator = c.getChild( "aggregator" ).getValue();
+
+ if ( aggregator != null )
+ {
+ mojo.setAggregator( Boolean.parseBoolean( aggregator ) );
+ }
+
+ String requiresOnline = c.getChild( "requiresOnline" ).getValue();
+
+ if ( requiresOnline != null )
+ {
+ mojo.setOnlineRequired( Boolean.parseBoolean( requiresOnline ) );
+ }
+
+ String inheritedByDefault = c.getChild( "inheritedByDefault" ).getValue();
+
+ if ( inheritedByDefault != null )
+ {
+ mojo.setInheritedByDefault( Boolean.parseBoolean( inheritedByDefault ) );
+ }
+
+ String threadSafe = c.getChild( "threadSafe" ).getValue();
+
+ if ( threadSafe != null )
+ {
+ mojo.setThreadSafe( Boolean.parseBoolean( threadSafe ) );
+ }
+
+ // ----------------------------------------------------------------------
+ // Configuration
+ // ----------------------------------------------------------------------
+
+ PlexusConfiguration mojoConfig = c.getChild( "configuration" );
+ mojo.setMojoConfiguration( mojoConfig );
+
+ // ----------------------------------------------------------------------
+ // Parameters
+ // ----------------------------------------------------------------------
+
+ PlexusConfiguration[] parameterConfigurations = c.getChild( "parameters" ).getChildren( "parameter" );
+
+ List<Parameter> parameters = new ArrayList<Parameter>();
+
+ for ( PlexusConfiguration d : parameterConfigurations )
+ {
+ Parameter parameter = new Parameter();
+
+ parameter.setName( d.getChild( "name" ).getValue() );
+
+ parameter.setAlias( d.getChild( "alias" ).getValue() );
+
+ parameter.setType( d.getChild( "type" ).getValue() );
+
+ String required = d.getChild( "required" ).getValue();
+
+ parameter.setRequired( Boolean.parseBoolean( required ) );
+
+ PlexusConfiguration editableConfig = d.getChild( "editable" );
+
+ // we need the null check for pre-build legacy plugins...
+ if ( editableConfig != null )
+ {
+ String editable = d.getChild( "editable" ).getValue();
+
+ parameter.setEditable( editable == null || Boolean.parseBoolean( editable ) );
+ }
+
+ parameter.setDescription( d.getChild( "description" ).getValue() );
+
+ parameter.setDeprecated( d.getChild( "deprecated" ).getValue() );
+
+ parameter.setImplementation( d.getChild( "implementation" ).getValue() );
+
+ PlexusConfiguration paramConfig = mojoConfig.getChild( parameter.getName(), false );
+ if ( paramConfig != null )
+ {
+ parameter.setExpression( paramConfig.getValue( null ) );
+ parameter.setDefaultValue( paramConfig.getAttribute( "default-value" ) );
+ }
+
+ parameters.add( parameter );
+ }
+
+ mojo.setParameters( parameters );
+
+ // TODO: this should not need to be handed off...
+
+ // ----------------------------------------------------------------------
+ // Requirements
+ // ----------------------------------------------------------------------
+
+ PlexusConfiguration[] requirements = c.getChild( "requirements" ).getChildren( "requirement" );
+
+ for ( PlexusConfiguration requirement : requirements )
+ {
+ ComponentRequirement cr = new ComponentRequirement();
+
+ cr.setRole( requirement.getChild( "role" ).getValue() );
+
+ cr.setRoleHint( requirement.getChild( "role-hint" ).getValue() );
+
+ cr.setFieldName( requirement.getChild( "field-name" ).getValue() );
+
+ mojo.addRequirement( cr );
+ }
+
+ return mojo;
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public PlexusConfiguration buildConfiguration( Reader configuration )
+ throws PlexusConfigurationException
+ {
+ try
+ {
+ return new XmlPlexusConfiguration( Xpp3DomBuilder.build( configuration ) );
+ }
+ catch ( IOException e )
+ {
+ throw new PlexusConfigurationException( e.getMessage(), e );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new PlexusConfigurationException( e.getMessage(), e );
+ }
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/Requirement.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/Requirement.java
new file mode 100644
index 00000000..1526b039
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/Requirement.java
@@ -0,0 +1,72 @@
+package org.apache.maven.plugin.descriptor;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Describes a component requirement.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class Requirement
+ implements Cloneable
+{
+ private final String role;
+
+ private final String roleHint;
+
+ public Requirement( String role )
+ {
+ this.role = role;
+ this.roleHint = null;
+ }
+
+ public Requirement( String role, String roleHint )
+ {
+ this.role = role;
+ this.roleHint = roleHint;
+ }
+
+ public String getRole()
+ {
+ return role;
+ }
+
+ public String getRoleHint()
+ {
+ return roleHint;
+ }
+
+ /**
+ * Creates a shallow copy of this requirement.
+ */
+ @Override
+ public Requirement clone()
+ {
+ try
+ {
+ return (Requirement) super.clone();
+ }
+ catch ( CloneNotSupportedException e )
+ {
+ throw new UnsupportedOperationException( e );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/Log.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/Log.java
new file mode 100644
index 00000000..8d3bf1f9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/Log.java
@@ -0,0 +1,158 @@
+package org.apache.maven.plugin.logging;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This interface supplies the API for providing feedback to the user from the <code>Mojo</code>, using standard
+ * <code>Maven</code> channels.
+ * <br/>
+ * There should be no big surprises here, although you may notice that the methods accept
+ * <code>java.lang.CharSequence</code> rather than <code>java.lang.String</code>. This is provided mainly as a
+ * convenience, to enable developers to pass things like <code>java.lang.StringBuffer</code> directly into the logger,
+ * rather than formatting first by calling <code>toString()</code>.
+ *
+ * @author jdcasey
+ */
+public interface Log
+{
+ /**
+ * @return true if the <b>debug</b> error level is enabled
+ */
+ boolean isDebugEnabled();
+
+ /**
+ * Send a message to the user in the <b>debug</b> error level.
+ *
+ * @param content
+ */
+ void debug( CharSequence content );
+
+ /**
+ * Send a message (and accompanying exception) to the user in the <b>debug</b> error level.
+ * <br/>
+ * The error's stacktrace will be output when this error level is enabled.
+ *
+ * @param content
+ * @param error
+ */
+ void debug( CharSequence content, Throwable error );
+
+ /**
+ * Send an exception to the user in the <b>debug</b> error level.
+ * <br/>
+ * The stack trace for this exception will be output when this error level is enabled.
+ *
+ * @param error
+ */
+ void debug( Throwable error );
+
+ /**
+ * @return true if the <b>info</b> error level is enabled
+ */
+ boolean isInfoEnabled();
+
+ /**
+ * Send a message to the user in the <b>info</b> error level.
+ *
+ * @param content
+ */
+ void info( CharSequence content );
+
+ /**
+ * Send a message (and accompanying exception) to the user in the <b>info</b> error level.
+ * <br/>
+ * The error's stacktrace will be output when this error level is enabled.
+ *
+ * @param content
+ * @param error
+ */
+ void info( CharSequence content, Throwable error );
+
+ /**
+ * Send an exception to the user in the <b>info</b> error level.
+ * <br/>
+ * The stack trace for this exception will be output when this error level is enabled.
+ *
+ * @param error
+ */
+ void info( Throwable error );
+
+ /**
+ * @return true if the <b>warn</b> error level is enabled
+ */
+ boolean isWarnEnabled();
+
+ /**
+ * Send a message to the user in the <b>warn</b> error level.
+ *
+ * @param content
+ */
+ void warn( CharSequence content );
+
+ /**
+ * Send a message (and accompanying exception) to the user in the <b>warn</b> error level.
+ * <br/>
+ * The error's stacktrace will be output when this error level is enabled.
+ *
+ * @param content
+ * @param error
+ */
+ void warn( CharSequence content, Throwable error );
+
+ /**
+ * Send an exception to the user in the <b>warn</b> error level.
+ * <br/>
+ * The stack trace for this exception will be output when this error level is enabled.
+ *
+ * @param error
+ */
+ void warn( Throwable error );
+
+ /**
+ * @return true if the <b>error</b> error level is enabled
+ */
+ boolean isErrorEnabled();
+
+ /**
+ * Send a message to the user in the <b>error</b> error level.
+ *
+ * @param content
+ */
+ void error( CharSequence content );
+
+ /**
+ * Send a message (and accompanying exception) to the user in the <b>error</b> error level.
+ * <br/>
+ * The error's stacktrace will be output when this error level is enabled.
+ *
+ * @param content
+ * @param error
+ */
+ void error( CharSequence content, Throwable error );
+
+ /**
+ * Send an exception to the user in the <b>error</b> error level.
+ * <br/>
+ * The stack trace for this exception will be output when this error level is enabled.
+ *
+ * @param error
+ */
+ void error( Throwable error );
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/SystemStreamLog.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/SystemStreamLog.java
new file mode 100644
index 00000000..90475bf5
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/SystemStreamLog.java
@@ -0,0 +1,196 @@
+package org.apache.maven.plugin.logging;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+/**
+ * Logger with "standard" output and error output stream.
+ *
+ * @author jdcasey
+ */
+public class SystemStreamLog
+ implements Log
+{
+ /**
+ * @see org.apache.maven.plugin.logging.Log#debug(java.lang.CharSequence)
+ */
+ public void debug( CharSequence content )
+ {
+ print( "debug", content );
+ }
+
+ /**
+ * @see org.apache.maven.plugin.logging.Log#debug(java.lang.CharSequence, java.lang.Throwable)
+ */
+ public void debug( CharSequence content, Throwable error )
+ {
+ print( "debug", content, error );
+ }
+
+ /**
+ * @see org.apache.maven.plugin.logging.Log#debug(java.lang.Throwable)
+ */
+ public void debug( Throwable error )
+ {
+ print( "debug", error );
+ }
+
+ /**
+ * @see org.apache.maven.plugin.logging.Log#info(java.lang.CharSequence)
+ */
+ public void info( CharSequence content )
+ {
+ print( "info", content );
+ }
+
+ /**
+ * @see org.apache.maven.plugin.logging.Log#info(java.lang.CharSequence, java.lang.Throwable)
+ */
+ public void info( CharSequence content, Throwable error )
+ {
+ print( "info", content, error );
+ }
+
+ /**
+ * @see org.apache.maven.plugin.logging.Log#info(java.lang.Throwable)
+ */
+ public void info( Throwable error )
+ {
+ print( "info", error );
+ }
+
+ /**
+ * @see org.apache.maven.plugin.logging.Log#warn(java.lang.CharSequence)
+ */
+ public void warn( CharSequence content )
+ {
+ print( "warn", content );
+ }
+
+ /**
+ * @see org.apache.maven.plugin.logging.Log#warn(java.lang.CharSequence, java.lang.Throwable)
+ */
+ public void warn( CharSequence content, Throwable error )
+ {
+ print( "warn", content, error );
+ }
+
+ /**
+ * @see org.apache.maven.plugin.logging.Log#warn(java.lang.Throwable)
+ */
+ public void warn( Throwable error )
+ {
+ print( "warn", error );
+ }
+
+ /**
+ * @see org.apache.maven.plugin.logging.Log#error(java.lang.CharSequence)
+ */
+ public void error( CharSequence content )
+ {
+ System.err.println( "[error] " + content.toString() );
+ }
+
+ /**
+ * @see org.apache.maven.plugin.logging.Log#error(java.lang.CharSequence, java.lang.Throwable)
+ */
+ public void error( CharSequence content, Throwable error )
+ {
+ StringWriter sWriter = new StringWriter();
+ PrintWriter pWriter = new PrintWriter( sWriter );
+
+ error.printStackTrace( pWriter );
+
+ System.err.println( "[error] " + content.toString() + "\n\n" + sWriter.toString() );
+ }
+
+ /**
+ * @see org.apache.maven.plugin.logging.Log#error(java.lang.Throwable)
+ */
+ public void error( Throwable error )
+ {
+ StringWriter sWriter = new StringWriter();
+ PrintWriter pWriter = new PrintWriter( sWriter );
+
+ error.printStackTrace( pWriter );
+
+ System.err.println( "[error] " + sWriter.toString() );
+ }
+
+ /**
+ * @see org.apache.maven.plugin.logging.Log#isDebugEnabled()
+ */
+ public boolean isDebugEnabled()
+ {
+ // TODO: Not sure how best to set these for this implementation...
+ return false;
+ }
+
+ /**
+ * @see org.apache.maven.plugin.logging.Log#isInfoEnabled()
+ */
+ public boolean isInfoEnabled()
+ {
+ return true;
+ }
+
+ /**
+ * @see org.apache.maven.plugin.logging.Log#isWarnEnabled()
+ */
+ public boolean isWarnEnabled()
+ {
+ return true;
+ }
+
+ /**
+ * @see org.apache.maven.plugin.logging.Log#isErrorEnabled()
+ */
+ public boolean isErrorEnabled()
+ {
+ return true;
+ }
+
+ private void print( String prefix, CharSequence content )
+ {
+ System.out.println( "[" + prefix + "] " + content.toString() );
+ }
+
+ private void print( String prefix, Throwable error )
+ {
+ StringWriter sWriter = new StringWriter();
+ PrintWriter pWriter = new PrintWriter( sWriter );
+
+ error.printStackTrace( pWriter );
+
+ System.out.println( "[" + prefix + "] " + sWriter.toString() );
+ }
+
+ private void print( String prefix, CharSequence content, Throwable error )
+ {
+ StringWriter sWriter = new StringWriter();
+ PrintWriter pWriter = new PrintWriter( sWriter );
+
+ error.printStackTrace( pWriter );
+
+ System.out.println( "[" + prefix + "] " + content.toString() + "\n\n" + sWriter.toString() );
+ }
+} \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/mdo/lifecycle.mdo b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/mdo/lifecycle.mdo
new file mode 100644
index 00000000..2335d15c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/mdo/lifecycle.mdo
@@ -0,0 +1,129 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<model xmlns="http://modello.codehaus.org/MODELLO/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.0.0 http://modello.codehaus.org/xsd/modello-1.0.0.xsd"
+ xml.namespace="http://maven.apache.org/LIFECYCLE/${version}"
+ xml.schemaLocation="http://maven.apache.org/xsd/lifecycle-${version}.xsd">
+ <id>lifecycle-mappings</id>
+ <name>LifecycleMappings</name>
+ <description><![CDATA[
+ Configuration of custom lifecycle mappings for the plugin, as generally stored in
+ <code>META-INF/maven/lifecycle.xml</code> in a plugin's jar artifact.
+ ]]></description>
+ <defaults>
+ <default>
+ <key>package</key>
+ <value>org.apache.maven.plugin.lifecycle</value>
+ </default>
+ </defaults>
+ <classes>
+ <class rootElement="true" xml.tagName="lifecycles" xsd.compositor="sequence">
+ <name>LifecycleConfiguration</name>
+ <version>1.0.0</version>
+ <description><![CDATA[Root element of the <code>lifecycle.xml</code> file.]]></description>
+ <fields>
+ <field>
+ <name>lifecycles</name>
+ <version>1.0.0</version>
+ <association xml.itemsStyle="flat">
+ <type>Lifecycle</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>Lifecycle</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ A custom lifecycle mapping definition.
+ ]]></description>
+ <fields>
+ <field>
+ <name>id</name>
+ <required>true</required>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The ID of this lifecycle, for identification in the mojo descriptor.</description>
+ </field>
+ <field>
+ <name>phases</name>
+ <version>1.0.0</version>
+ <description>The phase mappings for this lifecycle.</description>
+ <association>
+ <type>Phase</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>Phase</name>
+ <version>1.0.0</version>
+ <description>A phase mapping definition.</description>
+ <fields>
+ <field>
+ <name>id</name>
+ <required>true</required>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The ID of this phase, eg &lt;code&gt;generate-sources&lt;/code&gt;.</description>
+ </field>
+ <field>
+ <name>executions</name>
+ <version>1.0.0</version>
+ <description>The goals to execute within the phase.</description>
+ <association>
+ <type>Execution</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>configuration</name>
+ <version>1.0.0</version>
+ <type>DOM</type>
+ <description>Configuration to pass to all goals run in this phase.</description>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>Execution</name>
+ <version>1.0.0</version>
+ <description>A set of goals to execute.</description>
+ <fields>
+ <field>
+ <name>configuration</name>
+ <version>1.0.0</version>
+ <type>DOM</type>
+ <description>Configuration to pass to the goals.</description>
+ </field>
+ <field>
+ <name>goals</name>
+ <version>1.0.0</version>
+ <description>The goals to execute.</description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ </classes>
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/mdo/plugin.mdo b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/mdo/plugin.mdo
new file mode 100644
index 00000000..83bf3bf3
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/mdo/plugin.mdo
@@ -0,0 +1,525 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0 http://modello.codehaus.org/xsd/modello-1.4.0.xsd">
+ <id>plugin</id>
+ <name>PluginDescriptor</name>
+ <description><![CDATA[
+ Plugin descriptor, stored in <code>META-INF/maven/plugin.xml</code> in a plugin's jar artifact.
+ This descriptor is generally generated from plugin sources, using
+ <a href="/plugins/maven-plugin-plugin/">maven-plugin-plugin</a>.
+ <p><i>Notice:</i> this documentation is generated from a Modello model but the code executed is not generated
+ from this descriptor. Please report if you find anything wrong.</p>
+ ]]></description>
+ <defaults>
+ <default>
+ <key>package</key>
+ <value>plugin descriptor XML documentation (no java generation)</value><!-- intentionally non-buildable value -->
+ </default>
+ </defaults>
+ <classes>
+ <class rootElement="true" xml.tagName="plugin">
+ <name>PluginDescriptor</name>
+ <version>1.0.0</version>
+ <description><![CDATA[Root element of the <code>plugin.xml</code> file.]]></description>
+ <!-- see o.a.m.plugin.descriptor.PluginDescriptor -->
+ <fields>
+ <field>
+ <name>name</name>
+ <version>1.0.0</version>
+ <description>Name of the plugin.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>description</name>
+ <version>1.0.0</version>
+ <description>Description of the plugin.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>groupId</name>
+ <version>1.0.0</version>
+ <description>The group id of the plugin.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>1.0.0</version>
+ <description>The artifact id of the plugin.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>version</name>
+ <version>1.0.0</version>
+ <description>The version of the plugin.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>goalPrefix</name>
+ <version>1.0.0</version>
+ <description></description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>isolatedRealm</name>
+ <version>1.0.0</version>
+ <description></description>
+ <type>boolean</type>
+ <defaultValue>false</defaultValue>
+ </field>
+ <field>
+ <name>inheritedByDefault</name>
+ <version>1.0.0</version>
+ <description></description>
+ <type>boolean</type>
+ <defaultValue>true</defaultValue>
+ </field>
+ <field xdoc.separator="blank">
+ <name>mojos</name>
+ <version>1.0.0</version>
+ <association>
+ <type>MojoDescriptor</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ <description>Description of each Mojo provided by the plugin.</description>
+ </field>
+ <field xdoc.separator="blank">
+ <name>dependencies</name>
+ <version>1.0.0</version>
+ <association>
+ <type>Dependency</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ <description>
+ A set of dependencies which the plugin requires in order to function. This enables the plugin to function
+ independently of its POM (or at least to declare the libraries it needs to run).
+ </description>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>MojoDescriptor</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ A Mojo description.
+ ]]></description>
+ <!-- see o.a.m.plugin.descriptor.MojoDescriptor -->
+ <fields>
+ <field>
+ <name>goal</name>
+ <required>true</required>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>
+ The goal name for the Mojo, that users will reference from the command line to execute the Mojo directly,
+ or inside a POM in order to provide Mojo-specific configuration.
+ </description>
+ </field>
+ <field>
+ <name>description</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The description of this Mojo's functionality.</description>
+ </field>
+ <field>
+ <name>implementation</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>
+ The Mojo's fully-qualified class name (or script path in the case of non-Java Mojos).
+ </description>
+ </field>
+ <field>
+ <name>language</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <defaultValue>java</defaultValue>
+ <description>The implementation language for this Mojo (java, beanshell, etc.).</description>
+ </field>
+ <field>
+ <name>phase</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description><![CDATA[
+ Defines a default phase to bind a mojo execution to if the user does not explicitly set a phase in the POM.
+ <i>Note:</i> This will not automagically make a mojo run when the plugin declaration is added
+ to the POM. It merely enables the user to omit the <code>&lt;phase&gt;</code> element from the
+ surrounding <code>&lt;execution&gt;</code> element.
+ ]]></description>
+ </field>
+ <field>
+ <name>executePhase</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>Reference the invocation phase of the Mojo.</description>
+ </field>
+ <field>
+ <name>executeGoal</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>Reference the invocation goal of the Mojo.</description>
+ </field>
+ <field>
+ <name>executeLifecycle</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description></description>
+ </field>
+ <field>
+ <name>requiresDependencyResolution</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <defaultValue>runtime</defaultValue>
+ <description><![CDATA[
+ Flags this Mojo as requiring the dependencies in the specified class path to be resolved before it can
+ execute: <code>compile</code>, <code>runtime</code>, <code>test</code>,
+ <code>compile+runtime</code> (since Maven 3.0) or <code>runtime+system</code> (since Maven 3.0)
+ ]]></description>
+ </field>
+ <field>
+ <name>requiresDependencyCollection</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description><![CDATA[
+ Flags this mojo as requiring information about the dependencies that would make up the specified class
+ path. As the name suggests, this is similar to requiresDependencyResolution and supports the same values.
+ The important difference is this will not resolve the files for the dependencies, i.e. the artifacts
+ associated with a Maven project can lack a file. As such, this annotation is meant for mojos that only
+ want to analyze the set of transitive dependencies, in particular during early lifecycle phases where
+ full dependency resolution might fail due to projects which haven't been built yet.
+ ]]></description>
+ </field>
+ <field>
+ <name>requiresDirectInvocation</name>
+ <version>1.0.0</version>
+ <type>boolean</type>
+ <description>Flags this Mojo to be invoked directly only.</description>
+ <defaultValue>false</defaultValue>
+ </field>
+ <field>
+ <name>requiresProject</name>
+ <version>1.0.0</version>
+ <type>boolean</type>
+ <description>Flags this Mojo to require running inside of a project.</description>
+ <defaultValue>true</defaultValue>
+ </field>
+ <field>
+ <name>requiresReports</name>
+ <version>1.0.0</version>
+ <type>boolean</type>
+ <description>Flags this Mojo to require running inside of a reports context. Unsupported since Maven 3.0.</description>
+ <defaultValue>false</defaultValue>
+ </field>
+ <field>
+ <name>requiresOnline</name>
+ <version>1.0.0</version>
+ <type>boolean</type>
+ <description>Flags this Mojo to require online mode for its operation.</description>
+ <defaultValue>false</defaultValue>
+ </field>
+ <field>
+ <name>aggregator</name>
+ <version>1.0.0</version>
+ <type>boolean</type>
+ <description>
+ Flags this Mojo to run it in a multi module way, i.e. aggregate the build with the set of projects
+ listed as modules.
+ </description>
+ <defaultValue>false</defaultValue>
+ </field>
+ <field>
+ <name>inheritedByDefault</name>
+ <version>1.0.0</version>
+ <type>boolean</type>
+ <description>Specify that the Mojo is inherited.</description>
+ <defaultValue>true</defaultValue>
+ </field>
+ <field>
+ <name>threadSafe</name>
+ <version>1.0.0</version>
+ <type>boolean</type>
+ <description>
+ Marks this mojo as being thread-safe, i.e. the mojo safely supports concurrent execution during parallel
+ builds. Mojos without this annotation will make Maven output a warning when used during a parallel build
+ session. Since Maven 3.0.
+ </description>
+ <defaultValue>false</defaultValue>
+ </field>
+ <field>
+ <name>instantiationStrategy</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <defaultValue>per-lookup</defaultValue>
+ <description>Specify the instantiation strategy.</description>
+ </field>
+ <field>
+ <name>executionStrategy</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description><![CDATA[
+ Specify the execution strategy: <code>once-per-session</code>, <code>always</code>.
+ ]]></description>
+ <defaultValue>once-per-session</defaultValue>
+ </field>
+ <field>
+ <name>since</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>Specify the version when the Mojo was added to the API. Similar to Javadoc since.</description>
+ </field>
+ <field>
+ <name>deprecated</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>
+ Specify the version when the Mojo was deprecated to the API. Similar to Javadoc deprecated. This will
+ trigger a warning when a user tries to configure a parameter marked as deprecated.
+ </description>
+ </field>
+ <field>
+ <name>configurator</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>
+ The configurator type to use when injecting parameter values into this Mojo. The value is normally deduced
+ from the Mojo's implementation language, but can be specified to allow a custom ComponentConfigurator
+ implementation to be used.
+ </description>
+ </field>
+ <field>
+ <name>composer</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description></description>
+ </field>
+ <field xdoc.separator="blank">
+ <name>parameters</name>
+ <version>1.0.0</version>
+ <description></description>
+ <association>
+ <type>Parameter</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>configuration</name>
+ <version>1.0.0</version>
+ <description></description>
+ <association xml.tagName="paramName">
+ <type>Configuration</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>requirements</name>
+ <version>1.0.0</version>
+ <description></description>
+ <association>
+ <type>Requirement</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>Parameter</name>
+ <version>1.0.0</version>
+ <description>A phase mapping definition.</description>
+ <!-- see o.a.m.plugin.descriptor.Parameter -->
+ <fields>
+ <field>
+ <name>name</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <required>true</required>
+ <description>
+ The name of the parameter, to be used while configuring this parameter from the Mojo's declared defaults
+ or from the POM.
+ </description>
+ </field>
+ <field>
+ <name>alias</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>
+ Specifies an alias which can be used to configure this parameter from the POM.
+ This is primarily useful to improve user-friendliness, where Mojo field names are not intuitive to the
+ user or are otherwise not conducive to configuration via the POM.
+ </description>
+ </field>
+ <field>
+ <name>type</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <required>true</required>
+ <description>
+ The Java type for this parameter. This is used to validate the result of any expressions used to calculate
+ the value which should be injected into the Mojo for this parameter.
+ </description>
+ </field>
+ <field>
+ <name>required</name>
+ <version>1.0.0</version>
+ <type>boolean</type>
+ <description>
+ Whether this parameter is required for the Mojo to function. This is used to validate the configuration
+ for a Mojo before it is injected, and before the Mojo is executed from some half-state.
+ </description>
+ </field>
+ <field>
+ <name>editable</name>
+ <version>1.0.0</version>
+ <type>boolean</type>
+ <defaultValue>true</defaultValue>
+ <description><![CDATA[
+ Specifies that this parameter can be configured directly by the user (as in the case of POM-specified
+ configuration). This is useful when you want to force the user to use common POM elements rather than
+ plugin configurations, as in the case where you want to use the artifact's final name as a parameter. In
+ this case, you want the user to modify <code>&lt;build&gt;&lt;finalName/&gt;&lt;/build&gt;</code> rather
+ than specifying a value for finalName directly in the plugin configuration section. It is also useful to
+ ensure that - for example - a List-typed parameter which expects items of type Artifact doesn't get a List
+ full of Strings.
+ ]]></description>
+ </field>
+ <field>
+ <name>implementation</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description></description>
+ </field>
+ <field>
+ <name>description</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The description of this parameter's use inside the Mojo.</description>
+ </field>
+ <field>
+ <name>since</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>Specify the version when the parameter was added to the API. Similar to Javadoc since.</description>
+ </field>
+ <field>
+ <name>deprecated</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>
+ Specify the version when the parameter was deprecated to the API. Similar to Javadoc deprecated.
+ This will trigger a warning when a user tries to configure a parameter marked as deprecated.
+ </description>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>Configuration</name>
+ <version>1.0.0</version>
+ <description>A parameter configuration.</description>
+ <!-- see o.a.m.plugin.descriptor.Parameter -->
+ <fields>
+ <field xml.content="true">
+ <name>expression</name>
+ <required>true</required>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>Parameter expression, to let user override default value with a system property, pom property or settings property.</description>
+ </field>
+ <field xml.attribute="true" xml.tagName="implementation">
+ <name>implementation</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description></description>
+ </field>
+ <field xml.attribute="true" xml.tagName="default-value">
+ <name>defaultValue</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The default value, as an expression that will be evaluated at injection or run-time.</description>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>Requirement</name>
+ <version>1.0.0</version>
+ <description>Describes a component requirement.</description>
+ <!-- see o.a.m.plugin.descriptor.Requirement -->
+ <fields>
+ <field>
+ <name>role</name>
+ <required>true</required>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description></description>
+ </field>
+ <field xml.tagName="role-hint">
+ <name>roleHint</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description></description>
+ </field>
+ <field xml.tagName="field-name">
+ <name>fieldName</name>
+ <required>true</required>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The field name which has this requirement.</description>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>Dependency</name>
+ <version>1.0.0</version>
+ <description>Definition of a dependency, needed by the plugin at runtime.</description>
+ <fields>
+ <field>
+ <name>groupId</name>
+ <required>true</required>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The group id of the dependency.</description>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <required>true</required>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The artifact id of the dependency.</description>
+ </field>
+ <field>
+ <name>version</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The version of the dependency.</description>
+ </field>
+ <field>
+ <name>type</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <defaultValue>jar</defaultValue>
+ <description>The type of dependency.</description>
+ </field>
+ </fields>
+ </class>
+ </classes>
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/site/apt/index.apt b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/site/apt/index.apt
new file mode 100644
index 00000000..6eb59556
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/site/apt/index.apt
@@ -0,0 +1,39 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ Introduction
+ -----
+ Hervé Boutemy
+ -----
+ 2012-06-02
+ -----
+
+Maven Plugin API
+
+ The API for plugins - composed of goals implemented by Mojos - development.
+
+ A plugin is described in a {{{./plugin.html}<<<META-INF/maven/plugin.xml>>> plugin descriptor}},
+ generally generated from plugin sources using {{{/plugin-tools/maven-plugin-plugin/}maven-plugin-plugin}}.
+
+* See Also
+
+ * {{{/developers/mojo-api-specification.html}Mojo API Specification}}
+
+ * {{{/plugin-tools/}plugin-tools}}
+
+ * {{{/plugin-testing/}plugin-testing}}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/site/site.xml b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/site/site.xml
new file mode 100644
index 00000000..9594af1b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/site/site.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
+ <body>
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ <item name="JavaDocs" href="apidocs/index.html"/>
+ <item name="Source Xref" href="xref/index.html"/>
+ <!--item name="FAQ" href="faq.html"/-->
+ </menu>
+ <menu name="Reference">
+ <item name="lifecycle.xml" href="lifecycle-mappings.html"/>
+ <item name="plugin.xml" href="plugin.html"/>
+ </menu>
+
+ <menu ref="parent"/>
+ <menu ref="reports"/>
+ </body>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilderTest.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilderTest.java
new file mode 100644
index 00000000..799e3af0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilderTest.java
@@ -0,0 +1,133 @@
+package org.apache.maven.plugin.descriptor;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.Reader;
+
+import org.codehaus.plexus.component.repository.ComponentDependency;
+import org.codehaus.plexus.component.repository.ComponentRequirement;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.codehaus.plexus.configuration.PlexusConfigurationException;
+import org.codehaus.plexus.util.ReaderFactory;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@link PluginDescriptorBuilder}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class PluginDescriptorBuilderTest
+ extends TestCase
+{
+
+ private PluginDescriptor build( String resource )
+ throws IOException, PlexusConfigurationException
+ {
+ Reader reader = ReaderFactory.newXmlReader( getClass().getResourceAsStream( resource ) );
+
+ return new PluginDescriptorBuilder().build( reader );
+ }
+
+ public void testBuildReader()
+ throws Exception
+ {
+ PluginDescriptor pd = build( "/plugin.xml" );
+
+ assertEquals( "org.apache.maven.plugins", pd.getGroupId() );
+ assertEquals( "maven-jar-plugin", pd.getArtifactId() );
+ assertEquals( "2.3-SNAPSHOT", pd.getVersion() );
+ assertEquals( "jar", pd.getGoalPrefix() );
+ assertEquals( "plugin-description", pd.getDescription() );
+ assertEquals( false, pd.isIsolatedRealm() );
+ assertEquals( true, pd.isInheritedByDefault() );
+ assertEquals( 2, pd.getMojos().size() );
+ assertEquals( 1, pd.getDependencies().size() );
+
+ MojoDescriptor md = pd.getMojos().get( 0 );
+
+ assertEquals( "jar", md.getGoal() );
+ assertEquals( "mojo-description", md.getDescription() );
+ assertEquals( "runtime", md.getDependencyResolutionRequired() );
+ assertEquals( "test", md.getDependencyCollectionRequired() );
+ assertEquals( false, md.isAggregator() );
+ assertEquals( false, md.isDirectInvocationOnly() );
+ assertEquals( true, md.isInheritedByDefault() );
+ assertEquals( false, md.isOnlineRequired() );
+ assertEquals( true, md.isProjectRequired() );
+ assertEquals( false, md.isThreadSafe() );
+ assertEquals( "package", md.getPhase() );
+ assertEquals( "org.apache.maven.plugin.jar.JarMojo", md.getImplementation() );
+ assertEquals( "antrun", md.getComponentConfigurator() );
+ assertEquals( "java", md.getLanguage() );
+ assertEquals( "per-lookup", md.getInstantiationStrategy() );
+ assertEquals( "some-goal", md.getExecuteGoal() );
+ assertEquals( "generate-sources", md.getExecutePhase() );
+ assertEquals( "cobertura", md.getExecuteLifecycle() );
+ assertEquals( "2.2", md.getSince() );
+ assertEquals( "deprecated-mojo", md.getDeprecated() );
+ assertEquals( 1, md.getRequirements().size() );
+ assertEquals( 1, md.getParameters().size() );
+
+ assertNotNull( md.getMojoConfiguration() );
+ assertEquals( 1, md.getMojoConfiguration().getChildCount() );
+
+ PlexusConfiguration pc = md.getMojoConfiguration().getChild( 0 );
+
+ assertEquals( "${jar.finalName}", pc.getValue() );
+ assertEquals( "${project.build.finalName}", pc.getAttribute( "default-value" ) );
+ assertEquals( "java.lang.String", pc.getAttribute( "implementation" ) );
+
+ Parameter mp = md.getParameters().get( 0 );
+
+ assertEquals( "finalName", mp.getName() );
+ assertEquals( "jarName", mp.getAlias() );
+ assertEquals( "java.lang.String", mp.getType() );
+ assertEquals( "java.lang.String", mp.getImplementation() );
+ assertEquals( true, mp.isEditable() );
+ assertEquals( false, mp.isRequired() );
+ assertEquals( "parameter-description", mp.getDescription() );
+ assertEquals( "deprecated-parameter", mp.getDeprecated() );
+ assertEquals( "${jar.finalName}", mp.getExpression() );
+ assertEquals( "${project.build.finalName}", mp.getDefaultValue() );
+
+ ComponentRequirement cr = md.getRequirements().get( 0 );
+
+ assertEquals( "org.codehaus.plexus.archiver.Archiver", cr.getRole() );
+ assertEquals( "jar", cr.getRoleHint() );
+ assertEquals( "jarArchiver", cr.getFieldName() );
+
+ ComponentDependency cd = pd.getDependencies().get( 0 );
+
+ assertEquals( "org.apache.maven", cd.getGroupId() );
+ assertEquals( "maven-plugin-api", cd.getArtifactId() );
+ assertEquals( "2.0.6", cd.getVersion() );
+ assertEquals( "jar", cd.getType() );
+
+ md = pd.getMojos().get( 1 );
+
+ assertEquals( "war", md.getGoal() );
+ assertEquals( null, md.getDependencyResolutionRequired() );
+ assertEquals( null, md.getDependencyCollectionRequired() );
+ assertEquals( true, md.isThreadSafe() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/java/org/apache/maven/plugin/lifecycle/LifecycleXpp3ReaderTest.java b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/java/org/apache/maven/plugin/lifecycle/LifecycleXpp3ReaderTest.java
new file mode 100644
index 00000000..18c02ecc
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/java/org/apache/maven/plugin/lifecycle/LifecycleXpp3ReaderTest.java
@@ -0,0 +1,55 @@
+package org.apache.maven.plugin.lifecycle;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+
+import junit.framework.TestCase;
+
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * Test the lifecycle reader.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class LifecycleXpp3ReaderTest
+ extends TestCase
+{
+ public void testLifecycleReader()
+ throws IOException, XmlPullParserException
+ {/*
+ LifecycleMappingsXpp3Reader reader = new LifecycleMappingsXpp3Reader();
+ LifecycleConfiguration config = reader.read( new InputStreamReader( getClass().getResourceAsStream( "/lifecycle.xml" ) ) );
+ assertEquals( "check number of lifecycles", 1, config.getLifecycles().size() );
+ Lifecycle l = (Lifecycle) config.getLifecycles().iterator().next();
+ assertEquals( "check id", "clover", l.getId() );
+ assertEquals( "check number of phases", 1, l.getPhases().size() );
+ Phase p = (Phase) l.getPhases().iterator().next();
+ assertEquals( "check id", "generate-sources", p.getId() );
+ assertEquals( "check number of executions", 1, p.getExecutions().size() );
+ Execution e = (Execution) p.getExecutions().iterator().next();
+ assertEquals( "check configuration", "true", ((Xpp3Dom) e.getConfiguration()).getChild( "debug" ).getValue() );
+ assertEquals( "check number of goals", 1, e.getGoals().size() );
+ String g = (String) e.getGoals().iterator().next();
+ assertEquals( "check goal", "clover:compiler", g );
+ */
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/resources/lifecycle.xml b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/resources/lifecycle.xml
new file mode 100644
index 00000000..ebec5892
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/resources/lifecycle.xml
@@ -0,0 +1,39 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<lifecycles>
+ <lifecycle>
+ <id>clover</id>
+ <phases>
+ <phase>
+ <id>generate-sources</id>
+ <executions>
+ <execution>
+ <configuration>
+ <debug>true</debug>
+ </configuration>
+ <goals>
+ <goal>clover:compiler</goal>
+ </goals>
+ </execution>
+ </executions>
+ </phase>
+ </phases>
+ </lifecycle>
+</lifecycles>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/resources/plugin.xml b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/resources/plugin.xml
new file mode 100644
index 00000000..6b972113
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/resources/plugin.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<plugin>
+ <description>plugin-description</description>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.3-SNAPSHOT</version>
+ <goalPrefix>jar</goalPrefix>
+ <isolatedRealm>false</isolatedRealm>
+ <inheritedByDefault>true</inheritedByDefault>
+ <mojos>
+ <mojo>
+ <goal>jar</goal>
+ <description>mojo-description</description>
+ <requiresDependencyResolution>runtime</requiresDependencyResolution>
+ <requiresDependencyCollection>test</requiresDependencyCollection>
+ <requiresDirectInvocation>false</requiresDirectInvocation>
+ <requiresProject>true</requiresProject>
+ <requiresReports>false</requiresReports>
+ <aggregator>false</aggregator>
+ <requiresOnline>false</requiresOnline>
+ <inheritedByDefault>true</inheritedByDefault>
+ <phase>package</phase>
+ <implementation>org.apache.maven.plugin.jar.JarMojo</implementation>
+ <language>java</language>
+ <instantiationStrategy>per-lookup</instantiationStrategy>
+ <executionStrategy>once-per-session</executionStrategy>
+ <deprecated>deprecated-mojo</deprecated>
+ <since>2.2</since>
+ <executePhase>generate-sources</executePhase>
+ <executeGoal>some-goal</executeGoal>
+ <executeLifecycle>cobertura</executeLifecycle>
+ <configurator>antrun</configurator>
+ <parameters>
+ <parameter>
+ <name>finalName</name>
+ <alias>jarName</alias>
+ <type>java.lang.String</type>
+ <implementation>java.lang.String</implementation>
+ <required>false</required>
+ <editable>true</editable>
+ <description>parameter-description</description>
+ <deprecated>deprecated-parameter</deprecated>
+ </parameter>
+ </parameters>
+ <configuration>
+ <finalName implementation="java.lang.String" default-value="${project.build.finalName}">${jar.finalName}</finalName>
+ </configuration>
+ <requirements>
+ <requirement>
+ <role>org.codehaus.plexus.archiver.Archiver</role>
+ <role-hint>jar</role-hint>
+ <field-name>jarArchiver</field-name>
+ </requirement>
+ </requirements>
+ </mojo>
+ <mojo>
+ <goal>war</goal>
+ <threadSafe>true</threadSafe>
+ </mojo>
+ </mojos>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <type>jar</type>
+ <version>2.0.6</version>
+ </dependency>
+ </dependencies>
+</plugin>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/pom.xml
new file mode 100644
index 00000000..e9181539
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/pom.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.3.3</version>
+ </parent>
+
+ <artifactId>maven-repository-metadata</artifactId>
+
+ <name>Maven Repository Metadata Model</name>
+ <description>Per-directory local and remote repository metadata.</description>
+
+ <scm><!-- remove when git scm url format can accept artifact-id at the end, as automatically inherited -->
+ <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
+ <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
+ <tag>maven-3.3.3</tag>
+ </scm>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <configuration>
+ <version>1.1.0</version>
+ <models>
+ <model>src/main/mdo/metadata.mdo</model>
+ </models>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/src/main/mdo/metadata.mdo b/framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/src/main/mdo/metadata.mdo
new file mode 100644
index 00000000..97920027
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/src/main/mdo/metadata.mdo
@@ -0,0 +1,371 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0 http://modello.codehaus.org/xsd/modello-1.4.0.xsd"
+ xsd.namespace="http://maven.apache.org/METADATA/${version}"
+ xml.schemaLocation="http://maven.apache.org/xsd/metadata-${version}.xsd">
+ <id>repository-metadata</id>
+ <name>Metadata</name>
+ <description><![CDATA[
+ <p>Per-directory repository metadata, for directories representing un-versioned artifact, snapshot artifact
+ or a group containing Maven plugins.</p>
+ <p>Notice that most metadata content has a meaning when the directory represents
+ an artifact (<code>groupId</code>, <code>artifactId</code>, <code>versioning</code>), but
+ <code>plugins</code> is used when the directory represents a group.</p>]]>
+ </description>
+ <defaults>
+ <default>
+ <key>package</key>
+ <value>org.apache.maven.artifact.repository.metadata</value>
+ </default>
+ </defaults>
+ <classes>
+ <class rootElement="true" java.clone="deep">
+ <name>Metadata</name>
+ <version>1.0.0+</version>
+ <fields>
+ <field xml.attribute="true">
+ <name>modelVersion</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ <description>The version of the underlying metadata model.</description>
+ </field>
+ <field>
+ <name>groupId</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>The groupId that this directory represents, if any.</description>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>The artifactId that this directory represents, if any.</description>
+ </field>
+ <field>
+ <name>version</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>The version that this directory represents, if any. It is used for artifact snapshots only.</description>
+ </field>
+ <field>
+ <name>versioning</name>
+ <version>1.0.0+</version>
+ <association>
+ <type>Versioning</type>
+ </association>
+ <description>Versioning information for the artifact.</description>
+ </field>
+ <field xdoc.separator="blank">
+ <name>plugins</name>
+ <version>1.0.0+</version>
+ <description>The set of plugin mappings for the group represented by this directory</description>
+ <association>
+ <type>Plugin</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0+</version>
+ <code><![CDATA[
+ public boolean merge( Metadata sourceMetadata )
+ {
+ boolean changed = false;
+
+ for ( Plugin plugin : sourceMetadata.getPlugins() )
+ {
+ boolean found = false;
+
+ for ( Plugin preExisting : getPlugins() )
+ {
+ if ( preExisting.getPrefix().equals( plugin.getPrefix() ) )
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if ( !found )
+ {
+ Plugin mappedPlugin = new Plugin();
+
+ mappedPlugin.setArtifactId( plugin.getArtifactId() );
+
+ mappedPlugin.setPrefix( plugin.getPrefix() );
+
+ mappedPlugin.setName( plugin.getName() );
+
+ addPlugin( mappedPlugin );
+
+ changed = true;
+ }
+ }
+
+ Versioning versioning = sourceMetadata.getVersioning();
+ if ( versioning != null )
+ {
+ Versioning v = getVersioning();
+ if ( v == null )
+ {
+ v = new Versioning();
+ setVersioning( v );
+ changed = true;
+ }
+
+ for ( String version : versioning.getVersions() )
+ {
+ if ( !v.getVersions().contains( version ) )
+ {
+ changed = true;
+ v.getVersions().add( version );
+ }
+ }
+
+ if ( "null".equals( versioning.getLastUpdated() ) )
+ {
+ versioning.setLastUpdated( null );
+ }
+
+ if ( "null".equals( v.getLastUpdated() ) )
+ {
+ v.setLastUpdated( null );
+ }
+
+ if ( versioning.getLastUpdated() == null || versioning.getLastUpdated().length() == 0 )
+ {
+ // this should only be for historical reasons - we assume local is newer
+ versioning.setLastUpdated( v.getLastUpdated() );
+ }
+
+ if ( v.getLastUpdated() == null || v.getLastUpdated().length() == 0
+ || versioning.getLastUpdated().compareTo( v.getLastUpdated() ) >= 0 )
+ {
+ changed = true;
+ v.setLastUpdated( versioning.getLastUpdated() );
+
+ if ( versioning.getRelease() != null )
+ {
+ changed = true;
+ v.setRelease( versioning.getRelease() );
+ }
+ if ( versioning.getLatest() != null )
+ {
+ changed = true;
+ v.setLatest( versioning.getLatest() );
+ }
+
+ Snapshot s = v.getSnapshot();
+ Snapshot snapshot = versioning.getSnapshot();
+ if ( snapshot != null )
+ {
+ if ( s == null )
+ {
+ s = new Snapshot();
+ v.setSnapshot( s );
+ changed = true;
+ }
+
+ // overwrite
+ if ( s.getTimestamp() == null ? snapshot.getTimestamp() != null
+ : !s.getTimestamp().equals( snapshot.getTimestamp() ) )
+ {
+ s.setTimestamp( snapshot.getTimestamp() );
+ changed = true;
+ }
+ if ( s.getBuildNumber() != snapshot.getBuildNumber() )
+ {
+ s.setBuildNumber( snapshot.getBuildNumber() );
+ changed = true;
+ }
+ if ( s.isLocalCopy() != snapshot.isLocalCopy() )
+ {
+ s.setLocalCopy( snapshot.isLocalCopy() );
+ changed = true;
+ }
+ }
+ }
+ }
+ return changed;
+ }
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep">
+ <name>Versioning</name>
+ <version>1.0.0+</version>
+ <description>Versioning information for an artifact (un-versioned or snapshot)</description>
+ <fields>
+ <field>
+ <name>latest</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>What the latest version in the directory is, including snapshots</description>
+ </field>
+ <field>
+ <name>release</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>What the latest version in the directory is, of the releases only</description>
+ </field>
+ <field>
+ <name>snapshot</name>
+ <version>1.0.0+</version>
+ <association>
+ <type>Snapshot</type>
+ </association>
+ <description>The current snapshot data in use for this version (artifact snapshots only)</description>
+ </field>
+ <field>
+ <name>versions</name>
+ <version>1.0.0+</version>
+ <description>Versions available of the artifact (both releases and snapshots)</description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>lastUpdated</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>When the metadata was last updated</description>
+ </field>
+ <field>
+ <name>snapshotVersions</name>
+ <version>1.1.0+</version>
+ <description>Information for each sub-artifact available in this artifact snapshot.</description>
+ <association>
+ <type>SnapshotVersion</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0+</version>
+ <code><![CDATA[
+ public void updateTimestamp()
+ {
+ setLastUpdatedTimestamp( new java.util.Date() );
+ }
+
+ public void setLastUpdatedTimestamp( java.util.Date date )
+ {
+ java.util.TimeZone timezone = java.util.TimeZone.getTimeZone( "UTC" );
+ java.text.DateFormat fmt = new java.text.SimpleDateFormat( "yyyyMMddHHmmss" );
+ fmt.setTimeZone( timezone );
+ setLastUpdated( fmt.format( date ) );
+ }
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep">
+ <name>Snapshot</name>
+ <version>1.0.0+</version>
+ <description>Snapshot data for the current artifact version</description>
+ <fields>
+ <field>
+ <name>timestamp</name>
+ <version>1.0.0+</version>
+ <description>The time it was deployed</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>buildNumber</name>
+ <version>1.0.0+</version>
+ <description>The incremental build number</description>
+ <type>int</type>
+ </field>
+ <field>
+ <name>localCopy</name>
+ <version>1.0.0+</version>
+ <description>Whether to use a local copy instead (with filename that includes the base version)</description>
+ <type>boolean</type>
+ <defaultValue>false</defaultValue>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>SnapshotVersion</name>
+ <version>1.1.0+</version>
+ <description>Versioning information for a sub-artifact of the current snapshot artifact.</description>
+ <fields>
+ <field>
+ <name>classifier</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ <description>The classifier of the sub-artifact.</description>
+ <defaultValue></defaultValue>
+ </field>
+ <field>
+ <name>extension</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ <description>The file extension of thesub-artifact.</description>
+ </field>
+ <field xml.tagName="value">
+ <name>version</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ <description>The resolved snapshot version of the sub-artifact.</description>
+ </field>
+ <field>
+ <name>updated</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ <description>The timestamp when this version information was last updated. The timestamp is expressed using UTC in the format yyyyMMddHHmmss.</description>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>Plugin</name>
+ <version>1.0.0+</version>
+ <description>Mapping information for a single plugin within this group</description>
+ <comment>NOTE: plugin version is _NOT_ included here, since it is resolved using a separate algorithm in plugins' artifact.</comment>
+ <fields>
+ <field>
+ <name>name</name>
+ <type>String</type>
+ <required>true</required>
+ <version>1.0.0+</version>
+ <description>Display name for the plugin.</description>
+ </field>
+ <field>
+ <name>prefix</name>
+ <type>String</type>
+ <required>true</required>
+ <version>1.0.0+</version>
+ <description>The plugin invocation prefix (i.e. eclipse for eclipse:eclipse)</description>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <type>String</type>
+ <required>true</required>
+ <version>1.0.0+</version>
+ <description>The plugin artifactId</description>
+ </field>
+ </fields>
+ </class>
+ </classes>
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/src/site/apt/index.apt b/framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/src/site/apt/index.apt
new file mode 100644
index 00000000..194fc0df
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/src/site/apt/index.apt
@@ -0,0 +1,52 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ Introduction
+ -----
+ Hervé Boutemy
+ -----
+ 2009-04-26
+ -----
+
+Maven Repository Metadata Model
+
+ This is strictly the model for Maven Repository Metadata, so really just plain objects.
+
+ Maven Repository Metadata is available in directories representing:
+
+ [[1]] an un-versioned artifact: it gives informations about available versions of the artifact,
+
+ [[2]] a snapshot artifact: it gives precise information on the snapshot,
+
+ [[3]] a group containing Maven plugins artifacts: it gives informations on plugins available in this group.
+
+ []
+
+ The metadata file name is:
+
+ * <<<maven-metadata.xml>>> in a remote repository,
+
+ * <<<maven-metadata-\<repo-id>.xml>>> in a local repository, for metatada from a repository with <<<repo-id>>> identifier.
+
+ []
+
+ The following are generated from this model:
+
+ * {{{./apidocs/index.html}Java sources}} with Reader and Writers for the Xpp3 XML parser, to read and write <<<maven-metadata(-*).xml>>> files
+
+ * A {{{./repository-metadata.html}Descriptor Reference}}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/src/site/site.xml b/framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/src/site/site.xml
new file mode 100644
index 00000000..0471f895
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/src/site/site.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
+ <body>
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ <item name="JavaDocs" href="apidocs/index.html"/>
+ <!--item name="Source Xref" href="xref/index.html"/-->
+ <!--item name="FAQ" href="faq.html"/-->
+ </menu>
+
+ <menu ref="parent"/>
+ <menu ref="reports"/>
+ </body>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/pom.xml
new file mode 100644
index 00000000..d716840d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/pom.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.3.3</version>
+ </parent>
+
+ <artifactId>maven-settings-builder</artifactId>
+
+ <name>Maven Settings Builder</name>
+ <description>The effective settings builder, with inheritance and password decryption.</description>
+
+ <scm><!-- remove when git scm url format can accept artifact-id at the end, as automatically inherited -->
+ <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
+ <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
+ <tag>maven-3.3.3</tag>
+ </scm>
+
+ <contributors>
+ <contributor>
+ <name>Thomas Meyer</name>
+ </contributor>
+ </contributors>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-builder-support</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interpolation</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-settings</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-sec-dispatcher</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-metadata</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilder.java
new file mode 100644
index 00000000..3cdae7d0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilder.java
@@ -0,0 +1,277 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.building.FileSource;
+import org.apache.maven.building.Source;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.settings.TrackableBase;
+import org.apache.maven.settings.io.SettingsParseException;
+import org.apache.maven.settings.io.SettingsReader;
+import org.apache.maven.settings.io.SettingsWriter;
+import org.apache.maven.settings.merge.MavenSettingsMerger;
+import org.apache.maven.settings.validation.SettingsValidator;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.interpolation.EnvarBasedValueSource;
+import org.codehaus.plexus.interpolation.InterpolationException;
+import org.codehaus.plexus.interpolation.InterpolationPostProcessor;
+import org.codehaus.plexus.interpolation.PropertiesBasedValueSource;
+import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
+
+/**
+ * Builds the effective settings from a user settings file and/or a global settings file.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = SettingsBuilder.class )
+public class DefaultSettingsBuilder
+ implements SettingsBuilder
+{
+
+ @Requirement
+ private SettingsReader settingsReader;
+
+ @Requirement
+ private SettingsWriter settingsWriter;
+
+ @Requirement
+ private SettingsValidator settingsValidator;
+
+ private MavenSettingsMerger settingsMerger = new MavenSettingsMerger();
+
+ public DefaultSettingsBuilder setSettingsReader( SettingsReader settingsReader )
+ {
+ this.settingsReader = settingsReader;
+ return this;
+ }
+
+ public DefaultSettingsBuilder setSettingsWriter( SettingsWriter settingsWriter )
+ {
+ this.settingsWriter = settingsWriter;
+ return this;
+ }
+
+ public DefaultSettingsBuilder setSettingsValidator( SettingsValidator settingsValidator )
+ {
+ this.settingsValidator = settingsValidator;
+ return this;
+ }
+
+ @Override
+ public SettingsBuildingResult build( SettingsBuildingRequest request )
+ throws SettingsBuildingException
+ {
+ DefaultSettingsProblemCollector problems = new DefaultSettingsProblemCollector( null );
+
+ Source globalSettingsSource =
+ getSettingsSource( request.getGlobalSettingsFile(), request.getGlobalSettingsSource() );
+ Settings globalSettings = readSettings( globalSettingsSource, request, problems );
+
+ Source userSettingsSource =
+ getSettingsSource( request.getUserSettingsFile(), request.getUserSettingsSource() );
+ Settings userSettings = readSettings( userSettingsSource, request, problems );
+
+ settingsMerger.merge( userSettings, globalSettings, TrackableBase.GLOBAL_LEVEL );
+
+ problems.setSource( "" );
+
+ userSettings = interpolate( userSettings, request, problems );
+
+ // for the special case of a drive-relative Windows path, make sure it's absolute to save plugins from trouble
+ String localRepository = userSettings.getLocalRepository();
+ if ( localRepository != null && localRepository.length() > 0 )
+ {
+ File file = new File( localRepository );
+ if ( !file.isAbsolute() && file.getPath().startsWith( File.separator ) )
+ {
+ userSettings.setLocalRepository( file.getAbsolutePath() );
+ }
+ }
+
+ if ( hasErrors( problems.getProblems() ) )
+ {
+ throw new SettingsBuildingException( problems.getProblems() );
+ }
+
+ return new DefaultSettingsBuildingResult( userSettings, problems.getProblems() );
+ }
+
+ private boolean hasErrors( List<SettingsProblem> problems )
+ {
+ if ( problems != null )
+ {
+ for ( SettingsProblem problem : problems )
+ {
+ if ( SettingsProblem.Severity.ERROR.compareTo( problem.getSeverity() ) >= 0 )
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ private Source getSettingsSource( File settingsFile, Source settingsSource )
+ {
+ if ( settingsSource != null )
+ {
+ return settingsSource;
+ }
+ else if ( settingsFile != null && settingsFile.exists() )
+ {
+ return new FileSource( settingsFile );
+ }
+ return null;
+ }
+
+ private Settings readSettings( Source settingsSource, SettingsBuildingRequest request,
+ DefaultSettingsProblemCollector problems )
+ {
+ if ( settingsSource == null )
+ {
+ return new Settings();
+ }
+
+ problems.setSource( settingsSource.getLocation() );
+
+ Settings settings;
+
+ try
+ {
+ Map<String, ?> options = Collections.singletonMap( SettingsReader.IS_STRICT, Boolean.TRUE );
+
+ try
+ {
+ settings = settingsReader.read( settingsSource.getInputStream(), options );
+ }
+ catch ( SettingsParseException e )
+ {
+ options = Collections.singletonMap( SettingsReader.IS_STRICT, Boolean.FALSE );
+
+ settings = settingsReader.read( settingsSource.getInputStream(), options );
+
+ problems.add( SettingsProblem.Severity.WARNING, e.getMessage(), e.getLineNumber(), e.getColumnNumber(),
+ e );
+ }
+ }
+ catch ( SettingsParseException e )
+ {
+ problems.add( SettingsProblem.Severity.FATAL, "Non-parseable settings " + settingsSource.getLocation()
+ + ": " + e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
+ return new Settings();
+ }
+ catch ( IOException e )
+ {
+ problems.add( SettingsProblem.Severity.FATAL, "Non-readable settings " + settingsSource.getLocation()
+ + ": " + e.getMessage(), -1, -1, e );
+ return new Settings();
+ }
+
+ settingsValidator.validate( settings, problems );
+
+ return settings;
+ }
+
+ private Settings interpolate( Settings settings, SettingsBuildingRequest request,
+ SettingsProblemCollector problems )
+ {
+ StringWriter writer = new StringWriter( 1024 * 4 );
+
+ try
+ {
+ settingsWriter.write( writer, null, settings );
+ }
+ catch ( IOException e )
+ {
+ throw new IllegalStateException( "Failed to serialize settings to memory", e );
+ }
+
+ String serializedSettings = writer.toString();
+
+ RegexBasedInterpolator interpolator = new RegexBasedInterpolator();
+
+ interpolator.addValueSource( new PropertiesBasedValueSource( request.getUserProperties() ) );
+
+ interpolator.addValueSource( new PropertiesBasedValueSource( request.getSystemProperties() ) );
+
+ try
+ {
+ interpolator.addValueSource( new EnvarBasedValueSource() );
+ }
+ catch ( IOException e )
+ {
+ problems.add( SettingsProblem.Severity.WARNING, "Failed to use environment variables for interpolation: "
+ + e.getMessage(), -1, -1, e );
+ }
+
+ interpolator.addPostProcessor( new InterpolationPostProcessor()
+ {
+ @Override
+ public Object execute( String expression, Object value )
+ {
+ if ( value != null )
+ {
+ // we're going to parse this back in as XML so we need to escape XML markup
+ value = value.toString().replace( "&", "&amp;" ).replace( "<", "&lt;" ).replace( ">", "&gt;" );
+ return value;
+ }
+ return null;
+ }
+ } );
+
+ try
+ {
+ serializedSettings = interpolator.interpolate( serializedSettings, "settings" );
+ }
+ catch ( InterpolationException e )
+ {
+ problems.add( SettingsProblem.Severity.ERROR, "Failed to interpolate settings: " + e.getMessage(), -1, -1,
+ e );
+
+ return settings;
+ }
+
+ Settings result;
+ try
+ {
+ Map<String, ?> options = Collections.singletonMap( SettingsReader.IS_STRICT, Boolean.FALSE );
+ result = settingsReader.read( new StringReader( serializedSettings ), options );
+ }
+ catch ( IOException e )
+ {
+ problems.add( SettingsProblem.Severity.ERROR, "Failed to interpolate settings: " + e.getMessage(), -1, -1,
+ e );
+ return settings;
+ }
+
+ return result;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilderFactory.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilderFactory.java
new file mode 100644
index 00000000..e728ec55
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilderFactory.java
@@ -0,0 +1,71 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.settings.io.DefaultSettingsReader;
+import org.apache.maven.settings.io.DefaultSettingsWriter;
+import org.apache.maven.settings.io.SettingsReader;
+import org.apache.maven.settings.io.SettingsWriter;
+import org.apache.maven.settings.validation.DefaultSettingsValidator;
+import org.apache.maven.settings.validation.SettingsValidator;
+
+/**
+ * A factory to create settings builder instances when no dependency injection is available. <em>Note:</em> This class
+ * is only meant as a utility for developers that want to employ the settings builder outside of the Maven build system,
+ * Maven plugins should always acquire settings builder instances via dependency injection. Developers might want to
+ * subclass this factory to provide custom implementations for some of the components used by the settings builder.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DefaultSettingsBuilderFactory
+{
+
+ protected SettingsReader newSettingsReader()
+ {
+ return new DefaultSettingsReader();
+ }
+
+ protected SettingsWriter newSettingsWriter()
+ {
+ return new DefaultSettingsWriter();
+ }
+
+ protected SettingsValidator newSettingsValidator()
+ {
+ return new DefaultSettingsValidator();
+ }
+
+ /**
+ * Creates a new settings builder instance.
+ *
+ * @return The new settings builder instance, never {@code null}.
+ */
+ public DefaultSettingsBuilder newInstance()
+ {
+ DefaultSettingsBuilder builder = new DefaultSettingsBuilder();
+
+ builder.setSettingsReader( newSettingsReader() );
+ builder.setSettingsWriter( newSettingsWriter() );
+ builder.setSettingsValidator( newSettingsValidator() );
+
+ return builder;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuildingRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuildingRequest.java
new file mode 100644
index 00000000..5a4824e0
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuildingRequest.java
@@ -0,0 +1,160 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Properties;
+
+/**
+ * Collects settings that control building of effective settings.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DefaultSettingsBuildingRequest
+ implements SettingsBuildingRequest
+{
+
+ private File globalSettingsFile;
+
+ private File userSettingsFile;
+
+ private SettingsSource globalSettingsSource;
+
+ private SettingsSource userSettingsSource;
+
+ private Properties systemProperties;
+
+ private Properties userProperties;
+
+ @Override
+ public File getGlobalSettingsFile()
+ {
+ return globalSettingsFile;
+ }
+
+ @Override
+ public DefaultSettingsBuildingRequest setGlobalSettingsFile( File globalSettingsFile )
+ {
+ this.globalSettingsFile = globalSettingsFile;
+
+ return this;
+ }
+
+ @Override
+ public SettingsSource getGlobalSettingsSource()
+ {
+ return globalSettingsSource;
+ }
+
+ @Override
+ public DefaultSettingsBuildingRequest setGlobalSettingsSource( SettingsSource globalSettingsSource )
+ {
+ this.globalSettingsSource = globalSettingsSource;
+
+ return this;
+ }
+
+ @Override
+ public File getUserSettingsFile()
+ {
+ return userSettingsFile;
+ }
+
+ @Override
+ public DefaultSettingsBuildingRequest setUserSettingsFile( File userSettingsFile )
+ {
+ this.userSettingsFile = userSettingsFile;
+
+ return this;
+ }
+
+ @Override
+ public SettingsSource getUserSettingsSource()
+ {
+ return userSettingsSource;
+ }
+
+ @Override
+ public DefaultSettingsBuildingRequest setUserSettingsSource( SettingsSource userSettingsSource )
+ {
+ this.userSettingsSource = userSettingsSource;
+
+ return this;
+ }
+
+ @Override
+ public Properties getSystemProperties()
+ {
+ if ( systemProperties == null )
+ {
+ systemProperties = new Properties();
+ }
+
+ return systemProperties;
+ }
+
+ @Override
+ public DefaultSettingsBuildingRequest setSystemProperties( Properties systemProperties )
+ {
+ if ( systemProperties != null )
+ {
+ this.systemProperties = new Properties();
+ // MNG-5670 guard against ConcurrentModificationException
+ for ( String key : System.getProperties().stringPropertyNames() )
+ {
+ this.systemProperties.put( key, System.getProperty( key ) );
+ }
+ }
+ else
+ {
+ this.systemProperties = null;
+ }
+
+ return this;
+ }
+
+ @Override
+ public Properties getUserProperties()
+ {
+ if ( userProperties == null )
+ {
+ userProperties = new Properties();
+ }
+
+ return userProperties;
+ }
+
+ @Override
+ public DefaultSettingsBuildingRequest setUserProperties( Properties userProperties )
+ {
+ if ( userProperties != null )
+ {
+ this.userProperties = new Properties();
+ this.userProperties.putAll( userProperties );
+ }
+ else
+ {
+ this.userProperties = null;
+ }
+
+ return this;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuildingResult.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuildingResult.java
new file mode 100644
index 00000000..5c1392a6
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuildingResult.java
@@ -0,0 +1,58 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.settings.Settings;
+
+/**
+ * Collects the output of the settings builder.
+ *
+ * @author Benjamin Bentmann
+ */
+class DefaultSettingsBuildingResult
+ implements SettingsBuildingResult
+{
+
+ private Settings effectiveSettings;
+
+ private List<SettingsProblem> problems;
+
+ public DefaultSettingsBuildingResult( Settings effectiveSettings, List<SettingsProblem> problems )
+ {
+ this.effectiveSettings = effectiveSettings;
+ this.problems = ( problems != null ) ? problems : new ArrayList<SettingsProblem>();
+ }
+
+ @Override
+ public Settings getEffectiveSettings()
+ {
+ return effectiveSettings;
+ }
+
+ @Override
+ public List<SettingsProblem> getProblems()
+ {
+ return problems;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsProblem.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsProblem.java
new file mode 100644
index 00000000..b261fa1d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsProblem.java
@@ -0,0 +1,166 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Describes a problem that was encountered during settings building. A problem can either be an exception that was
+ * thrown or a simple string message. In addition, a problem carries a hint about its source, e.g. the settings file
+ * that exhibits the problem.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DefaultSettingsProblem
+ implements SettingsProblem
+{
+
+ private final String source;
+
+ private final int lineNumber;
+
+ private final int columnNumber;
+
+ private final String message;
+
+ private final Exception exception;
+
+ private final Severity severity;
+
+ /**
+ * Creates a new problem with the specified message and exception.
+ *
+ * @param message The message describing the problem, may be {@code null}.
+ * @param severity The severity level of the problem, may be {@code null} to default to
+ * {@link SettingsProblem.Severity#ERROR}.
+ * @param source A hint about the source of the problem like a file path, may be {@code null}.
+ * @param lineNumber The one-based index of the line containing the problem or {@code -1} if unknown.
+ * @param columnNumber The one-based index of the column containing the problem or {@code -1} if unknown.
+ * @param exception The exception that caused this problem, may be {@code null}.
+ */
+ public DefaultSettingsProblem( String message, Severity severity, String source, int lineNumber, int columnNumber,
+ Exception exception )
+ {
+ this.message = message;
+ this.severity = ( severity != null ) ? severity : Severity.ERROR;
+ this.source = ( source != null ) ? source : "";
+ this.lineNumber = lineNumber;
+ this.columnNumber = columnNumber;
+ this.exception = exception;
+ }
+
+ @Override
+ public String getSource()
+ {
+ return source;
+ }
+
+ @Override
+ public int getLineNumber()
+ {
+ return lineNumber;
+ }
+
+ @Override
+ public int getColumnNumber()
+ {
+ return columnNumber;
+ }
+
+ @Override
+ public String getLocation()
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+
+ if ( getSource().length() > 0 )
+ {
+ if ( buffer.length() > 0 )
+ {
+ buffer.append( ", " );
+ }
+ buffer.append( getSource() );
+ }
+
+ if ( getLineNumber() > 0 )
+ {
+ if ( buffer.length() > 0 )
+ {
+ buffer.append( ", " );
+ }
+ buffer.append( "line " ).append( getLineNumber() );
+ }
+
+ if ( getColumnNumber() > 0 )
+ {
+ if ( buffer.length() > 0 )
+ {
+ buffer.append( ", " );
+ }
+ buffer.append( "column " ).append( getColumnNumber() );
+ }
+
+ return buffer.toString();
+ }
+
+ @Override
+ public Exception getException()
+ {
+ return exception;
+ }
+
+ @Override
+ public String getMessage()
+ {
+ String msg;
+
+ if ( message != null && message.length() > 0 )
+ {
+ msg = message;
+ }
+ else
+ {
+ msg = exception.getMessage();
+
+ if ( msg == null )
+ {
+ msg = "";
+ }
+ }
+
+ return msg;
+ }
+
+ @Override
+ public Severity getSeverity()
+ {
+ return severity;
+ }
+
+ @Override
+ public String toString()
+ {
+ StringBuilder buffer = new StringBuilder( 128 );
+
+ buffer.append( "[" ).append( getSeverity() ).append( "] " );
+ buffer.append( getMessage() );
+ buffer.append( " @ " ).append( getLocation() );
+
+ return buffer.toString();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsProblemCollector.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsProblemCollector.java
new file mode 100644
index 00000000..6721379b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsProblemCollector.java
@@ -0,0 +1,70 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.settings.io.SettingsParseException;
+
+/**
+ * Collects problems that are encountered during settings building.
+ *
+ * @author Benjamin Bentmann
+ */
+class DefaultSettingsProblemCollector
+ implements SettingsProblemCollector
+{
+
+ private List<SettingsProblem> problems;
+
+ private String source;
+
+ public DefaultSettingsProblemCollector( List<SettingsProblem> problems )
+ {
+ this.problems = ( problems != null ) ? problems : new ArrayList<SettingsProblem>();
+ }
+
+ public List<SettingsProblem> getProblems()
+ {
+ return problems;
+ }
+
+ public void setSource( String source )
+ {
+ this.source = source;
+ }
+
+ @Override
+ public void add( SettingsProblem.Severity severity, String message, int line, int column, Exception cause )
+ {
+ if ( line <= 0 && column <= 0 && ( cause instanceof SettingsParseException ) )
+ {
+ SettingsParseException e = (SettingsParseException) cause;
+ line = e.getLineNumber();
+ column = e.getColumnNumber();
+ }
+
+ SettingsProblem problem = new DefaultSettingsProblem( message, severity, source, line, column, cause );
+
+ problems.add( problem );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/FileSettingsSource.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/FileSettingsSource.java
new file mode 100644
index 00000000..3c2d32ac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/FileSettingsSource.java
@@ -0,0 +1,59 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.building.FileSource;
+
+/**
+ * Wraps an ordinary {@link File} as a settings source.
+ *
+ * @author Benjamin Bentmann
+ *
+ * @deprecated instead use {@link FileSource}
+ */
+@Deprecated
+public class FileSettingsSource extends FileSource
+ implements SettingsSource
+{
+
+ /**
+ * Creates a new settings source backed by the specified file.
+ *
+ * @param settingsFile The settings file, must not be {@code null}.
+ */
+ public FileSettingsSource( File settingsFile )
+ {
+ super( settingsFile );
+ }
+
+ /**
+ * Gets the settings file of this model source.
+ *
+ * @return The underlying settings file, never {@code null}.
+ * @deprecated instead use {@link #getFile()}
+ */
+ @Deprecated
+ public File getSettingsFile()
+ {
+ return getFile();
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuilder.java
new file mode 100644
index 00000000..61e34e99
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuilder.java
@@ -0,0 +1,40 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Builds the effective settings from a user settings file and/or a global settings file.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface SettingsBuilder
+{
+
+ /**
+ * Builds the effective settings of the specified settings files.
+ *
+ * @param request The settings building request that holds the parameters, must not be {@code null}.
+ * @return The result of the settings building, never {@code null}.
+ * @throws SettingsBuildingException If the effective settings could not be built.
+ */
+ SettingsBuildingResult build( SettingsBuildingRequest request )
+ throws SettingsBuildingException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuildingException.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuildingException.java
new file mode 100644
index 00000000..f7d48e4b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuildingException.java
@@ -0,0 +1,90 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Signals one ore more errors during settings building. The settings builder tries to collect as many problems as
+ * possible before eventually failing to provide callers with rich error information. Use {@link #getProblems()} to
+ * query the details of the failure.
+ *
+ * @author Benjamin Bentmann
+ */
+public class SettingsBuildingException
+ extends Exception
+{
+
+ private final List<SettingsProblem> problems;
+
+ /**
+ * Creates a new exception with the specified problems.
+ *
+ * @param problems The problems that causes this exception, may be {@code null}.
+ */
+ public SettingsBuildingException( List<SettingsProblem> problems )
+ {
+ super( toMessage( problems ) );
+
+ this.problems = new ArrayList<SettingsProblem>();
+ if ( problems != null )
+ {
+ this.problems.addAll( problems );
+ }
+ }
+
+ /**
+ * Gets the problems that caused this exception.
+ *
+ * @return The problems that caused this exception, never {@code null}.
+ */
+ public List<SettingsProblem> getProblems()
+ {
+ return problems;
+ }
+
+ private static String toMessage( List<SettingsProblem> problems )
+ {
+ StringWriter buffer = new StringWriter( 1024 );
+
+ PrintWriter writer = new PrintWriter( buffer );
+
+ writer.print( problems.size() );
+ writer.print( ( problems.size() == 1 ) ? " problem was " : " problems were " );
+ writer.print( "encountered while building the effective settings" );
+ writer.println();
+
+ for ( SettingsProblem problem : problems )
+ {
+ writer.print( "[" );
+ writer.print( problem.getSeverity() );
+ writer.print( "] " );
+ writer.print( problem.getMessage() );
+ writer.print( " @ " );
+ writer.println( problem.getLocation() );
+ }
+
+ return buffer.toString();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuildingRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuildingRequest.java
new file mode 100644
index 00000000..92d87d80
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuildingRequest.java
@@ -0,0 +1,131 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Properties;
+
+/**
+ * Collects settings that control the building of effective settings.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface SettingsBuildingRequest
+{
+
+ /**
+ * Gets the global settings file.
+ *
+ * @return The global settings file or {@code null} if none.
+ */
+ File getGlobalSettingsFile();
+
+ /**
+ * Sets the global settings file. A non-existent settings file is equivalent to empty settings. If both user
+ * settings and global settings are given, the user settings take precedence.
+ *
+ * @param globalSettingsFile The global settings file, may be {@code null} to disable global settings.
+ * @return This request, never {@code null}.
+ */
+ SettingsBuildingRequest setGlobalSettingsFile( File globalSettingsFile );
+
+ /**
+ * Gets the global settings source.
+ *
+ * @return The global settings source or {@code null} if none.
+ */
+ SettingsSource getGlobalSettingsSource();
+
+ /**
+ * Sets the global settings source. If both user settings and a global settings are given, the user settings take
+ * precedence.
+ *
+ * @param globalSettingsSource The global settings source, may be {@code null} to disable global settings.
+ * @return This request, never {@code null}.
+ */
+ SettingsBuildingRequest setGlobalSettingsSource( SettingsSource globalSettingsSource );
+
+ /**
+ * Gets the user settings file.
+ *
+ * @return The user settings file or {@code null} if none.
+ */
+ File getUserSettingsFile();
+
+ /**
+ * Sets the user settings file. A non-existent settings file is equivalent to empty settings. If both a user
+ * settings file and a global settings file are given, the user settings take precedence.
+ *
+ * @param userSettingsFile The user settings file, may be {@code null} to disable user settings.
+ * @return This request, never {@code null}.
+ */
+ SettingsBuildingRequest setUserSettingsFile( File userSettingsFile );
+
+ /**
+ * Gets the user settings source.
+ *
+ * @return The user settings source or {@code null} if none.
+ */
+ SettingsSource getUserSettingsSource();
+
+ /**
+ * Sets the user settings source. If both user settings and a global settings are given, the user settings take
+ * precedence.
+ *
+ * @param userSettingsSource The user settings source, may be {@code null} to disable user settings.
+ * @return This request, never {@code null}.
+ */
+ SettingsBuildingRequest setUserSettingsSource( SettingsSource userSettingsSource );
+
+ /**
+ * Gets the system properties to use for interpolation. The system properties are collected from the runtime
+ * environment like {@link System#getProperties()} and environment variables.
+ *
+ * @return The system properties, never {@code null}.
+ */
+ Properties getSystemProperties();
+
+ /**
+ * Sets the system properties to use for interpolation. The system properties are collected from the runtime
+ * environment like {@link System#getProperties()} and environment variables.
+ *
+ * @param systemProperties The system properties, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ SettingsBuildingRequest setSystemProperties( Properties systemProperties );
+
+ /**
+ * Gets the user properties to use for interpolation. The user properties have been configured directly by the user
+ * on his discretion, e.g. via the {@code -Dkey=value} parameter on the command line.
+ *
+ * @return The user properties, never {@code null}.
+ */
+ Properties getUserProperties();
+
+ /**
+ * Sets the user properties to use for interpolation. The user properties have been configured directly by the user
+ * on his discretion, e.g. via the {@code -Dkey=value} parameter on the command line.
+ *
+ * @param userProperties The user properties, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ SettingsBuildingRequest setUserProperties( Properties userProperties );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuildingResult.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuildingResult.java
new file mode 100644
index 00000000..43b2359f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuildingResult.java
@@ -0,0 +1,50 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.settings.Settings;
+
+/**
+ * Collects the output of the settings builder.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface SettingsBuildingResult
+{
+
+ /**
+ * Gets the assembled settings.
+ *
+ * @return The assembled settings, never {@code null}.
+ */
+ Settings getEffectiveSettings();
+
+ /**
+ * Gets the problems that were encountered during the settings building. Note that only problems of severity
+ * {@link SettingsProblem.Severity#WARNING} and below are reported here. Problems with a higher severity level cause
+ * the settings builder to fail with a {@link SettingsBuildingException}.
+ *
+ * @return The problems that were encountered during the settings building, can be empty but never {@code null}.
+ */
+ List<SettingsProblem> getProblems();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsProblem.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsProblem.java
new file mode 100644
index 00000000..e9e563d9
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsProblem.java
@@ -0,0 +1,100 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Describes a problem that was encountered during settings building. A problem can either be an exception that was
+ * thrown or a simple string message. In addition, a problem carries a hint about its source, e.g. the settings file
+ * that exhibits the problem.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface SettingsProblem
+{
+
+ /**
+ * The different severity levels for a problem, in decreasing order.
+ */
+ enum Severity
+ {
+
+ FATAL, //
+ ERROR, //
+ WARNING //
+
+ }
+
+ /**
+ * Gets the hint about the source of the problem. While the syntax of this hint is unspecified and depends on the
+ * creator of the problem, the general expectation is that the hint provides sufficient information to the user to
+ * track the problem back to its origin. A concrete example for such a source hint can be the file path or URL from
+ * which the settings were read.
+ *
+ * @return The hint about the source of the problem or an empty string if unknown, never {@code null}.
+ */
+ String getSource();
+
+ /**
+ * Gets the one-based index of the line containing the problem. The line number should refer to some text file that
+ * is given by {@link #getSource()}.
+ *
+ * @return The one-based index of the line containing the problem or a non-positive value if unknown.
+ */
+ int getLineNumber();
+
+ /**
+ * Gets the one-based index of the column containing the problem. The column number should refer to some text file
+ * that is given by {@link #getSource()}.
+ *
+ * @return The one-based index of the column containing the problem or non-positive value if unknown.
+ */
+ int getColumnNumber();
+
+ /**
+ * Gets the location of the problem. The location is a user-friendly combination of the values from
+ * {@link #getSource()}, {@link #getLineNumber()} and {@link #getColumnNumber()}. The exact syntax of the returned
+ * value is undefined.
+ *
+ * @return The location of the problem, never {@code null}.
+ */
+ String getLocation();
+
+ /**
+ * Gets the exception that caused this problem (if any).
+ *
+ * @return The exception that caused this problem or {@code null} if not applicable.
+ */
+ Exception getException();
+
+ /**
+ * Gets the message that describes this problem.
+ *
+ * @return The message describing this problem, never {@code null}.
+ */
+ String getMessage();
+
+ /**
+ * Gets the severity level of this problem.
+ *
+ * @return The severity level of this problem, never {@code null}.
+ */
+ Severity getSeverity();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsProblemCollector.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsProblemCollector.java
new file mode 100644
index 00000000..63869c0a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsProblemCollector.java
@@ -0,0 +1,41 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Collects problems that are encountered during settings building.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface SettingsProblemCollector
+{
+
+ /**
+ * Adds the specified problem.
+ *
+ * @param severity The severity of the problem, must not be {@code null}.
+ * @param message The detail message of the problem, may be {@code null}.
+ * @param line The one-based index of the line containing the problem or {@code -1} if unknown.
+ * @param column The one-based index of the column containing the problem or {@code -1} if unknown.
+ * @param cause The cause of the problem, may be {@code null}.
+ */
+ void add( SettingsProblem.Severity severity, String message, int line, int column, Exception cause );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsSource.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsSource.java
new file mode 100644
index 00000000..413a3570
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsSource.java
@@ -0,0 +1,35 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.building.Source;
+
+/**
+ * Provides access to the contents of settings independently of the backing store (e.g. file system, database, memory).
+ *
+ * @author Benjamin Bentmann
+ *
+ * @deprecated instead use {@link Source}
+ */
+@Deprecated
+public interface SettingsSource extends Source
+{
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/StringSettingsSource.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/StringSettingsSource.java
new file mode 100644
index 00000000..dbe97580
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/StringSettingsSource.java
@@ -0,0 +1,69 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.building.StringSource;
+
+/**
+ * Wraps an ordinary {@link CharSequence} as a settings source.
+ *
+ * @author Benjamin Bentmann
+ *
+ * @deprecated instead use {@link StringSource}
+ */
+@Deprecated
+public class StringSettingsSource extends StringSource
+ implements SettingsSource
+{
+
+ /**
+ * Creates a new settings source backed by the specified string.
+ *
+ * @param settings The settings' string representation, may be empty or {@code null}.
+ */
+ public StringSettingsSource( CharSequence settings )
+ {
+ this( settings, null );
+ }
+
+ /**
+ * Creates a new settings source backed by the specified string.
+ *
+ * @param settings The settings' string representation, may be empty or {@code null}.
+ * @param location The location to report for this use, may be {@code null}.
+ */
+ public StringSettingsSource( CharSequence settings, String location )
+ {
+ super( settings, location );
+ }
+
+ /**
+ * Gets the character sequence of this settings source.
+ *
+ * @return The underlying character stream, never {@code null}.
+ * @deprecated instead use {@link #getContent()}
+ */
+ @Deprecated
+ public String getSettings()
+ {
+ return getContent();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/UrlSettingsSource.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/UrlSettingsSource.java
new file mode 100644
index 00000000..2b40f648
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/UrlSettingsSource.java
@@ -0,0 +1,60 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.net.URL;
+
+import org.apache.maven.building.UrlSource;
+
+/**
+ * Wraps an ordinary {@link URL} as a settings source.
+ *
+ * @author Benjamin Bentmann
+ *
+ * @deprecated instead use {@link UrlSource}
+ */
+@Deprecated
+public class UrlSettingsSource extends UrlSource
+ implements SettingsSource
+{
+
+ /**
+ * Creates a new model source backed by the specified URL.
+ *
+ * @param settingsUrl The settings URL, must not be {@code null}.
+ */
+ public UrlSettingsSource( URL settingsUrl )
+ {
+ super( settingsUrl );
+ }
+
+ /**
+ * Gets the settings URL of this model source.
+ *
+ * @return The underlying settings URL, never {@code null}.
+ * @deprecated instead use {@link #getUrl()}
+ */
+ @Deprecated
+ public URL getSettingsUrl()
+ {
+ return getUrl();
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/DefaultSettingsDecrypter.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/DefaultSettingsDecrypter.java
new file mode 100644
index 00000000..acdb4b25
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/DefaultSettingsDecrypter.java
@@ -0,0 +1,110 @@
+package org.apache.maven.settings.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.building.DefaultSettingsProblem;
+import org.apache.maven.settings.building.SettingsProblem;
+import org.apache.maven.settings.building.SettingsProblem.Severity;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
+import org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException;
+
+/**
+ * Decrypts passwords in the settings.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = SettingsDecrypter.class )
+public class DefaultSettingsDecrypter
+ implements SettingsDecrypter
+{
+
+ @Requirement( hint = "maven" )
+ private SecDispatcher securityDispatcher;
+
+ @Override
+ public SettingsDecryptionResult decrypt( SettingsDecryptionRequest request )
+ {
+ List<SettingsProblem> problems = new ArrayList<SettingsProblem>();
+
+ List<Server> servers = new ArrayList<Server>();
+
+ for ( Server server : request.getServers() )
+ {
+ server = server.clone();
+
+ servers.add( server );
+
+ try
+ {
+ server.setPassword( decrypt( server.getPassword() ) );
+ }
+ catch ( SecDispatcherException e )
+ {
+ problems.add( new DefaultSettingsProblem( "Failed to decrypt password for server " + server.getId()
+ + ": " + e.getMessage(), Severity.ERROR, "server: " + server.getId(), -1, -1, e ) );
+ }
+
+ try
+ {
+ server.setPassphrase( decrypt( server.getPassphrase() ) );
+ }
+ catch ( SecDispatcherException e )
+ {
+ problems.add( new DefaultSettingsProblem( "Failed to decrypt passphrase for server " + server.getId()
+ + ": " + e.getMessage(), Severity.ERROR, "server: " + server.getId(), -1, -1, e ) );
+ }
+ }
+
+ List<Proxy> proxies = new ArrayList<Proxy>();
+
+ for ( Proxy proxy : request.getProxies() )
+ {
+ proxy = proxy.clone();
+
+ proxies.add( proxy );
+
+ try
+ {
+ proxy.setPassword( decrypt( proxy.getPassword() ) );
+ }
+ catch ( SecDispatcherException e )
+ {
+ problems.add( new DefaultSettingsProblem( "Failed to decrypt password for proxy " + proxy.getId()
+ + ": " + e.getMessage(), Severity.ERROR, "proxy: " + proxy.getId(), -1, -1, e ) );
+ }
+ }
+
+ return new DefaultSettingsDecryptionResult( servers, proxies, problems );
+ }
+
+ private String decrypt( String str )
+ throws SecDispatcherException
+ {
+ return ( str == null ) ? null : securityDispatcher.decrypt( str );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/DefaultSettingsDecryptionRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/DefaultSettingsDecryptionRequest.java
new file mode 100644
index 00000000..31185f1e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/DefaultSettingsDecryptionRequest.java
@@ -0,0 +1,120 @@
+package org.apache.maven.settings.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.Settings;
+
+/**
+ * Collects parameters that control the decryption of settings.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DefaultSettingsDecryptionRequest
+ implements SettingsDecryptionRequest
+{
+
+ private List<Server> servers;
+
+ private List<Proxy> proxies;
+
+ /**
+ * Creates an empty request.
+ */
+ public DefaultSettingsDecryptionRequest()
+ {
+ // does nothing
+ }
+
+ /**
+ * Creates a new request to decrypt the specified settings.
+ *
+ * @param settings The settings to decrypt, must not be {@code null}.
+ */
+ public DefaultSettingsDecryptionRequest( Settings settings )
+ {
+ setServers( settings.getServers() );
+ setProxies( settings.getProxies() );
+ }
+
+ /**
+ * Creates a new request to decrypt the specified server.
+ *
+ * @param server The server to decrypt, must not be {@code null}.
+ */
+ public DefaultSettingsDecryptionRequest( Server server )
+ {
+ this.servers = new ArrayList<Server>( Arrays.asList( server ) );
+ }
+
+ /**
+ * Creates a new request to decrypt the specified proxy.
+ *
+ * @param proxy The proxy to decrypt, must not be {@code null}.
+ */
+ public DefaultSettingsDecryptionRequest( Proxy proxy )
+ {
+ this.proxies = new ArrayList<Proxy>( Arrays.asList( proxy ) );
+ }
+
+ @Override
+ public List<Server> getServers()
+ {
+ if ( servers == null )
+ {
+ servers = new ArrayList<Server>();
+ }
+
+ return servers;
+ }
+
+ @Override
+ public DefaultSettingsDecryptionRequest setServers( List<Server> servers )
+ {
+ this.servers = servers;
+
+ return this;
+ }
+
+ @Override
+ public List<Proxy> getProxies()
+ {
+ if ( proxies == null )
+ {
+ proxies = new ArrayList<Proxy>();
+ }
+
+ return proxies;
+ }
+
+ @Override
+ public DefaultSettingsDecryptionRequest setProxies( List<Proxy> proxies )
+ {
+ this.proxies = proxies;
+
+ return this;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/DefaultSettingsDecryptionResult.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/DefaultSettingsDecryptionResult.java
new file mode 100644
index 00000000..33ee5a1a
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/DefaultSettingsDecryptionResult.java
@@ -0,0 +1,81 @@
+package org.apache.maven.settings.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.building.SettingsProblem;
+
+/**
+ * Collects the output of the settings decrypter.
+ *
+ * @author Benjamin Bentmann
+ */
+class DefaultSettingsDecryptionResult
+ implements SettingsDecryptionResult
+{
+
+ private List<Server> servers;
+
+ private List<Proxy> proxies;
+
+ private List<SettingsProblem> problems;
+
+ public DefaultSettingsDecryptionResult( List<Server> servers, List<Proxy> proxies, List<SettingsProblem> problems )
+ {
+ this.servers = ( servers != null ) ? servers : new ArrayList<Server>();
+ this.proxies = ( proxies != null ) ? proxies : new ArrayList<Proxy>();
+ this.problems = ( problems != null ) ? problems : new ArrayList<SettingsProblem>();
+ }
+
+ @Override
+ public Server getServer()
+ {
+ return servers.isEmpty() ? null : servers.get( 0 );
+ }
+
+ @Override
+ public List<Server> getServers()
+ {
+ return servers;
+ }
+
+ @Override
+ public Proxy getProxy()
+ {
+ return proxies.isEmpty() ? null : proxies.get( 0 );
+ }
+
+ @Override
+ public List<Proxy> getProxies()
+ {
+ return proxies;
+ }
+
+ @Override
+ public List<SettingsProblem> getProblems()
+ {
+ return problems;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/SettingsDecrypter.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/SettingsDecrypter.java
new file mode 100644
index 00000000..b34c3944
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/SettingsDecrypter.java
@@ -0,0 +1,38 @@
+package org.apache.maven.settings.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Decrypts passwords in the settings.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface SettingsDecrypter
+{
+
+ /**
+ * Decrypts passwords in the settings.
+ *
+ * @param request The settings decryption request that holds the parameters, must not be {@code null}.
+ * @return The result of the settings decryption, never {@code null}.
+ */
+ SettingsDecryptionResult decrypt( SettingsDecryptionRequest request );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/SettingsDecryptionRequest.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/SettingsDecryptionRequest.java
new file mode 100644
index 00000000..b344a99e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/SettingsDecryptionRequest.java
@@ -0,0 +1,65 @@
+package org.apache.maven.settings.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Server;
+
+/**
+ * Collects parameters that control the decryption of settings.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface SettingsDecryptionRequest
+{
+
+ /**
+ * Gets the servers whose passwords should be decrypted.
+ *
+ * @return The servers to decrypt, never {@code null}.
+ */
+ List<Server> getServers();
+
+ /**
+ * Sets the servers whose passwords should be decrypted.
+ *
+ * @param servers The servers to decrypt, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ SettingsDecryptionRequest setServers( List<Server> servers );
+
+ /**
+ * Gets the proxies whose passwords should be decrypted.
+ *
+ * @return The proxies to decrypt, never {@code null}.
+ */
+ List<Proxy> getProxies();
+
+ /**
+ * Sets the proxies whose passwords should be decrypted.
+ *
+ * @param proxies The proxies to decrypt, may be {@code null}.
+ * @return This request, never {@code null}.
+ */
+ SettingsDecryptionRequest setProxies( List<Proxy> proxies );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/SettingsDecryptionResult.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/SettingsDecryptionResult.java
new file mode 100644
index 00000000..5b7b1f4b
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/SettingsDecryptionResult.java
@@ -0,0 +1,71 @@
+package org.apache.maven.settings.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.building.SettingsProblem;
+
+/**
+ * Collects the output of the settings decrypter.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface SettingsDecryptionResult
+{
+
+ /**
+ * Gets the decrypted server. This is a convenience method to retrieve the first element from {@link #getServers()}.
+ *
+ * @return The decrypted server or {@code null}.
+ */
+ Server getServer();
+
+ /**
+ * Gets the decrypted servers.
+ *
+ * @return The decrypted server, can be empty but never {@code null}.
+ */
+ List<Server> getServers();
+
+ /**
+ * Gets the decrypted proxy. This is a convenience method to retrieve the first element from {@link #getProxies()}.
+ *
+ * @return The decrypted proxy or {@code null}.
+ */
+ Proxy getProxy();
+
+ /**
+ * Gets the decrypted proxies.
+ *
+ * @return The decrypted proxy, can be empty but never {@code null}.
+ */
+ List<Proxy> getProxies();
+
+ /**
+ * Gets the problems that were encountered during the settings decryption.
+ *
+ * @return The problems that were encountered during the decryption, can be empty but never {@code null}.
+ */
+ List<SettingsProblem> getProblems();
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsReader.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsReader.java
new file mode 100644
index 00000000..590423ef
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsReader.java
@@ -0,0 +1,113 @@
+package org.apache.maven.settings.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.Map;
+
+import org.apache.maven.settings.Settings;
+import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * Handles deserialization of settings from the default textual format.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = SettingsReader.class )
+public class DefaultSettingsReader
+ implements SettingsReader
+{
+
+ @Override
+ public Settings read( File input, Map<String, ?> options )
+ throws IOException
+ {
+ if ( input == null )
+ {
+ throw new IllegalArgumentException( "input file missing" );
+ }
+
+ Settings settings = read( ReaderFactory.newXmlReader( input ), options );
+
+ return settings;
+ }
+
+ @Override
+ public Settings read( Reader input, Map<String, ?> options )
+ throws IOException
+ {
+ if ( input == null )
+ {
+ throw new IllegalArgumentException( "input reader missing" );
+ }
+
+ try
+ {
+ SettingsXpp3Reader r = new SettingsXpp3Reader();
+ return r.read( input, isStrict( options ) );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new SettingsParseException( e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
+ }
+ finally
+ {
+ IOUtil.close( input );
+ }
+ }
+
+ @Override
+ public Settings read( InputStream input, Map<String, ?> options )
+ throws IOException
+ {
+ if ( input == null )
+ {
+ throw new IllegalArgumentException( "input stream missing" );
+ }
+
+ try
+ {
+ SettingsXpp3Reader r = new SettingsXpp3Reader();
+ return r.read( input, isStrict( options ) );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new SettingsParseException( e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
+ }
+ finally
+ {
+ IOUtil.close( input );
+ }
+ }
+
+ private boolean isStrict( Map<String, ?> options )
+ {
+ Object value = ( options != null ) ? options.get( IS_STRICT ) : null;
+ return value == null || Boolean.parseBoolean( value.toString() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsWriter.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsWriter.java
new file mode 100644
index 00000000..88f78a03
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsWriter.java
@@ -0,0 +1,118 @@
+package org.apache.maven.settings.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.Map;
+
+import org.apache.maven.settings.Settings;
+import org.apache.maven.settings.io.xpp3.SettingsXpp3Writer;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.WriterFactory;
+
+/**
+ * Handles serialization of settings into the default textual format.
+ *
+ * @author Benjamin Bentmann
+ */
+@Component( role = SettingsWriter.class )
+public class DefaultSettingsWriter
+ implements SettingsWriter
+{
+
+ @Override
+ public void write( File output, Map<String, Object> options, Settings settings )
+ throws IOException
+ {
+ if ( output == null )
+ {
+ throw new IllegalArgumentException( "output file missing" );
+ }
+
+ if ( settings == null )
+ {
+ throw new IllegalArgumentException( "settings missing" );
+ }
+
+ output.getParentFile().mkdirs();
+
+ write( WriterFactory.newXmlWriter( output ), options, settings );
+ }
+
+ @Override
+ public void write( Writer output, Map<String, Object> options, Settings settings )
+ throws IOException
+ {
+ if ( output == null )
+ {
+ throw new IllegalArgumentException( "output writer missing" );
+ }
+
+ if ( settings == null )
+ {
+ throw new IllegalArgumentException( "settings missing" );
+ }
+
+ try
+ {
+ SettingsXpp3Writer w = new SettingsXpp3Writer();
+ w.write( output, settings );
+ }
+ finally
+ {
+ IOUtil.close( output );
+ }
+ }
+
+ @Override
+ public void write( OutputStream output, Map<String, Object> options, Settings settings )
+ throws IOException
+ {
+ if ( output == null )
+ {
+ throw new IllegalArgumentException( "output stream missing" );
+ }
+
+ if ( settings == null )
+ {
+ throw new IllegalArgumentException( "settings missing" );
+ }
+
+ try
+ {
+ String encoding = settings.getModelEncoding();
+ if ( encoding == null || encoding.length() <= 0 )
+ {
+ encoding = "UTF-8";
+ }
+ write( new OutputStreamWriter( output, encoding ), options, settings );
+ }
+ finally
+ {
+ IOUtil.close( output );
+ }
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/SettingsParseException.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/SettingsParseException.java
new file mode 100644
index 00000000..425e6d8e
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/SettingsParseException.java
@@ -0,0 +1,93 @@
+package org.apache.maven.settings.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+
+/**
+ * Signals a failure to parse the settings due to invalid syntax (e.g. non-wellformed XML or unknown elements).
+ *
+ * @author Benjamin Bentmann
+ */
+public class SettingsParseException
+ extends IOException
+{
+
+ /**
+ * The one-based index of the line containing the error.
+ */
+ private final int lineNumber;
+
+ /**
+ * The one-based index of the column containing the error.
+ */
+ private final int columnNumber;
+
+ /**
+ * Creates a new parser exception with the specified details.
+ *
+ * @param message The error message, may be {@code null}.
+ * @param lineNumber The one-based index of the line containing the error or {@code -1} if unknown.
+ * @param columnNumber The one-based index of the column containing the error or {@code -1} if unknown.
+ */
+ public SettingsParseException( String message, int lineNumber, int columnNumber )
+ {
+ super( message );
+ this.lineNumber = lineNumber;
+ this.columnNumber = columnNumber;
+ }
+
+ /**
+ * Creates a new parser exception with the specified details.
+ *
+ * @param message The error message, may be {@code null}.
+ * @param lineNumber The one-based index of the line containing the error or {@code -1} if unknown.
+ * @param columnNumber The one-based index of the column containing the error or {@code -1} if unknown.
+ * @param cause The nested cause of this error, may be {@code null}.
+ */
+ public SettingsParseException( String message, int lineNumber, int columnNumber, Throwable cause )
+ {
+ super( message );
+ initCause( cause );
+ this.lineNumber = lineNumber;
+ this.columnNumber = columnNumber;
+ }
+
+ /**
+ * Gets the one-based index of the line containing the error.
+ *
+ * @return The one-based index of the line containing the error or a non-positive value if unknown.
+ */
+ public int getLineNumber()
+ {
+ return lineNumber;
+ }
+
+ /**
+ * Gets the one-based index of the column containing the error.
+ *
+ * @return The one-based index of the column containing the error or non-positive value if unknown.
+ */
+ public int getColumnNumber()
+ {
+ return columnNumber;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/SettingsReader.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/SettingsReader.java
new file mode 100644
index 00000000..7817df65
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/SettingsReader.java
@@ -0,0 +1,82 @@
+package org.apache.maven.settings.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.Map;
+
+import org.apache.maven.settings.Settings;
+
+/**
+ * Handles deserialization of settings from some kind of textual format like XML.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface SettingsReader
+{
+
+ /**
+ * The key for the option to enable strict parsing. This option is of type {@link Boolean} and defaults to {@code
+ * true}. If {@code false}, unknown elements will be ignored instead of causing a failure.
+ */
+ String IS_STRICT = "org.apache.maven.settings.io.isStrict";
+
+ /**
+ * Reads the settings from the specified file.
+ *
+ * @param input The file to deserialize the settings from, must not be {@code null}.
+ * @param options The options to use for deserialization, may be {@code null} to use the default values.
+ * @return The deserialized settings, never {@code null}.
+ * @throws IOException If the settings could not be deserialized.
+ * @throws SettingsParseException If the input format could not be parsed.
+ */
+ Settings read( File input, Map<String, ?> options )
+ throws IOException, SettingsParseException;
+
+ /**
+ * Reads the settings from the specified character reader. The reader will be automatically closed before the method
+ * returns.
+ *
+ * @param input The reader to deserialize the settings from, must not be {@code null}.
+ * @param options The options to use for deserialization, may be {@code null} to use the default values.
+ * @return The deserialized settings, never {@code null}.
+ * @throws IOException If the settings could not be deserialized.
+ * @throws SettingsParseException If the input format could not be parsed.
+ */
+ Settings read( Reader input, Map<String, ?> options )
+ throws IOException, SettingsParseException;
+
+ /**
+ * Reads the settings from the specified byte stream. The stream will be automatically closed before the method
+ * returns.
+ *
+ * @param input The stream to deserialize the settings from, must not be {@code null}.
+ * @param options The options to use for deserialization, may be {@code null} to use the default values.
+ * @return The deserialized settings, never {@code null}.
+ * @throws IOException If the settings could not be deserialized.
+ * @throws SettingsParseException If the input format could not be parsed.
+ */
+ Settings read( InputStream input, Map<String, ?> options )
+ throws IOException, SettingsParseException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/SettingsWriter.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/SettingsWriter.java
new file mode 100644
index 00000000..54bfcf0c
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/SettingsWriter.java
@@ -0,0 +1,74 @@
+package org.apache.maven.settings.io;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.util.Map;
+
+import org.apache.maven.settings.Settings;
+
+/**
+ * Handles serialization of settings into some kind of textual format like XML.
+ *
+ * @author Benjamin Bentmann
+ */
+public interface SettingsWriter
+{
+
+ /**
+ * Writes the supplied settings to the specified file. Any non-existing parent directories of the output file will
+ * be created automatically.
+ *
+ * @param output The file to serialize the settings to, must not be {@code null}.
+ * @param options The options to use for serialization, may be {@code null} to use the default values.
+ * @param settings The settings to serialize, must not be {@code null}.
+ * @throws IOException If the settings could not be serialized.
+ */
+ void write( File output, Map<String, Object> options, Settings settings )
+ throws IOException;
+
+ /**
+ * Writes the supplied settings to the specified character writer. The writer will be automatically closed before
+ * the method returns.
+ *
+ * @param output The writer to serialize the settings to, must not be {@code null}.
+ * @param options The options to use for serialization, may be {@code null} to use the default values.
+ * @param settings The settings to serialize, must not be {@code null}.
+ * @throws IOException If the settings could not be serialized.
+ */
+ void write( Writer output, Map<String, Object> options, Settings settings )
+ throws IOException;
+
+ /**
+ * Writes the supplied settings to the specified byte stream. The stream will be automatically closed before the
+ * method returns.
+ *
+ * @param output The stream to serialize the settings to, must not be {@code null}.
+ * @param options The options to use for serialization, may be {@code null} to use the default values.
+ * @param settings The settings to serialize, must not be {@code null}.
+ * @throws IOException If the settings could not be serialized.
+ */
+ void write( OutputStream output, Map<String, Object> options, Settings settings )
+ throws IOException;
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/merge/MavenSettingsMerger.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/merge/MavenSettingsMerger.java
new file mode 100644
index 00000000..fd419fb2
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/merge/MavenSettingsMerger.java
@@ -0,0 +1,142 @@
+package org.apache.maven.settings.merge;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.settings.IdentifiableBase;
+import org.apache.maven.settings.Settings;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
+ * @author Benjamin Bentmann
+ */
+public class MavenSettingsMerger
+{
+
+ /**
+ * @param dominant
+ * @param recessive
+ * @param recessiveSourceLevel
+ */
+ public void merge( Settings dominant, Settings recessive, String recessiveSourceLevel )
+ {
+ if ( dominant == null || recessive == null )
+ {
+ return;
+ }
+
+ recessive.setSourceLevel( recessiveSourceLevel );
+
+ List<String> dominantActiveProfiles = dominant.getActiveProfiles();
+ List<String> recessiveActiveProfiles = recessive.getActiveProfiles();
+
+ if ( recessiveActiveProfiles != null )
+ {
+ if ( dominantActiveProfiles == null )
+ {
+ dominantActiveProfiles = new ArrayList<String>();
+ dominant.setActiveProfiles( dominantActiveProfiles );
+ }
+
+ for ( String profileId : recessiveActiveProfiles )
+ {
+ if ( !dominantActiveProfiles.contains( profileId ) )
+ {
+ dominantActiveProfiles.add( profileId );
+ }
+ }
+ }
+
+ List<String> dominantPluginGroupIds = dominant.getPluginGroups();
+
+ List<String> recessivePluginGroupIds = recessive.getPluginGroups();
+
+ if ( recessivePluginGroupIds != null )
+ {
+ if ( dominantPluginGroupIds == null )
+ {
+ dominantPluginGroupIds = new ArrayList<String>();
+ dominant.setPluginGroups( dominantPluginGroupIds );
+ }
+
+ for ( String pluginGroupId : recessivePluginGroupIds )
+ {
+ if ( !dominantPluginGroupIds.contains( pluginGroupId ) )
+ {
+ dominantPluginGroupIds.add( pluginGroupId );
+ }
+ }
+ }
+
+ if ( StringUtils.isEmpty( dominant.getLocalRepository() ) )
+ {
+ dominant.setLocalRepository( recessive.getLocalRepository() );
+ }
+
+ shallowMergeById( dominant.getMirrors(), recessive.getMirrors(), recessiveSourceLevel );
+ shallowMergeById( dominant.getServers(), recessive.getServers(), recessiveSourceLevel );
+ shallowMergeById( dominant.getProxies(), recessive.getProxies(), recessiveSourceLevel );
+ shallowMergeById( dominant.getProfiles(), recessive.getProfiles(), recessiveSourceLevel );
+
+ }
+
+ /**
+ * @param dominant
+ * @param recessive
+ * @param recessiveSourceLevel
+ */
+ private static <T extends IdentifiableBase> void shallowMergeById( List<T> dominant, List<T> recessive,
+ String recessiveSourceLevel )
+ {
+ Map<String, T> dominantById = mapById( dominant );
+
+ for ( T identifiable : recessive )
+ {
+ if ( !dominantById.containsKey( identifiable.getId() ) )
+ {
+ identifiable.setSourceLevel( recessiveSourceLevel );
+
+ dominant.add( identifiable );
+ }
+ }
+ }
+
+ /**
+ * @param identifiables
+ * @return a map
+ */
+ private static <T extends IdentifiableBase> Map<String, T> mapById( List<T> identifiables )
+ {
+ Map<String, T> byId = new HashMap<String, T>();
+
+ for ( T identifiable : identifiables )
+ {
+ byId.put( identifiable.getId(), identifiable );
+ }
+
+ return byId;
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java
new file mode 100644
index 00000000..5d17456d
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java
@@ -0,0 +1,285 @@
+package org.apache.maven.settings.validation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.settings.Mirror;
+import org.apache.maven.settings.Profile;
+import org.apache.maven.settings.Repository;
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.settings.building.SettingsProblem.Severity;
+import org.apache.maven.settings.building.SettingsProblemCollector;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * @author Milos Kleint
+ */
+@Component( role = SettingsValidator.class )
+public class DefaultSettingsValidator
+ implements SettingsValidator
+{
+
+ private static final String ID_REGEX = "[A-Za-z0-9_\\-.]+";
+
+ private static final String ILLEGAL_FS_CHARS = "\\/:\"<>|?*";
+
+ private static final String ILLEGAL_REPO_ID_CHARS = ILLEGAL_FS_CHARS;
+
+ @Override
+ public void validate( Settings settings, SettingsProblemCollector problems )
+ {
+ if ( settings.isUsePluginRegistry() )
+ {
+ addViolation( problems, Severity.WARNING, "usePluginRegistry", null, "is deprecated and has no effect." );
+ }
+
+ List<String> pluginGroups = settings.getPluginGroups();
+
+ if ( pluginGroups != null )
+ {
+ for ( int i = 0; i < pluginGroups.size(); i++ )
+ {
+ String pluginGroup = pluginGroups.get( i ).trim();
+
+ if ( StringUtils.isBlank( pluginGroup ) )
+ {
+ addViolation( problems, Severity.ERROR, "pluginGroups.pluginGroup[" + i + "]", null,
+ "must not be empty" );
+ }
+ else if ( !pluginGroup.matches( ID_REGEX ) )
+ {
+ addViolation( problems, Severity.ERROR, "pluginGroups.pluginGroup[" + i + "]", null,
+ "must denote a valid group id and match the pattern " + ID_REGEX );
+ }
+ }
+ }
+
+ List<Server> servers = settings.getServers();
+
+ if ( servers != null )
+ {
+ Set<String> serverIds = new HashSet<String>();
+
+ for ( int i = 0; i < servers.size(); i++ )
+ {
+ Server server = servers.get( i );
+
+ validateStringNotEmpty( problems, "servers.server[" + i + "].id", server.getId(), null );
+
+ if ( !serverIds.add( server.getId() ) )
+ {
+ addViolation( problems, Severity.WARNING, "servers.server.id", null,
+ "must be unique but found duplicate server with id " + server.getId() );
+ }
+ }
+ }
+
+ List<Mirror> mirrors = settings.getMirrors();
+
+ if ( mirrors != null )
+ {
+ for ( Mirror mirror : mirrors )
+ {
+ validateStringNotEmpty( problems, "mirrors.mirror.id", mirror.getId(), mirror.getUrl() );
+
+ validateBannedCharacters( problems, "mirrors.mirror.id", Severity.WARNING, mirror.getId(), null,
+ ILLEGAL_REPO_ID_CHARS );
+
+ if ( "local".equals( mirror.getId() ) )
+ {
+ addViolation( problems, Severity.WARNING, "mirrors.mirror.id", null, "must not be 'local'"
+ + ", this identifier is reserved for the local repository"
+ + ", using it for other repositories will corrupt your repository metadata." );
+ }
+
+ validateStringNotEmpty( problems, "mirrors.mirror.url", mirror.getUrl(), mirror.getId() );
+
+ validateStringNotEmpty( problems, "mirrors.mirror.mirrorOf", mirror.getMirrorOf(), mirror.getId() );
+ }
+ }
+
+ List<Profile> profiles = settings.getProfiles();
+
+ if ( profiles != null )
+ {
+ Set<String> profileIds = new HashSet<String>();
+
+ for ( Profile profile : profiles )
+ {
+ if ( !profileIds.add( profile.getId() ) )
+ {
+ addViolation( problems, Severity.WARNING, "profiles.profile.id", null,
+ "must be unique but found duplicate profile with id " + profile.getId() );
+ }
+
+ String prefix = "profiles.profile[" + profile.getId() + "].";
+
+ validateRepositories( problems, profile.getRepositories(), prefix + "repositories.repository" );
+ validateRepositories( problems, profile.getPluginRepositories(), prefix
+ + "pluginRepositories.pluginRepository" );
+ }
+ }
+
+ List<Proxy> proxies = settings.getProxies();
+
+ if ( proxies != null )
+ {
+ Set<String> proxyIds = new HashSet<String>();
+
+ for ( Proxy proxy : proxies )
+ {
+ if ( !proxyIds.add( proxy.getId() ) )
+ {
+ addViolation( problems, Severity.WARNING, "proxies.proxy.id", null,
+ "must be unique but found duplicate proxy with id " + proxy.getId() );
+ }
+ validateStringNotEmpty( problems, "proxies.proxy.host", proxy.getHost(), proxy.getId() );
+ }
+ }
+ }
+
+ private void validateRepositories( SettingsProblemCollector problems, List<Repository> repositories, String prefix )
+ {
+ Set<String> repoIds = new HashSet<String>();
+
+ for ( Repository repository : repositories )
+ {
+ validateStringNotEmpty( problems, prefix + ".id", repository.getId(), repository.getUrl() );
+
+ validateBannedCharacters( problems, prefix + ".id", Severity.WARNING, repository.getId(), null,
+ ILLEGAL_REPO_ID_CHARS );
+
+ if ( "local".equals( repository.getId() ) )
+ {
+ addViolation( problems, Severity.WARNING, prefix + ".id", null, "must not be 'local'"
+ + ", this identifier is reserved for the local repository"
+ + ", using it for other repositories will corrupt your repository metadata." );
+ }
+
+ if ( !repoIds.add( repository.getId() ) )
+ {
+ addViolation( problems, Severity.WARNING, prefix + ".id", null,
+ "must be unique but found duplicate repository with id " + repository.getId() );
+ }
+
+ validateStringNotEmpty( problems, prefix + ".url", repository.getUrl(), repository.getId() );
+
+ if ( "legacy".equals( repository.getLayout() ) )
+ {
+ addViolation( problems, Severity.WARNING, prefix + ".layout", repository.getId(),
+ "uses the unsupported value 'legacy', artifact resolution might fail." );
+ }
+ }
+ }
+
+ // ----------------------------------------------------------------------
+ // Field validation
+ // ----------------------------------------------------------------------
+
+ /**
+ * Asserts:
+ * <p/>
+ * <ul>
+ * <li><code>string.length != null</code>
+ * <li><code>string.length > 0</code>
+ * </ul>
+ */
+ private static boolean validateStringNotEmpty( SettingsProblemCollector problems, String fieldName, String string,
+ String sourceHint )
+ {
+ if ( !validateNotNull( problems, fieldName, string, sourceHint ) )
+ {
+ return false;
+ }
+
+ if ( string.length() > 0 )
+ {
+ return true;
+ }
+
+ addViolation( problems, Severity.ERROR, fieldName, sourceHint, "is missing" );
+
+ return false;
+ }
+
+ /**
+ * Asserts:
+ * <p/>
+ * <ul>
+ * <li><code>string != null</code>
+ * </ul>
+ */
+ private static boolean validateNotNull( SettingsProblemCollector problems, String fieldName, Object object,
+ String sourceHint )
+ {
+ if ( object != null )
+ {
+ return true;
+ }
+
+ addViolation( problems, Severity.ERROR, fieldName, sourceHint, "is missing" );
+
+ return false;
+ }
+
+ private static boolean validateBannedCharacters( SettingsProblemCollector problems, String fieldName,
+ Severity severity, String string, String sourceHint,
+ String banned )
+ {
+ if ( string != null )
+ {
+ for ( int i = string.length() - 1; i >= 0; i-- )
+ {
+ if ( banned.indexOf( string.charAt( i ) ) >= 0 )
+ {
+ addViolation( problems, severity, fieldName, sourceHint,
+ "must not contain any of these characters " + banned + " but found "
+ + string.charAt( i ) );
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ private static void addViolation( SettingsProblemCollector problems, Severity severity, String fieldName,
+ String sourceHint, String message )
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+ buffer.append( '\'' ).append( fieldName ).append( '\'' );
+
+ if ( sourceHint != null )
+ {
+ buffer.append( " for " ).append( sourceHint );
+ }
+
+ buffer.append( ' ' ).append( message );
+
+ problems.add( severity, buffer.toString(), -1, -1, null );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/SettingsValidator.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/SettingsValidator.java
new file mode 100644
index 00000000..79745eca
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/SettingsValidator.java
@@ -0,0 +1,41 @@
+package org.apache.maven.settings.validation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.settings.Settings;
+import org.apache.maven.settings.building.SettingsProblemCollector;
+
+/**
+ * Validate a model settings
+ *
+ * @author Milos Kleint
+ */
+public interface SettingsValidator
+{
+
+ /**
+ * Validate the specified settings.
+ *
+ * @param settings The settings to validate, must not be {@code null}.
+ * @param problems The container used to collect problems that were encountered, must not be {@code null}.
+ */
+ void validate( Settings settings, SettingsProblemCollector problems );
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/site/site.xml b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/site/site.xml
new file mode 100644
index 00000000..3a16bf98
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/site/site.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
+ <body>
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ <item name="JavaDocs" href="apidocs/index.html"/>
+ <item name="Source Xref" href="xref/index.html"/>
+ <!--item name="FAQ" href="faq.html"/-->
+ </menu>
+
+ <menu ref="parent"/>
+ <menu ref="reports"/>
+ </body>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/test/java/org/apache/maven/settings/building/DefaultSettingsBuilderFactoryTest.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/test/java/org/apache/maven/settings/building/DefaultSettingsBuilderFactoryTest.java
new file mode 100644
index 00000000..722abf32
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/test/java/org/apache/maven/settings/building/DefaultSettingsBuilderFactoryTest.java
@@ -0,0 +1,53 @@
+package org.apache.maven.settings.building;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class DefaultSettingsBuilderFactoryTest
+ extends TestCase
+{
+
+ private File getSettings( String name )
+ {
+ return new File( "src/test/resources/settings/factory/" + name + ".xml" ).getAbsoluteFile();
+ }
+
+ public void testCompleteWiring()
+ throws Exception
+ {
+ SettingsBuilder builder = new DefaultSettingsBuilderFactory().newInstance();
+ assertNotNull( builder );
+
+ DefaultSettingsBuildingRequest request = new DefaultSettingsBuildingRequest();
+ request.setSystemProperties( System.getProperties() );
+ request.setUserSettingsFile( getSettings( "simple" ) );
+
+ SettingsBuildingResult result = builder.build( request );
+ assertNotNull( result );
+ assertNotNull( result.getEffectiveSettings() );
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/test/java/org/apache/maven/settings/validation/DefaultSettingsValidatorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/test/java/org/apache/maven/settings/validation/DefaultSettingsValidatorTest.java
new file mode 100644
index 00000000..8c7f21d8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/test/java/org/apache/maven/settings/validation/DefaultSettingsValidatorTest.java
@@ -0,0 +1,244 @@
+package org.apache.maven.settings.validation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.settings.Mirror;
+import org.apache.maven.settings.Profile;
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Repository;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.settings.building.SettingsProblemCollector;
+import org.apache.maven.settings.building.SettingsProblem.Severity;
+
+/**
+ * @author mkleint
+ */
+public class DefaultSettingsValidatorTest
+ extends TestCase
+{
+
+ private DefaultSettingsValidator validator;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ validator = new DefaultSettingsValidator();
+ }
+
+ protected void tearDown()
+ throws Exception
+ {
+ validator = null;
+
+ super.tearDown();
+ }
+
+ private void assertContains( String msg, String substring )
+ {
+ assertTrue( "\"" + substring + "\" was not found in: " + msg, msg.contains( substring ) );
+ }
+
+ public void testValidate()
+ {
+ Settings model = new Settings();
+ Profile prof = new Profile();
+ prof.setId( "xxx" );
+ model.addProfile( prof );
+ SimpleProblemCollector problems = new SimpleProblemCollector();
+ validator.validate( model, problems );
+ assertEquals( 0, problems.messages.size() );
+
+ Repository repo = new Repository();
+ prof.addRepository( repo );
+ problems = new SimpleProblemCollector();
+ validator.validate( model, problems );
+ assertEquals( 2, problems.messages.size() );
+
+ repo.setUrl( "http://xxx.xxx.com" );
+ problems = new SimpleProblemCollector();
+ validator.validate( model, problems );
+ assertEquals( 1, problems.messages.size() );
+
+ repo.setId( "xxx" );
+ problems = new SimpleProblemCollector();
+ validator.validate( model, problems );
+ assertEquals( 0, problems.messages.size() );
+ }
+
+ public void testValidateMirror()
+ throws Exception
+ {
+ Settings settings = new Settings();
+ Mirror mirror = new Mirror();
+ mirror.setId( "local" );
+ settings.addMirror( mirror );
+ mirror = new Mirror();
+ mirror.setId( "illegal\\:/chars" );
+ mirror.setUrl( "http://void" );
+ mirror.setMirrorOf( "void" );
+ settings.addMirror( mirror );
+
+ SimpleProblemCollector problems = new SimpleProblemCollector();
+ validator.validate( settings, problems );
+ assertEquals( 4, problems.messages.size() );
+ assertContains( problems.messages.get( 0 ), "'mirrors.mirror.id' must not be 'local'" );
+ assertContains( problems.messages.get( 1 ), "'mirrors.mirror.url' for local is missing" );
+ assertContains( problems.messages.get( 2 ), "'mirrors.mirror.mirrorOf' for local is missing" );
+ assertContains( problems.messages.get( 3 ), "'mirrors.mirror.id' must not contain any of these characters" );
+ }
+
+ public void testValidateRepository()
+ throws Exception
+ {
+ Profile profile = new Profile();
+ Repository repo = new Repository();
+ repo.setId( "local" );
+ profile.addRepository( repo );
+ repo = new Repository();
+ repo.setId( "illegal\\:/chars" );
+ repo.setUrl( "http://void" );
+ profile.addRepository( repo );
+ Settings settings = new Settings();
+ settings.addProfile( profile );
+
+ SimpleProblemCollector problems = new SimpleProblemCollector();
+ validator.validate( settings, problems );
+ assertEquals( 3, problems.messages.size() );
+ assertContains( problems.messages.get( 0 ),
+ "'profiles.profile[default].repositories.repository.id' must not be 'local'" );
+ assertContains( problems.messages.get( 1 ),
+ "'profiles.profile[default].repositories.repository.url' for local is missing" );
+ assertContains( problems.messages.get( 2 ),
+ "'profiles.profile[default].repositories.repository.id' must not contain any of these characters" );
+ }
+
+ public void testValidateUniqueServerId()
+ throws Exception
+ {
+ Settings settings = new Settings();
+ Server server1 = new Server();
+ server1.setId( "test" );
+ settings.addServer( server1 );
+ Server server2 = new Server();
+ server2.setId( "test" );
+ settings.addServer( server2 );
+
+ SimpleProblemCollector problems = new SimpleProblemCollector();
+ validator.validate( settings, problems );
+ assertEquals( 1, problems.messages.size() );
+ assertContains( problems.messages.get( 0 ),
+ "'servers.server.id' must be unique but found duplicate server with id test" );
+ }
+
+ public void testValidateUniqueProfileId()
+ throws Exception
+ {
+ Settings settings = new Settings();
+ Profile profile1 = new Profile();
+ profile1.setId( "test" );
+ settings.addProfile( profile1 );
+ Profile profile2 = new Profile();
+ profile2.setId( "test" );
+ settings.addProfile( profile2 );
+
+ SimpleProblemCollector problems = new SimpleProblemCollector();
+ validator.validate( settings, problems );
+ assertEquals( 1, problems.messages.size() );
+ assertContains( problems.messages.get( 0 ),
+ "'profiles.profile.id' must be unique but found duplicate profile with id test" );
+ }
+
+ public void testValidateUniqueRepositoryId()
+ throws Exception
+ {
+ Settings settings = new Settings();
+ Profile profile = new Profile();
+ profile.setId( "pro" );
+ settings.addProfile( profile );
+ Repository repo1 = new Repository();
+ repo1.setUrl( "http://apache.org/" );
+ repo1.setId( "test" );
+ profile.addRepository( repo1 );
+ Repository repo2 = new Repository();
+ repo2.setUrl( "http://apache.org/" );
+ repo2.setId( "test" );
+ profile.addRepository( repo2 );
+
+ SimpleProblemCollector problems = new SimpleProblemCollector();
+ validator.validate( settings, problems );
+ assertEquals( 1, problems.messages.size() );
+ assertContains( problems.messages.get( 0 ), "'profiles.profile[pro].repositories.repository.id' must be unique"
+ + " but found duplicate repository with id test" );
+ }
+
+ public void testValidateUniqueProxyId()
+ throws Exception
+ {
+ Settings settings = new Settings();
+ Proxy proxy = new Proxy();
+ String id = null;
+ proxy.setId( id );
+ proxy.setHost("www.example.com");
+ settings.addProxy( proxy );
+ settings.addProxy( proxy );
+
+ SimpleProblemCollector problems = new SimpleProblemCollector();
+ validator.validate( settings, problems );
+ assertEquals( 1, problems.messages.size() );
+ assertContains( problems.messages.get( 0 ), "'proxies.proxy.id' must be unique"
+ + " but found duplicate proxy with id " + id );
+
+ }
+
+ public void testValidateProxy()
+ throws Exception
+ {
+ Settings settings = new Settings();
+ Proxy proxy1 = new Proxy();
+ settings.addProxy( proxy1 );
+
+ SimpleProblemCollector problems = new SimpleProblemCollector();
+ validator.validate( settings, problems );
+ assertEquals( 1, problems.messages.size() );
+ assertContains( problems.messages.get( 0 ), "'proxies.proxy.host' for default is missing" );
+ }
+
+ private static class SimpleProblemCollector
+ implements SettingsProblemCollector
+ {
+
+ public List<String> messages = new ArrayList<String>();
+
+ public void add( Severity severity, String message, int line, int column, Exception cause )
+ {
+ messages.add( message );
+ }
+
+ }
+
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/test/resources/settings/factory/simple.xml b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/test/resources/settings/factory/simple.xml
new file mode 100644
index 00000000..ea664bac
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/test/resources/settings/factory/simple.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<settings>
+ <localRepository>${user.home}/.m2/repository</localRepository>
+</settings>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings/pom.xml b/framework/src/maven/apache-maven-3.3.3/maven-settings/pom.xml
new file mode 100644
index 00000000..e5909a72
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings/pom.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.3.3</version>
+ </parent>
+
+ <artifactId>maven-settings</artifactId>
+
+ <name>Maven Settings</name>
+ <description>Maven Settings model.</description>
+
+ <scm><!-- remove when git scm url format can accept artifact-id at the end, as automatically inherited -->
+ <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
+ <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
+ <tag>maven-3.3.3</tag>
+ </scm>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <configuration>
+ <version>1.1.0</version>
+ <models>
+ <model>src/main/mdo/settings.mdo</model>
+ </models>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings/src/main/java/org/apache/maven/settings/RuntimeInfo.java b/framework/src/maven/apache-maven-3.3.3/maven-settings/src/main/java/org/apache/maven/settings/RuntimeInfo.java
new file mode 100644
index 00000000..9020037f
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings/src/main/java/org/apache/maven/settings/RuntimeInfo.java
@@ -0,0 +1,55 @@
+package org.apache.maven.settings;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+/**
+ * To handle runtime informations like local repository or profiles.
+ *
+ */
+@Deprecated
+public class RuntimeInfo
+{
+ @SuppressWarnings( "checkstyle:constantname" )
+ public static final String userHome = System.getProperty( "user.home" );
+
+ @SuppressWarnings( "checkstyle:constantname" )
+ public static final File userMavenConfigurationHome = new File( userHome, ".m2" );
+
+ public static final File DEFAULT_USER_SETTINGS_FILE = new File( userMavenConfigurationHome, "settings.xml" );
+
+ private File settings;
+
+ public RuntimeInfo()
+ {
+ this.settings = DEFAULT_USER_SETTINGS_FILE;
+ }
+
+ public RuntimeInfo( File settings )
+ {
+ this.settings = settings;
+ }
+
+ public File getFile()
+ {
+ return settings;
+ }
+}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings/src/main/mdo/settings.mdo b/framework/src/maven/apache-maven-3.3.3/maven-settings/src/main/mdo/settings.mdo
new file mode 100644
index 00000000..4e43a466
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings/src/main/mdo/settings.mdo
@@ -0,0 +1,1077 @@
+<?xml version="1.0"?>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0 http://modello.codehaus.org/xsd/modello-1.4.0.xsd"
+ xml.namespace="http://maven.apache.org/SETTINGS/${version}"
+ xml.schemaLocation="http://maven.apache.org/xsd/settings-${version}.xsd">
+ <id>settings</id>
+ <name>Settings</name>
+ <description>
+ <![CDATA[
+ <p>This is a reference for the user-specific configuration for Maven.</p>
+ <p>Includes things that should not be distributed with the pom.xml file, such as developer identity, along with
+ local settings, like proxy information.</p>
+ <p>The default location for the settings file is <i>~/.m2/settings.xml</i></p>
+ <p>An XSD is available at:</p>
+ <ul>
+ <li><a href="http://maven.apache.org/xsd/settings-1.0.0.xsd">http://maven.apache.org/xsd/settings-1.0.0.xsd</a>.</li>
+ </ul>
+ ]]>
+ </description>
+ <defaults>
+ <default>
+ <key>package</key>
+ <value>org.apache.maven.settings</value>
+ </default>
+ </defaults>
+ <classes>
+ <class java.clone="deep">
+ <name>TrackableBase</name>
+ <version>1.0.0+</version>
+ <description>
+ common base class that contains code to track the source for
+ this instance (USER|GLOBAL)
+ </description>
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0+</version>
+ <code>
+ <![CDATA[
+ public static final String USER_LEVEL = "user-level";
+ public static final String GLOBAL_LEVEL = "global-level";
+
+ private String sourceLevel = USER_LEVEL;
+ private boolean sourceLevelSet = false;
+
+ public void setSourceLevel( String sourceLevel )
+ {
+ if ( sourceLevelSet )
+ {
+ throw new IllegalStateException( "Cannot reset sourceLevel attribute; it is already set to: " + sourceLevel );
+ }
+ else if ( !( USER_LEVEL.equals( sourceLevel ) || GLOBAL_LEVEL.equals( sourceLevel ) ) )
+ {
+ throw new IllegalArgumentException( "sourceLevel must be one of: {" + USER_LEVEL + "," + GLOBAL_LEVEL + "}" );
+ }
+ else
+ {
+ this.sourceLevel = sourceLevel;
+ this.sourceLevelSet = true;
+ }
+ }
+
+ public String getSourceLevel()
+ {
+ return sourceLevel;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <name>IdentifiableBase</name>
+ <superClass>TrackableBase</superClass>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ Base class for <code>Mirror</code>, <code>Profile</code>, <code>Proxy</code> and <code>Server</code>.
+ ]]></description>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <defaultValue>default</defaultValue>
+ <required>true</required>
+ </field>
+ </fields>
+ </class>
+ <class rootElement="true" xml.tagName="settings">
+ <name>Settings</name>
+ <version>1.0.0+</version>
+ <superClass>TrackableBase</superClass>
+ <description>
+ Root element of the user configuration file.
+ </description>
+ <fields>
+ <field>
+ <name>localRepository</name>
+ <version>1.0.0+</version>
+ <required>true</required>
+ <description>
+ <![CDATA[
+ The local repository.<br /><b>Default value is:</b> <tt>${user.home}/.m2/repository</tt>
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>interactiveMode</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ Whether Maven should attempt to interact with the user for input.
+ ]]>
+ </description>
+ <type>boolean</type>
+ <defaultValue>true</defaultValue>
+ </field>
+ <field>
+ <name>usePluginRegistry</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ Whether Maven should use the plugin-registry.xml file to manage plugin versions.
+ ]]>
+ </description>
+ <type>boolean</type>
+ <defaultValue>false</defaultValue>
+ </field>
+ <!-- [JC] Not ready to use yet, so I'm making if unavailable for now. -->
+ <!-- field>
+ <name>passwordStore</name>
+ <version>1.0.0+</version>
+ <required>false</required>
+ <description><![CDATA[The keystore used to store passwords.]]></description>
+ <type>String</type>
+ </field -->
+ <field>
+ <name>offline</name>
+ <version>1.0.0+</version>
+ <required>false</required>
+ <description>
+ <![CDATA[
+ Indicate whether maven should operate in offline mode full-time.
+ ]]>
+ </description>
+ <type>boolean</type>
+ <defaultValue>false</defaultValue>
+ </field>
+ <!-- [JC] Not ready to use yet, so I'm making if unavailable for now. -->
+ <!-- field>
+ <name>jdks</name>
+ <version>1.0.0+</version>
+ <description><![CDATA[
+ Configuration for different java environment profiles. One good use
+ for this might be to configure both JDK 1.4 and JDK 1.5 to work with
+ maven. Profiles will allow switching of entire java environments
+ based on the profile id, either in the defaults section below, or on
+ the command line.
+ ]]></description>
+ <association>
+ <type>Jdk</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field -->
+ <field xdoc.separator="blank">
+ <name>proxies</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ Configuration for different proxy profiles. Multiple proxy profiles
+ might come in handy for anyone working from a notebook or other
+ mobile platform, to enable easy switching of entire proxy
+ configurations by simply specifying the profile id, again either from
+ the command line or from the defaults section below.
+ ]]>
+ </description>
+ <association>
+ <type>Proxy</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>servers</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ Configuration of server-specific settings, mainly authentication
+ method. This allows configuration of authentication on a per-server
+ basis.
+ ]]>
+ </description>
+ <association>
+ <type>Server</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>mirrors</name>
+ <version>1.0.0+</version>
+ <description>
+ Configuration of download mirrors for repositories.
+ </description>
+ <association>
+ <type>Mirror</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>profiles</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ Configuration of build profiles for adjusting the build
+ according to environmental parameters.
+ ]]>
+ </description>
+ <association>
+ <type>Profile</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>activeProfiles</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ List of manually-activated build profiles, specified in the order in which
+ they should be applied.
+ ]]>
+ </description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>pluginGroups</name>
+ <version>1.0.0+</version>
+ <description>
+ List of groupIds to search for a plugin when that plugin
+ groupId is not explicitly provided.
+ </description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0+</version>
+ <code>
+ <![CDATA[
+ public Boolean getInteractiveMode()
+ {
+ return Boolean.valueOf( isInteractiveMode() );
+ }
+
+ private Proxy activeProxy;
+
+ /**
+ * Reset the <code>activeProxy</code> field to <code>null</code>
+ */
+ public void flushActiveProxy()
+ {
+ this.activeProxy = null;
+ }
+
+ /**
+ * @return the first active proxy
+ */
+ public synchronized Proxy getActiveProxy()
+ {
+ if ( activeProxy == null )
+ {
+ java.util.List<Proxy> proxies = getProxies();
+ if ( proxies != null && !proxies.isEmpty() )
+ {
+ for ( Proxy proxy : proxies )
+ {
+ if ( proxy.isActive() )
+ {
+ activeProxy = proxy;
+ break;
+ }
+ }
+ }
+ }
+
+ return activeProxy;
+ }
+
+ public Server getServer( String serverId )
+ {
+ Server match = null;
+
+ java.util.List<Server> servers = getServers();
+ if ( servers != null && serverId != null )
+ {
+ for ( Server server : servers )
+ {
+ if ( serverId.equals( server.getId() ) )
+ {
+ match = server;
+ break;
+ }
+ }
+ }
+
+ return match;
+ }
+
+ @Deprecated
+ public Mirror getMirrorOf( String repositoryId )
+ {
+ Mirror match = null;
+
+ java.util.List<Mirror> mirrors = getMirrors();
+ if ( mirrors != null && repositoryId != null )
+ {
+ for ( Mirror mirror : mirrors )
+ {
+ if ( repositoryId.equals( mirror.getMirrorOf() ) )
+ {
+ match = mirror;
+ break;
+ }
+ }
+ }
+
+ return match;
+ }
+
+ private java.util.Map<String, Profile> profileMap;
+
+ /**
+ * Reset the <code>profileMap</code> field to <code>null</code>
+ */
+ public void flushProfileMap()
+ {
+ this.profileMap = null;
+ }
+
+ /**
+ * @return a Map of profiles field with <code>Profile#getId()</code> as key
+ * @see org.apache.maven.settings.Profile#getId()
+ */
+ public java.util.Map<String, Profile> getProfilesAsMap()
+ {
+ if ( profileMap == null )
+ {
+ profileMap = new java.util.LinkedHashMap<String, Profile>();
+
+ if ( getProfiles() != null )
+ {
+ for ( Profile profile : getProfiles() )
+ {
+ profileMap.put( profile.getId(), profile );
+ }
+ }
+ }
+
+ return profileMap;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <!-- @todo: is any of this too CVS specific? Investigate other SCMs -->
+ <!-- [JC] Commenting out until we're ready to use it... -->
+ <!-- class>
+ <name>Jdk</name>
+ <version>1.0.0+</version>
+ <superClass>TrackableBase</superClass>
+ <description><![CDATA[Describes one Java environment]]></description>
+ <fields>
+ <field>
+ <name>active</name>
+ <version>1.0.0+</version>
+ <required>false</required>
+ <defaultValue>false</defaultValue>
+ <description><![CDATA[Whether this JDK is the active one.]]></description>
+ <type>boolean</type>
+ </field>
+ <field>
+ <name>version</name>
+ <version>1.0.0+</version>
+ <required>true</required>
+ <description><![CDATA[The JDK major version (eg. '1.4').]]></description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>javaHome</name>
+ <version>1.0.0+</version>
+ <required>true</required>
+ <description><![CDATA[The JDK home.]]></description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class -->
+ <class>
+ <name>Proxy</name>
+ <version>1.0.0+</version>
+ <superClass>IdentifiableBase</superClass>
+ <description>
+ <![CDATA[
+ The <code>&lt;proxy&gt;</code> element contains informations required to a proxy settings.
+ ]]></description>
+ <fields>
+ <field>
+ <name>active</name>
+ <version>1.0.0+</version>
+ <required>false</required>
+ <defaultValue>true</defaultValue>
+ <description>
+ <![CDATA[
+ Whether this proxy configuration is the active one.
+ ]]>
+ </description>
+ <type>boolean</type>
+ </field>
+ <field>
+ <name>protocol</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The proxy protocol.
+ ]]>
+ </description>
+ <type>String</type>
+ <defaultValue>http</defaultValue>
+ </field>
+ <field>
+ <name>username</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The proxy user.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>password</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The proxy password.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>port</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The proxy port.
+ ]]>
+ </description>
+ <type>int</type>
+ <defaultValue>8080</defaultValue>
+ </field>
+ <field>
+ <name>host</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The proxy host.
+ ]]>
+ </description>
+ <type>String</type>
+ <required>true</required>
+ </field>
+ <field>
+ <name>nonProxyHosts</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The list of non-proxied hosts (delimited by |).
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>Server</name>
+ <version>1.0.0+</version>
+ <superClass>IdentifiableBase</superClass>
+ <description>
+ <![CDATA[
+ The <code>&lt;server&gt;</code> element contains informations required to a server settings.
+ ]]></description>
+ <fields>
+ <field>
+ <name>username</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The username used to authenticate.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>password</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The password used in conjunction with the username to authenticate.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>privateKey</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The private key location used to authenticate.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>passphrase</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The passphrase used in conjunction with the privateKey to authenticate.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>filePermissions</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The permissions for files when they are created.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>directoryPermissions</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The permissions for directories when they are created.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>configuration</name>
+ <type>DOM</type>
+ <description>
+ <![CDATA[
+ Extra configuration for the transport layer.
+ ]]>
+ </description>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>Mirror</name>
+ <version>1.0.0+</version>
+ <superClass>IdentifiableBase</superClass>
+ <description>
+ A download mirror for a given repository.
+ </description>
+ <fields>
+ <field>
+ <name>mirrorOf</name>
+ <required>true</required>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>
+ The server ID of the repository being mirrored, eg
+ "central". This MUST NOT match the mirror id.
+ </description>
+ </field>
+ <field>
+ <name>name</name>
+ <required>false</required>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>
+ The optional name that describes the mirror.
+ </description>
+ </field>
+ <field>
+ <name>url</name>
+ <required>true</required>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>The URL of the mirror repository.</description>
+ </field>
+ <field>
+ <name>layout</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ <defaultValue>default</defaultValue>
+ <description>The layout of the mirror repository. Since Maven 3.</description>
+ </field>
+ <field>
+ <name>mirrorOfLayouts</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ <defaultValue>default,legacy</defaultValue>
+ <description>
+ The layouts of repositories being mirrored. This value can be used to restrict the usage
+ of the mirror to repositories with a matching layout (apart from a matching id). Since Maven 3.
+ </description>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0+</version>
+ <code>
+ <![CDATA[
+
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder( 128 );
+ sb.append( "Mirror[" );
+ sb.append( "id=" ).append( this.getId() );
+ sb.append( ",mirrorOf=" ).append( mirrorOf );
+ sb.append( ",url=" ).append( this.url );
+ sb.append( ",name=" ).append( this.name );
+ sb.append( "]" );
+ return sb.toString();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <!-- Profile support -->
+ <class>
+ <name>Profile</name>
+ <version>1.0.0+</version>
+ <superClass>IdentifiableBase</superClass>
+ <description>
+ <![CDATA[
+ Modifications to the build process which is keyed on some
+ sort of environmental parameter.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>activation</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The conditional logic which will automatically
+ trigger the inclusion of this profile.
+ ]]>
+ </description>
+ <association>
+ <type>Activation</type>
+ </association>
+ </field>
+ <field>
+ <name>properties</name>
+ <description>
+ <![CDATA[
+ Extended configuration specific to this profile goes here.
+ Contents take the form of
+ <code>&lt;property.name&gt;property.value&lt;/property.name&gt;</code>
+ ]]>
+ </description>
+ <type>Properties</type>
+ <association xml.mapStyle="inline">
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>repositories</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The lists of the remote repositories.
+ ]]>
+ </description>
+ <association>
+ <type>Repository</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>pluginRepositories</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The lists of the remote repositories for discovering plugins.
+ ]]>
+ </description>
+ <association>
+ <type>Repository</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ <comment>
+ <![CDATA[
+ This may be removed or relocated in the near
+ future. It is undecided whether plugins really need a remote
+ repository set of their own.
+ ]]>
+ </comment>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>Activation</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The conditions within the build runtime environment which will trigger
+ the automatic inclusion of the parent build profile.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>activeByDefault</name>
+ <version>1.0.0+</version>
+ <type>boolean</type>
+ <description>
+ Flag specifying whether this profile is active as a default.
+ </description>
+ </field>
+ <field>
+ <name>jdk</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ Specifies that this profile will be activated when a matching JDK is detected.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>os</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ Specifies that this profile will be activated when matching OS attributes are detected.
+ ]]>
+ </description>
+ <association>
+ <type>ActivationOS</type>
+ </association>
+ </field>
+ <field>
+ <name>property</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ Specifies that this profile will be activated when this System property is specified.
+ ]]>
+ </description>
+ <association>
+ <type>ActivationProperty</type>
+ </association>
+ </field>
+ <field>
+ <name>file</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ Specifies that this profile will be activated based on existence of a file.
+ ]]>
+ </description>
+ <association>
+ <type>ActivationFile</type>
+ </association>
+ </field>
+ </fields>
+ </class>
+
+ <!-- TODO: reproduced from maven-model/maven.mdo, instead should inherit code and link to external docs -->
+ <class java.clone="deep">
+ <name>RepositoryBase</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ Repository contains the information needed
+ for establishing connections with remote repoistory
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ A unique identifier for a repository.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>name</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ Human readable name of the repository.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ The url of the repository.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>layout</name>
+ <version>1.0.0+</version>
+ <description>
+ The type of layout this repository uses for locating and
+ storing artifacts - can be "legacy" or "default".
+ </description>
+ <type>String</type>
+ <defaultValue>default</defaultValue>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0+</version>
+ <code>
+ <![CDATA[
+ /**
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals( Object obj )
+ {
+ RepositoryBase other = (RepositoryBase) obj;
+
+ boolean retValue = false;
+
+ if ( id != null )
+ {
+ retValue = id.equals( other.id );
+ }
+
+ return retValue;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+
+ <class>
+ <name>Repository</name>
+ <superClass>RepositoryBase</superClass>
+ <version>1.0.0+</version>
+ <description>
+ Repository contains the information needed for establishing
+ connections with remote repository
+ </description>
+ <fields>
+ <field>
+ <name>releases</name>
+ <version>1.0.0+</version>
+ <description>
+ How to handle downloading of releases from this repository
+ </description>
+ <association>
+ <type>RepositoryPolicy</type>
+ </association>
+ </field>
+ <field>
+ <name>snapshots</name>
+ <version>1.0.0+</version>
+ <description>
+ How to handle downloading of snapshots from this repository
+ </description>
+ <association>
+ <type>RepositoryPolicy</type>
+ </association>
+ </field>
+ </fields>
+ <!-- prevent Modello generation of an incorrect equals method. Could be avoided by using <identity/> tags to mark ID as the only identity field -->
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0+</version>
+ <code>
+ <![CDATA[
+ /**
+ * @see org.apache.maven.settings.RepositoryBase#equals(java.lang.Object)
+ */
+ public boolean equals( Object obj )
+ {
+ return super.equals( obj );
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+
+ <class java.clone="deep">
+ <name>RepositoryPolicy</name>
+ <version>1.0.0+</version>
+ <description>Download policy</description>
+ <fields>
+ <field>
+ <name>enabled</name>
+ <version>1.0.0+</version>
+ <description>
+ Whether to use this repository for downloading this type of
+ artifact.
+ </description>
+ <type>boolean</type>
+ <defaultValue>true</defaultValue>
+ </field>
+ <field>
+ <name>updatePolicy</name>
+ <version>1.0.0+</version>
+ <description>
+ The frequency for downloading updates - can be "always",
+ "daily" (default), "interval:XXX" (in minutes) or "never"
+ (only if it doesn't exist locally).
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>checksumPolicy</name>
+ <version>1.0.0+</version>
+ <description>
+ What to do when verification of an artifact checksum fails -
+ warn, fail, etc. Valid values are "fail" or "warn".
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+
+ <class java.clone="deep">
+ <name>ActivationProperty</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ This is the property specification used to activate a profile. If the value field is empty,
+ then the existence of the named property will activate the profile, otherwise it does a case-sensitive
+ match against the property value as well.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <required>true</required>
+ <description>
+ The name of the property to be used to activate a profile.
+ </description>
+ </field>
+ <field>
+ <name>value</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>
+ The value of the property to be used to activate a profile.
+ </description>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>ActivationOS</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ This is an activator which will detect an operating system's attributes in order to activate
+ its profile.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>
+ The name of the OS to be used to activate a profile.
+ </description>
+ </field>
+ <field>
+ <name>family</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>
+ The general family of the OS to be used to activate a
+ profile (e.g. 'windows')
+ </description>
+ </field>
+ <field>
+ <name>arch</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>
+ The architecture of the OS to be used to activate a profile.
+ </description>
+ </field>
+ <field>
+ <name>version</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>
+ The version of the OS to be used to activate a profile.
+ </description>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>ActivationFile</name>
+ <version>1.0.0+</version>
+ <description>
+ <![CDATA[
+ This is the file specification used to activate a profile. The missing value will be a the location
+ of a file that needs to exist, and if it doesn't the profile must run. On the other hand exists will test
+ for the existence of the file and if it is there will run the profile.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>missing</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>
+ The name of the file that should be missing to activate a
+ profile.
+ </description>
+ </field>
+ <field>
+ <name>exists</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>
+ The name of the file that should exist to activate a profile.
+ </description>
+ </field>
+ </fields>
+ </class>
+ <!-- /BuildProfile support -->
+ </classes>
+</model>
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings/src/site/apt/index.apt b/framework/src/maven/apache-maven-3.3.3/maven-settings/src/site/apt/index.apt
new file mode 100644
index 00000000..6e404e83
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings/src/site/apt/index.apt
@@ -0,0 +1,36 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ Introduction
+ -----
+ Vincent Siveton
+ -----
+ 2006-11-04
+ -----
+
+Maven Settings Model
+
+ This is strictly the model for Maven settings.
+
+ The following are generated from this model:
+
+ * {{{./apidocs/index.html}Java sources}} with Reader and Writers for the Xpp3 XML parser
+
+ * A {{{./settings.html}Descriptor Reference}}
+
+ * An {{{http://maven.apache.org/xsd/settings-1.0.0.xsd}XSD}}
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-settings/src/site/site.xml b/framework/src/maven/apache-maven-3.3.3/maven-settings/src/site/site.xml
new file mode 100644
index 00000000..3a16bf98
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-settings/src/site/site.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
+ <body>
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ <item name="JavaDocs" href="apidocs/index.html"/>
+ <item name="Source Xref" href="xref/index.html"/>
+ <!--item name="FAQ" href="faq.html"/-->
+ </menu>
+
+ <menu ref="parent"/>
+ <menu ref="reports"/>
+ </body>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/pom.xml b/framework/src/maven/apache-maven-3.3.3/pom.xml
new file mode 100644
index 00000000..6812e823
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/pom.xml
@@ -0,0 +1,654 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version
+ 2.0 (the "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
+ OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-parent</artifactId>
+ <version>26</version>
+ <relativePath>../pom/maven/pom.xml</relativePath>
+ </parent>
+
+ <artifactId>maven</artifactId>
+ <version>3.3.3</version>
+ <packaging>pom</packaging>
+
+ <name>Apache Maven</name>
+ <description>Maven is a software build management and
+ comprehension tool. Based on the concept of a project object model:
+ builds, dependency management, documentation creation, site
+ publication, and distribution publication are all controlled from
+ the declarative file. Maven can be extended by plugins to utilise a
+ number of other development tools for reporting or the build
+ process.
+ </description>
+ <url>http://maven.apache.org/ref/${project.version}</url>
+ <inceptionYear>2001</inceptionYear>
+
+ <properties>
+ <maven.compiler.source>1.7</maven.compiler.source>
+ <maven.compiler.target>1.7</maven.compiler.target>
+ <classWorldsVersion>2.5.2</classWorldsVersion>
+ <commonsCliVersion>1.2</commonsCliVersion>
+ <junitVersion>4.11</junitVersion>
+ <plexusVersion>1.5.5</plexusVersion>
+ <plexusInterpolationVersion>1.21</plexusInterpolationVersion>
+ <plexusUtilsVersion>3.0.20</plexusUtilsVersion>
+ <!-- Latest version of Guava that works with Sisu -->
+ <guavaVersion>18.0</guavaVersion>
+ <guiceVersion>3.2.5</guiceVersion>
+ <sisuInjectVersion>0.3.0</sisuInjectVersion>
+ <wagonVersion>2.9</wagonVersion> <!-- Verify SNAPSHOT for MNG-5605 -->
+ <securityDispatcherVersion>1.3</securityDispatcherVersion>
+ <cipherVersion>1.7</cipherVersion>
+ <modelloVersion>1.8.1</modelloVersion>
+ <jxpathVersion>1.3</jxpathVersion>
+ <aetherVersion>1.0.2.v20150114</aetherVersion>
+ <slf4jVersion>1.7.5</slf4jVersion>
+ <maven.test.redirectTestOutputToFile>true</maven.test.redirectTestOutputToFile>
+ <!-- Control the name of the distribution and information output by mvn -->
+ <distributionId>apache-maven</distributionId>
+ <distributionShortName>Maven</distributionShortName>
+ <distributionName>Apache Maven</distributionName>
+ <maven.site.path>ref/3-LATEST</maven.site.path>
+ <checkstyle.violation.ignore>RedundantThrows,NewlineAtEndOfFile,ParameterNumber,MethodLength,FileLength,JavadocType,MagicNumber,InnerAssignment,MethodName</checkstyle.violation.ignore>
+ <checkstyle.excludes>**/package-info.java</checkstyle.excludes>
+ </properties>
+
+ <modules>
+ <module>maven-plugin-api</module>
+ <module>maven-builder-support</module>
+ <module>maven-model</module>
+ <module>maven-model-builder</module>
+ <module>maven-core</module>
+ <module>maven-settings</module>
+ <module>maven-settings-builder</module>
+ <module>maven-artifact</module>
+ <module>maven-aether-provider</module>
+ <module>maven-repository-metadata</module>
+ <module>maven-embedder</module>
+ <module>maven-compat</module>
+ <module>apache-maven</module>
+ </modules>
+
+ <scm>
+ <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
+ <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
+ <url>https://github.com/apache/maven/tree/${project.scm.tag}</url>
+ <tag>maven-3.3.3</tag>
+ </scm>
+ <issueManagement>
+ <system>jira</system>
+ <url>https://issues.apache.org/jira/browse/MNG</url>
+ </issueManagement>
+ <ciManagement>
+ <system>Jenkins</system>
+ <url>https://builds.apache.org/job/maven-3.x/</url>
+ </ciManagement>
+ <distributionManagement>
+ <downloadUrl>http://maven.apache.org/download.html</downloadUrl>
+ <site>
+ <id>apache.website</id>
+ <url>scm:svn:https://svn.apache.org/repos/infra/websites/production/maven/components/${maven.site.path}</url>
+ </site>
+ </distributionManagement>
+
+ <contributors>
+ <contributor>
+ <name>Stuart McCulloch</name>
+ </contributor>
+ <contributor>
+ <name>Christian Schulte (MNG-2199)</name>
+ </contributor>
+ <contributor>
+ <name>Christopher Tubbs (MNG-4226)</name>
+ </contributor>
+ <contributor>
+ <name>Konstantin Perikov (MNG-4565)</name>
+ </contributor>
+ <contributor>
+ <name>SĂ©bastian Le Merdy (MNG-5613)</name>
+ </contributor>
+ <contributor>
+ <name>Mark Ingram (MNG-5639)</name>
+ </contributor>
+ <contributor>
+ <name>Phil Pratt-Szeliga (MNG-5645)</name>
+ </contributor>
+ </contributors>
+
+ <prerequisites>
+ <maven>2.2.1</maven>
+ </prerequisites>
+
+ <!--bootstrap-start-comment-->
+ <dependencyManagement>
+ <!--bootstrap-end-comment-->
+ <dependencies>
+ <!-- Maven Modules -->
+ <!--bootstrap-start-comment-->
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-settings</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-settings-builder</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-embedder</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model-builder</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-compat</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-aether-provider</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository-metadata</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-builder-support</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <!--bootstrap-end-comment-->
+ <!-- Plexus -->
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>${plexusUtilsVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <version>${guavaVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.sisu</groupId>
+ <artifactId>sisu-guice</artifactId>
+ <version>${guiceVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.sisu</groupId>
+ <artifactId>sisu-guice</artifactId>
+ <version>${guiceVersion}</version>
+ <classifier>no_aop</classifier>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>org.eclipse.sisu.plexus</artifactId>
+ <version>${sisuInjectVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-annotations</artifactId>
+ <version>${plexusVersion}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-classworlds</artifactId>
+ <version>${classWorldsVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interpolation</artifactId>
+ <version>${plexusInterpolationVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>${slf4jVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <version>${slf4jVersion}</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ <version>1.0.7</version>
+ <optional>true</optional>
+ </dependency>
+ <!-- Wagon -->
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <version>${wagonVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http</artifactId>
+ <version>${wagonVersion}</version>
+ <classifier>shaded</classifier>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <!-- Repository -->
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-api</artifactId>
+ <version>${aetherVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-spi</artifactId>
+ <version>${aetherVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-impl</artifactId>
+ <version>${aetherVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-util</artifactId>
+ <version>${aetherVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-connector-basic</artifactId>
+ <version>${aetherVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.aether</groupId>
+ <artifactId>aether-transport-wagon</artifactId>
+ <version>${aetherVersion}</version>
+ </dependency>
+ <!-- Commons -->
+ <dependency>
+ <groupId>commons-cli</groupId>
+ <artifactId>commons-cli</artifactId>
+ <version>${commonsCliVersion}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>commons-jxpath</groupId>
+ <artifactId>commons-jxpath</artifactId>
+ <version>${jxpathVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-sec-dispatcher</artifactId>
+ <version>${securityDispatcherVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-cipher</artifactId>
+ <version>${cipherVersion}</version>
+ </dependency>
+ </dependencies>
+ <!--bootstrap-start-comment-->
+ </dependencyManagement>
+ <!--bootstrap-end-comment-->
+ <!--bootstrap-start-comment-->
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junitVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <!--bootstrap-end-comment-->
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-metadata</artifactId>
+ <version>${plexusVersion}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate-metadata</goal>
+ <goal>generate-test-metadata</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>sisu-maven-plugin</artifactId>
+ <version>${sisuInjectVersion}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>main-index</goal>
+ <goal>test-index</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <autoVersionSubmodules>true</autoVersionSubmodules>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <argLine>-Xmx256m</argLine>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <version>${modelloVersion}</version>
+ <executions>
+ <execution>
+ <id>site-docs</id>
+ <phase>pre-site</phase>
+ <goals>
+ <goal>xdoc</goal>
+ <goal>xsd</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>standard</id>
+ <goals>
+ <goal>java</goal>
+ <goal>xpp3-reader</goal>
+ <goal>xpp3-writer</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>1.0.0</version>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>buildnumber-maven-plugin</artifactId>
+ <version>1.2</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <configuration>
+ <topSiteURL>scm:svn:https://svn.apache.org/repos/infra/websites/production/maven/content/${maven.site.path}</topSiteURL>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-scm-publish-plugin</artifactId>
+ <version>1.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>src/test/resources*/**</exclude>
+ <exclude>src/test/projects/**</exclude>
+ <exclude>src/test/remote-repo/**</exclude>
+ <exclude>**/*.odg</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
+ <plugin>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>lifecycle-mapping</artifactId>
+ <version>1.0.0</version>
+ <configuration>
+ <lifecycleMappingMetadata>
+ <pluginExecutions>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <versionRange>[0.10,)</versionRange>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore />
+ </action>
+ </pluginExecution>
+ </pluginExecutions>
+ </lifecycleMappingMetadata>
+ </configuration>
+ </plugin>
+ <plugin><!-- TODO remove when upgrading parent to 27 -->
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <version>2.14</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>animal-sniffer-maven-plugin</artifactId>
+ <version>1.13</version>
+ <configuration>
+ <signature>
+ <groupId>org.codehaus.mojo.signature</groupId>
+ <artifactId>java16</artifactId>
+ <version>1.1</version>
+ </signature>
+ </configuration>
+ <executions>
+ <execution>
+ <id>check-java-1.6-compat</id>
+ <phase>process-classes</phase>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-doap-plugin</artifactId>
+ <version>1.1</version>
+ <configuration>
+ <asfExtOptions>
+ <charter>The mission of the Apache Maven project is to create and maintain software
+ libraries that provide a widely-used project build tool, targeting mainly Java
+ development. Apache Maven promotes the use of dependencies via a
+ standardized coordinate system, binary plugins, and a standard build
+ lifecycle.</charter>
+ </asfExtOptions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludes combine.children="append">
+ <exclude>bootstrap/**</exclude>
+ <exclude>README.bootstrap.txt</exclude>
+ <exclude>.repository/**</exclude> <!-- jenkins with local maven repository -->
+ <exclude>.maven/spy.log</exclude> <!-- hudson maven3 integration log -->
+ <exclude>.java-version</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>apache-release</id>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>source-release-assembly</id>
+ <configuration>
+ <!-- we have a dedicated distribution module -->
+ <skipAssembly>true</skipAssembly>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>reporting</id>
+ <reporting>
+ <plugins>
+ <plugin><!-- TODO remove when upgrading parent to 27 -->
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-project-info-reports-plugin</artifactId>
+ <version>2.8</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <linksource>true</linksource>
+ <notimestamp>true</notimestamp>
+ <quiet>true</quiet>
+ <links combine.children="append">
+ <link>http://download.eclipse.org/aether/aether-core/${aetherVersion}/apidocs/</link>
+ <link>http://plexus.codehaus.org/plexus-containers/plexus-container-default/apidocs/</link>
+ </links>
+ </configuration>
+ <reportSets>
+ <reportSet>
+ <id>aggregate</id>
+ <inherited>false</inherited>
+ <reports>
+ <report>aggregate</report>
+ </reports>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jxr-plugin</artifactId>
+ <reportSets>
+ <reportSet>
+ <id>aggregate</id>
+ <inherited>false</inherited>
+ <reports>
+ <report>aggregate</report>
+ </reports>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ <plugin><!-- TODO remove when upgrading parent to 27 -->
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <version>2.13</version>
+ </plugin>
+ </plugins>
+ </reporting>
+ </profile>
+ <profile>
+ <id>maven-repo-local</id>
+ <activation>
+ <property>
+ <name>maven.repo.local</name>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <systemProperties combine.children="append">
+ <property>
+ <!-- Pass this through to the tests (if set!) to have them pick the right repository -->
+ <name>maven.repo.local</name>
+ <value>${maven.repo.local}</value>
+ </property>
+ </systemProperties>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/framework/src/maven/apache-maven-3.3.3/src/site/resources/images/maven-deps.png b/framework/src/maven/apache-maven-3.3.3/src/site/resources/images/maven-deps.png
new file mode 100644
index 00000000..d23033fb
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/src/site/resources/images/maven-deps.png
Binary files differ
diff --git a/framework/src/maven/apache-maven-3.3.3/src/site/site.xml b/framework/src/maven/apache-maven-3.3.3/src/site/site.xml
new file mode 100644
index 00000000..bcc61034
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/src/site/site.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.0.xsd"
+ name="Apache Maven">
+
+ <bannerLeft>
+ <name>${project.name}</name>
+ <src>http://maven.apache.org/images/apache-maven-project.png</src>
+ <href>http://maven.apache.org/</href>
+ </bannerLeft>
+ <bannerRight>
+ <src>http://maven.apache.org/images/maventxt_logo_200.gif</src>
+ </bannerRight>
+
+ <skin>
+ <groupId>org.apache.maven.skins</groupId>
+ <artifactId>maven-fluido-skin</artifactId>
+ <version>1.3.0</version>
+ </skin>
+
+ <body>
+ <breadcrumbs>
+ <item name="Ref" href="../" />
+ <item name="Maven ${project.version}" href="./" />
+ </breadcrumbs>
+
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ <item name="JavaDocs" href="apidocs/index.html"/>
+ <item name="Source Xref" href="xref/index.html"/>
+ <!--item name="FAQ" href="faq.html"/-->
+ </menu>
+
+ <menu name="Descriptors Reference">
+ <item name="POM" href="./maven-model/maven.html"/>
+ <item name="Settings" href="./maven-settings/settings.html"/>
+ <item name="Toolchains" href="./maven-core/toolchains.html"/>
+ </menu>
+
+ <menu name="Reference">
+ <item name="Lifecycles" href="./maven-core/lifecycles.html"/>
+ <item name="Plugin Bindings to Default Lifecycle" href="./maven-core/default-bindings.html"/>
+ <item name="Artifact Handlers" href="./maven-core/artifact-handlers.html"/>
+ <item name="CLI options" href="./maven-embedder/cli.html"/>
+ </menu>
+
+ <menu name="Development">
+ <item name="Maven Developer Centre" href="../../developers/index.html"/>
+ <item name="Maven Core ITs" href="../../core-its/index.html"/>
+ </menu>
+
+ <menu ref="modules"/>
+ <menu ref="reports"/>
+ </body>
+</project> \ No newline at end of file
diff --git a/framework/src/maven/apache-maven-3.3.3/src/site/xdoc/index.xml b/framework/src/maven/apache-maven-3.3.3/src/site/xdoc/index.xml
new file mode 100644
index 00000000..918824c4
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/src/site/xdoc/index.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0"?>
+
+<!--
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<document>
+
+ <properties>
+ <title>Introduction</title>
+ <author email="hboutemy_AT_apache_DOT_org">Hervé Boutemy</author>
+ </properties>
+
+ <body>
+
+ <section name="Apache Maven 3.x">
+
+ <p>Maven is a project development management and
+ comprehension tool. Based on the concept of a project object model:
+ builds, dependency management, documentation creation, site
+ publication, and distribution publication are all controlled from
+ <a href="./maven-model/maven.html">the <code>pom.xml</code> declarative file</a>. Maven can be extended by
+ <a href="http://maven.apache.org/plugins/">plugins</a> to utilise a
+ number of other development tools for reporting or the build
+ process.</p>
+
+ <p>
+ <img src="images/maven-deps.png" width="784" height="595" border="0" usemap="#Maven_dependencies" />
+ <map name="Maven_dependencies">
+ <area shape="rect" coords="228,1,361,36" alt="apache-maven" href="apache-maven/" />
+ <area shape="rect" coords="228,58,361,95" alt="maven-embedder" href="maven-embedder/" />
+ <area shape="rect" coords="228,116,361,152" alt="maven-compat" href="maven-compat/" />
+ <area shape="rect" coords="228,175,361,211" alt="maven-core" href="maven-core/" />
+ <area shape="rect" coords="118,233,275,269" alt="maven-aether-provider" href="maven-aether-provider/" />
+ <area shape="rect" coords="0,287,192,323" alt="maven-repository-metadata" href="maven-repository-metadata/" />
+ <area shape="rect" coords="245,342,343,378" alt="maven-plugin-api" href="maven-plugin-api/" />
+ <area shape="rect" coords="253,401,336,436" alt="maven-artifact" href="maven-artifact/" />
+ <area shape="rect" coords="296,234,442,270" alt="maven-builder-support" href="maven-builder-support/" />
+ <area shape="rect" coords="382,176,528,211" alt="maven-settings-builder" href="maven-settings-builder/" />
+ <area shape="rect" coords="446,234,537,269" alt="maven-settings" href="maven-settings/" />
+ <area shape="rect" coords="388,284,521,319" alt="maven-model-builder" href="maven-model-builder/" />
+ <area shape="rect" coords="409,342,500,378" alt="maven-model" href="maven-model/" />
+ <area shape="rect" coords="551,58,707,94" alt="commons-cli" href="http://commons.apache.org/cli/" />
+ <area shape="rect" coords="551,116,739,152" alt="wagon-provider-api" href="http://maven.apache.org/wagon/wagon-provider-api/" />
+ <area shape="rect" coords="550,175,690,211" alt="plexus-sec-dispatcher" href="http://plexus.codehaus.org/plexus-components/plexus-sec-dispatcher/project-reports.html" />
+ <area shape="rect" coords="581,230,660,265" alt="plexus-cipher" href="http://plexus.codehaus.org/plexus-components/plexus-cipher/project-reports.html" />
+ <area shape="rect" coords="551,284,707,320" alt="plexus-interpolation" href="http://plexus.codehaus.org/plexus-components/plexus-interpolation/" />
+ <area shape="rect" coords="551,359,776,395" alt="plexus-component-annotations" href="http://plexus.codehaus.org/plexus-containers/plexus-component-annotations/" />
+ <area shape="rect" coords="550,401,682,437" alt="plexus-classworlds" href="http://plexus.codehaus.org/plexus-classworlds/" />
+ <area shape="rect" coords="685,455,775,491" alt="plexus-utils" href="http://plexus.codehaus.org/plexus-utils/" />
+ <area shape="rect" coords="542,167,783,502" alt="plexus" href="http://plexus.codehaus.org/" />
+ <area shape="rect" coords="68,338,240,482" alt="aether" href="http://www.eclipse.org/projects/project_summary.php?projectid=technology.aether" />
+ <area shape="rect" coords="388,393,520,594" alt="sisu" href="http://www.eclipse.org/projects/project_summary.php?projectid=technology.sisu" />
+ <area shape="rect" coords="519,518,621,554" alt="guice" href="http://code.google.com/p/google-guice/" />
+ </map>
+ </p>
+ </section>
+
+ </body>
+
+</document>
diff --git a/framework/src/maven/apache-maven-3.3.3/src/site/xdoc/maven-deps.odg b/framework/src/maven/apache-maven-3.3.3/src/site/xdoc/maven-deps.odg
new file mode 100644
index 00000000..9d4193a8
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/src/site/xdoc/maven-deps.odg
Binary files differ